PartMark.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using QFramework;
  5. using HighlightingSystem;
  6. using Sirenix.OdinInspector;
  7. public enum ShowState
  8. {
  9. Hide,
  10. Tran
  11. }
  12. public class PartMark : MonoBehaviour
  13. {
  14. public List<PartMark> m_ChildPartMarks;
  15. public Dictionary<MeshRenderer, Material> m_DicOldMeshRender;
  16. /// <summary>
  17. /// 目前状态
  18. /// </summary>
  19. private bool m_CurrentState;
  20. private void Awake()
  21. {
  22. m_ChildPartMarks = new List<PartMark>();
  23. m_DicOldMeshRender = new Dictionary<MeshRenderer, Material>();
  24. InitData();
  25. AddMeshColliders();
  26. }
  27. public void AddMeshColliders()
  28. {
  29. MeshRenderer[] meshRenderers = GetComponentsInChildren<MeshRenderer>();
  30. foreach (var item in meshRenderers)
  31. {
  32. if (item.GetComponent<MeshCollider>() == null)
  33. {
  34. item.gameObject.AddComponent<MeshCollider>();
  35. }
  36. }
  37. }
  38. public void SetState(bool state)
  39. {
  40. PartListPanel tmpPartListPanel = UIKit.GetPanel<PartListPanel>();
  41. SetInitState();
  42. if (tmpPartListPanel.m_ShowState == ShowState.Tran)
  43. {
  44. this.gameObject.SetActive(true);
  45. if (!state)
  46. {
  47. Material tmpMaterial = Resources.Load<Material>("Trans");
  48. foreach (var item in m_DicOldMeshRender)
  49. {
  50. item.Key.material = tmpMaterial;
  51. if (item.Key.GetComponent<MeshCollider>())
  52. {
  53. item.Key.GetComponent<MeshCollider>().enabled = false;
  54. }
  55. }
  56. }
  57. else
  58. {
  59. foreach (var item in m_DicOldMeshRender)
  60. {
  61. item.Key.material = item.Value;
  62. }
  63. }
  64. }
  65. else
  66. {
  67. this.gameObject.SetActive(state);
  68. }
  69. m_CurrentState = state;
  70. }
  71. public void RefreshState()
  72. {
  73. SetInitState();
  74. if (!m_CurrentState)
  75. {
  76. PartListPanel tmpPartListPanel = UIKit.GetPanel<PartListPanel>();
  77. if (tmpPartListPanel.CheckDropdown.captionText.text == "部件半透")
  78. {
  79. Material tmpMaterial = Resources.Load<Material>("Trans");
  80. foreach (var item in m_DicOldMeshRender)
  81. {
  82. item.Key.material = tmpMaterial;
  83. if (item.Key.GetComponent<MeshCollider>())
  84. {
  85. item.Key.GetComponent<MeshCollider>().enabled = false;
  86. }
  87. }
  88. }
  89. else
  90. {
  91. this.gameObject.SetActive(false);
  92. }
  93. }
  94. }
  95. public void InitData()
  96. {
  97. MeshRenderer tmpSelfMeshRender = transform.GetComponent<MeshRenderer>();
  98. if (tmpSelfMeshRender != null) m_DicOldMeshRender.Add(tmpSelfMeshRender, tmpSelfMeshRender.material);
  99. for (int i = 0; i < transform.childCount; i++)
  100. {
  101. Transform tmpChild = transform.GetChild(i);
  102. if (tmpChild.GetComponent<PartMark>() != null)
  103. {
  104. m_ChildPartMarks.Add(tmpChild.GetComponent<PartMark>());
  105. }
  106. else
  107. {
  108. MeshRenderer tmpMeshRender = tmpChild.GetComponent<MeshRenderer>();
  109. if (tmpMeshRender != null) m_DicOldMeshRender.Add(tmpMeshRender, tmpMeshRender.material);
  110. }
  111. }
  112. }
  113. public void SetInitState()
  114. {
  115. foreach (var item in m_DicOldMeshRender)
  116. {
  117. item.Key.material = item.Value;
  118. if (item.Key.GetComponent<MeshCollider>())
  119. {
  120. item.Key.GetComponent<MeshCollider>().enabled = true;
  121. }
  122. }
  123. this.gameObject.SetActive(true);
  124. }
  125. public List<MeshRenderer> GetMeshRender()
  126. {
  127. List<MeshRenderer> tmpMeshRenders = new List<MeshRenderer>();
  128. if (m_CurrentState)
  129. {
  130. if (transform.GetComponent<MeshRenderer>() != null) tmpMeshRenders.Add(transform.GetComponent<MeshRenderer>());
  131. for (int i = 0; i < transform.childCount; i++)
  132. {
  133. Transform tmpChild = transform.GetChild(i);
  134. if (tmpChild.GetComponent<PartMark>() == null && tmpChild.GetComponent<MeshRenderer>() != null)
  135. {
  136. tmpMeshRenders.Add(tmpChild.GetComponent<MeshRenderer>());
  137. }
  138. }
  139. }
  140. return tmpMeshRenders;
  141. }
  142. }