HeroUITools.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System.Collections.Generic;
  2. using Fort23.Core;
  3. using Fort23.UTool;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6. namespace Fort23.Mono
  7. {
  8. public static class HeroUITools
  9. {
  10. /// <summary>
  11. /// 根据星级,显示不同的数量的星星和样子
  12. /// </summary>
  13. /// <param name="stars"></param>
  14. /// <param name="starGrade"></param>
  15. public static void SetStarShow(List<object> stars, int starGrade)
  16. {
  17. // 最大星级展示个数(6星,只显示一颗星星,换颜色)
  18. int maxShowStar = 5;
  19. // 计算 当前星级 应该用什么星星的表现
  20. int group = (starGrade - 1) / maxShowStar;
  21. int i = 1;
  22. int showCount = (starGrade - 1) % maxShowStar + 1;
  23. foreach (GameObject star in stars)
  24. {
  25. SetStarImg(group, star);
  26. // 根据星级显示星星
  27. if (showCount >= i)
  28. {
  29. star.SetActive(true);
  30. }
  31. else
  32. {
  33. star.SetActive(false);
  34. }
  35. i++;
  36. }
  37. SimpleLayout.Layout(stars, LayoutType.Horizontal);
  38. }
  39. private static void SetStarImg(int group, GameObject starObj)
  40. {
  41. MyImage image = starObj.GetComponent<MyImage>();
  42. // 执行对应的逻辑 (0)GradeIcon_Star_s_Yellow (1)GradeIcon_Star_s_Premium
  43. switch (group)
  44. {
  45. case 0: // n = 1~5
  46. image.icon_name = "dec_star";
  47. break;
  48. case 1: // n = 6~10
  49. image.icon_name = "dec_star_2";
  50. break;
  51. default: // 其他情况
  52. LogTool.Error("超出设计表现");
  53. //image.icon_name = "dec_star";
  54. break;
  55. }
  56. }
  57. /// <summary>
  58. /// 修改指定 GameObject 和其所有子对象的 Layer
  59. /// </summary>
  60. /// <param name="obj">目标 GameObject</param>
  61. /// <param name="newLayer">新的 Layer 值</param>
  62. public static void ChangeLayerRecursively(GameObject obj, int newLayer)
  63. {
  64. if (obj == null || obj.layer == newLayer) return;
  65. // 修改当前对象的 Layer
  66. obj.layer = newLayer;
  67. // 遍历所有子对象,递归修改
  68. foreach (Transform child in obj.transform)
  69. {
  70. ChangeLayerRecursively(child.gameObject, newLayer);
  71. }
  72. }
  73. }
  74. }