PartMark.cs 4.0 KB

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