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 InitData() { MeshRenderer tmpSelfMeshRender = transform.GetComponent(); if (tmpSelfMeshRender != null) m_DicOldMeshRender.Add(tmpSelfMeshRender, tmpSelfMeshRender.material); for (int i = 0; i < transform.childCount; i++) { if (transform.GetChild(i).GetComponent() != null) m_ChildPartMarks.Add(transform.GetChild(i).GetComponent()); } GetAllChildMeshRender(transform); } /// /// 添加碰撞体 /// public void AddMeshColliders() { MeshRenderer[] meshRenderers = GetComponentsInChildren(); foreach (var item in meshRenderers) { if (item.GetComponent() == null) { item.gameObject.AddComponent(); } } } /// /// 设置状态 /// /// public void SetState(bool state) { SetInitState(); //如果是点击半透模式 if (DeviceController.instance.m_ShowState == ShowState.Tran) { Material tmpTransMaterial = Resources.Load("Trans"); foreach (var item in m_DicOldMeshRender) { if (state) { item.Key.material = item.Value; } else { item.Key.material = tmpTransMaterial; if (item.Key.GetComponent()) item.Key.GetComponent().enabled = false; } } } else //点击隐藏模式 { this.gameObject.SetActive(state); } m_CurrentState = state; } /// /// 获取子级不携带PartMark标签的子级材质球 /// /// private void GetAllChildMeshRender(Transform target) { for (int i = 0; i < target.childCount; i++) { if (target.GetChild(i).GetComponent() == null) { MeshRenderer tmpMeshRender = target.GetChild(i).GetComponent(); if (tmpMeshRender != null) { m_DicOldMeshRender.Add(tmpMeshRender, tmpMeshRender.material); } else { GetAllChildMeshRender(target.GetChild(i)); } } } } /// /// 切换到正常状态 /// 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(Transform target) { List tmpMeshRenders = new List(); if (m_CurrentState) { if (target.GetComponent() != null) tmpMeshRenders.Add(target.GetComponent()); for (int i = 0; i < target.childCount; i++) { Transform tmpChild = target.GetChild(i); if (tmpChild.GetComponent() == null) { if (tmpChild.GetComponent()) { tmpMeshRenders.Add(tmpChild.GetComponent()); }else { tmpMeshRenders.AddRange(GetMeshRender(tmpChild)); } } } } return tmpMeshRenders; } }