using System.Collections; using System.Collections.Generic; using UnityEngine; using QFramework; using Sirenix.OdinInspector; public class DeviceController : MonoBehaviour { public static DeviceController instance; public string DeviceName; public Stack m_OperationPartMarkStruct = new Stack(); [HideInInspector] public ShowState m_ShowState; private void Awake() { instance = this; ResKit.Init(); UIKit.OpenPanel(); } private void Start() { DeviceOfPartDataProxy deviceOfPartDataProxy = DAL.Instance.Get(); deviceOfPartDataProxy.ReadStepMsgInfoFromTable(DeviceName); PartInfo tmpPartInfo = GetDevicePartInfos(transform.GetComponent()); UIKit.OpenPanel(new PartListPanelData() { m_PartInfo = tmpPartInfo }); } private void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { PartMark partMark = GetParentPartMarkWithPartMark(hit.collider.transform); // 处理射线击中的对象 if (partMark != null) { UIKit.OpenPanel(UILevel.PopUI, new PartLabelPanelData() { partName = partMark.name }); } } else { UIKit.HidePanel(); } if (Input.GetMouseButtonDown(0)) { Ray ray1 = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit1; if (Physics.Raycast(ray1, out hit1)) { PartMark tmpMark = GetParentPartMarkWithPartMark(hit.collider.transform); if (tmpMark != null) { tmpMark.SetState(false); m_OperationPartMarkStruct.Push(tmpMark); UIKit.GetPanel().SetPartItemState(tmpMark, false); CameraSurround.instance.SetCameraPosition(true); } } } } /// /// 查找携带PartMark的节点 /// /// /// private PartMark GetParentPartMarkWithPartMark(Transform traget) { PartMark tmpMark = traget.GetComponent(); if (tmpMark == null && traget.parent != null) { tmpMark = GetParentPartMarkWithPartMark(traget.parent); } return tmpMark; } public PartInfo GetDevicePartInfos(PartMark partMark) { //最父级 PartInfo partInfo = new PartInfo(partMark.transform.name, partMark); //字级 foreach (var item in partMark.m_ChildPartMarks) { partInfo.childPartInfos.Add(GetDevicePartInfos(item)); } return partInfo; } [Button("为所有节点添加标记")] private void AddPartMark() { Transform[] tmpTransforms = GetComponentsInChildren(); foreach (var item in tmpTransforms) { if (item.GetComponents() == null) { item.gameObject.AddComponent(); } } } }