using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; using ZXK.Framework; /******************************************************************************* *Create By CG *Function 设备认知场景控制 *******************************************************************************/ namespace ZXK.BYSS { public class CognizeCtrl : MonoBehaviour { //拆分-当前展示的模型 //需要被拆卸物体中二级菜单为拆卸的零部件 private GameObject _curShowModel = null; //点击拆卸时存储合成对应位置 private Dictionary _partOrgPosDic = new Dictionary(); private void Awake() { EventCenterManager.Instance.AddEventListener(EventEnum.ClickEquipment, ClickEquipmentCall); EventCenterManager.Instance.AddEventListener(EventEnum.SplitEquipment, SplitEquipmentCall); EventCenterManager.Instance.AddEventListener(EventEnum.CombineEquipment, CombineEquipmentCall); } /// /// 点击切换后显示某个模型 /// /// /// private void ClickEquipmentCall(object sender, System.EventArgs e) { _partOrgPosDic = new Dictionary(); foreach (Transform item in transform) { Destroy(item.gameObject); } //显示某个模型 ClickEquipmentArgs data = e as ClickEquipmentArgs; GameObject modelItemPrefab = data.info._ModelPrefab; _curShowModel = Instantiate(modelItemPrefab, transform); _curShowModel.name = modelItemPrefab.name; //显示模型介绍信息 UI_Manage.Instance.GetPanel("CognizePanel").GetComponent().ShowEquipment(data.info._ModelExplain, data.info._ModelName); var cameraData = _curShowModel.transform.GetComponent(); Camera.main.transform.GetComponent().SetData(cameraData.x,cameraData.y,cameraData.zoom); } private void SplitEquipmentCall(object sender, System.EventArgs e) { ////储存拆分后位置信息 string nameTmp = _curShowModel.transform.name.Replace("Prefab", ""); if (_partOrgPosDic.Count == 0) {//存储合成时需要的位置 foreach (Transform partTran in _curShowModel.transform.Find(nameTmp)) { _partOrgPosDic.Add(partTran, partTran.position); } } //对接拆分位置 foreach (Transform partTran in _curShowModel.transform.Find(nameTmp + "Open")) { foreach (Transform item in _partOrgPosDic.Keys) { if (item.name.Equals(partTran.name)) { item.position = partTran.position; break; } } } } private void CombineEquipmentCall(object sender, System.EventArgs e) { if (_partOrgPosDic.Count == 0) return; foreach (var item in _partOrgPosDic) { item.Key.position = item.Value; } } private void OnDestroy() { EventCenterManager.Instance.RemoveListener(EventEnum.ClickEquipment, ClickEquipmentCall); EventCenterManager.Instance.RemoveListener(EventEnum.SplitEquipment, SplitEquipmentCall); EventCenterManager.Instance.RemoveListener(EventEnum.CombineEquipment, CombineEquipmentCall); } } }