HighlightComponent.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using EPOOutline;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using WS;
  5. [ObjectSystem]
  6. public class HighlightComponentAwakSystem : AwakeSystem<HighlightComponent>
  7. {
  8. public override void Awake(HighlightComponent self)
  9. {
  10. self.Awake();
  11. }
  12. }
  13. ///<summary>高亮管理组件</summary>
  14. public class HighlightComponent : SingleComponent<HighlightComponent>
  15. {
  16. ///<summary>高亮数据</summary>
  17. private class HighlightData
  18. {
  19. ///<summary>高亮组件</summary>
  20. public Outlinable outlinable;
  21. ///<summary></summary>
  22. public bool IsOften;
  23. }
  24. ///<summary>所有高亮物体</summary>
  25. private Dictionary<GameObject, HighlightData> AllHighlight = new Dictionary<GameObject, HighlightData>();
  26. ///<summary>默认颜色</summary>
  27. private Color DefaultColor;
  28. public void Awake()
  29. {
  30. DefaultColor = new Color(1, 1, 0, 1);
  31. }
  32. ///<summary>开启高亮</summary>
  33. public void OpenHighlight(GameObject obj)
  34. {
  35. OpenHighlight(obj, DefaultColor);
  36. }
  37. ///<summary>开启高亮</summary>
  38. public void OpenHighlight(GameObject obj, Color color)
  39. {
  40. Add(obj, color);
  41. }
  42. ///<summary>关闭高亮</summary>
  43. public void CloseHighlight(GameObject obj)
  44. {
  45. Remove(obj);
  46. }
  47. /////<summary>开启常亮高亮</summary>
  48. //public void OpenOftenHighlight(GameObject obj)
  49. //{
  50. // OpenOftenHighlight(obj, DefaultColor);
  51. //}
  52. ///<summary>开启常亮高亮</summary>
  53. public void OpenOftenHighlight(GameObject obj, Color color)
  54. {
  55. Add(obj, color, true);
  56. }
  57. ///<summary>关闭常亮高亮</summary>
  58. public void CloseOftenHighlight(GameObject obj)
  59. {
  60. Remove(obj, true);
  61. }
  62. ///<summary>开启高亮</summary>
  63. private void Add(GameObject obj, Color color, bool isoften = false)
  64. {
  65. if (!AllHighlight.ContainsKey(obj))
  66. {
  67. Outlinable outlinable = obj.AddComponent<Outlinable>();
  68. outlinable.FrontParameters.Color = color;
  69. outlinable.AddAllChildRenderersToRenderingList(RenderersAddingMode.SkinnedMeshRenderer | RenderersAddingMode.MeshRenderer | RenderersAddingMode.SpriteRenderer);
  70. AllHighlight.Add(obj, new HighlightData { outlinable = outlinable, IsOften = isoften });
  71. }
  72. AllHighlight[obj].outlinable.FrontParameters.Color = color;
  73. }
  74. ///<summary>移除</summary>
  75. private void Remove(GameObject obj, bool isoften = false)
  76. {
  77. if (AllHighlight.ContainsKey(obj))
  78. {
  79. HighlightData data = AllHighlight[obj];
  80. if (!isoften && data.IsOften)
  81. {
  82. return;
  83. }
  84. AllHighlight.Remove(obj);
  85. UnityEngine.Object.Destroy(data.outlinable);
  86. }
  87. }
  88. public void OpenOftenHighlight(GameObject obj)
  89. {
  90. }
  91. public void SetOperateObjLayer(Transform transform, int layer)
  92. {
  93. transform.gameObject.layer = layer;
  94. foreach (Transform child in transform)
  95. {
  96. SetOperateObjLayer(child, layer);
  97. }
  98. }
  99. }