using System.Collections; using System.Collections.Generic; using UnityEngine; using QFramework; using HighlightingSystem; using Sirenix.OdinInspector; public enum ShowState { Hide, Tran } public class PartMark : MonoBehaviour { public List m_ChildPartMarks; public Dictionary m_DicOldMeshRender; /// /// 目前状态 /// private bool m_CurrentState; private void Awake() { m_ChildPartMarks = new List(); m_DicOldMeshRender = new Dictionary(); InitData(); AddMeshColliders(); } public void AddMeshColliders() { MeshRenderer[] meshRenderers = GetComponentsInChildren(); foreach (var item in meshRenderers) { if (item.GetComponent() == null) { item.gameObject.AddComponent(); } } } public void SetState(bool state) { PartListPanel tmpPartListPanel = UIKit.GetPanel(); SetInitState(); if (tmpPartListPanel.m_ShowState == ShowState.Tran) { this.gameObject.SetActive(true); if (!state) { Material tmpMaterial = Resources.Load("Trans"); foreach (var item in m_DicOldMeshRender) { item.Key.material = tmpMaterial; if (item.Key.GetComponent()) { item.Key.GetComponent().enabled = false; } } } else { foreach (var item in m_DicOldMeshRender) { item.Key.material = item.Value; } } } else { this.gameObject.SetActive(state); } m_CurrentState = state; } public void RefreshState() { SetInitState(); if (!m_CurrentState) { PartListPanel tmpPartListPanel = UIKit.GetPanel(); if (tmpPartListPanel.CheckDropdown.captionText.text == "部件半透") { Material tmpMaterial = Resources.Load("Trans"); foreach (var item in m_DicOldMeshRender) { item.Key.material = tmpMaterial; if (item.Key.GetComponent()) { item.Key.GetComponent().enabled = false; } } } else { this.gameObject.SetActive(false); } } } public void InitData() { MeshRenderer tmpSelfMeshRender = transform.GetComponent(); if (tmpSelfMeshRender != null) m_DicOldMeshRender.Add(tmpSelfMeshRender, tmpSelfMeshRender.material); for (int i = 0; i < transform.childCount; i++) { Transform tmpChild = transform.GetChild(i); if (tmpChild.GetComponent() != null) { m_ChildPartMarks.Add(tmpChild.GetComponent()); } else { MeshRenderer tmpMeshRender = tmpChild.GetComponent(); if (tmpMeshRender != null) m_DicOldMeshRender.Add(tmpMeshRender, tmpMeshRender.material); } } } public void SetInitState() { foreach (var item in m_DicOldMeshRender) { item.Key.material = item.Value; if (item.Key.GetComponent()) { item.Key.GetComponent().enabled = true; } } this.gameObject.SetActive(true); } public List GetMeshRender() { List tmpMeshRenders = new List(); if (m_CurrentState) { if (transform.GetComponent() != null) tmpMeshRenders.Add(transform.GetComponent()); for (int i = 0; i < transform.childCount; i++) { Transform tmpChild = transform.GetChild(i); if (tmpChild.GetComponent() == null && tmpChild.GetComponent() != null) { tmpMeshRenders.Add(tmpChild.GetComponent()); } } } return tmpMeshRenders; } }