Răsfoiți Sursa

【+】
1.内部结构模块添加撤销和一键撤销所有功能
2.添加点击隐藏相机重新聚焦功能

lxd 5 luni în urmă
părinte
comite
80e4a13455

Fișier diff suprimat deoarece este prea mare
+ 165 - 688
ModeDisplay/Assets/GameAssets/06.UIPrefabs/PartListPanel.prefab


+ 13 - 5
ModeDisplay/Assets/Scripts/DeviceController.cs

@@ -10,6 +10,11 @@ public class DeviceController : MonoBehaviour
 
     public string DeviceName;
 
+    public Stack<PartMark> m_OperationPartMarkStruct = new Stack<PartMark>();
+
+    [HideInInspector]
+    public ShowState m_ShowState;
+
     private void Awake()
     {
         instance = this;
@@ -26,7 +31,7 @@ public class DeviceController : MonoBehaviour
 
         PartInfo tmpPartInfo = GetDevicePartInfos(transform.GetComponent<PartMark>());
 
-        UIKit.OpenPanel<PartListPanel>(new PartListPanelData() { m_PartInfo = tmpPartInfo});
+        UIKit.OpenPanel<PartListPanel>(new PartListPanelData() { m_PartInfo = tmpPartInfo });
 
     }
 
@@ -34,6 +39,7 @@ public class DeviceController : MonoBehaviour
     {
         Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
         RaycastHit hit;
+
         if (Physics.Raycast(ray, out hit))
         {
             PartMark partMark = GetParentPartMarkWithPartMark(hit.collider.transform);
@@ -60,7 +66,9 @@ public class DeviceController : MonoBehaviour
                 if (tmpMark != null)
                 {
                     tmpMark.SetState(false);
-                    UIKit.GetPanel<PartListPanel>().SetPartItemState(tmpMark);
+                    m_OperationPartMarkStruct.Push(tmpMark);
+                    UIKit.GetPanel<PartListPanel>().SetPartItemState(tmpMark, false);
+                    CameraSurround.instance.SetCameraPosition(true);
                 }
             }
         }
@@ -86,8 +94,8 @@ public class DeviceController : MonoBehaviour
     public PartInfo GetDevicePartInfos(PartMark partMark)
     {
         //最父级
-        PartInfo partInfo = new PartInfo(partMark.transform.name,partMark);
- 
+        PartInfo partInfo = new PartInfo(partMark.transform.name, partMark);
+
         //字级
         foreach (var item in partMark.m_ChildPartMarks)
         {
@@ -100,7 +108,7 @@ public class DeviceController : MonoBehaviour
     [Button("为所有节点添加标记")]
     private void AddPartMark()
     {
-      Transform[] tmpTransforms = GetComponentsInChildren<Transform>();
+        Transform[] tmpTransforms = GetComponentsInChildren<Transform>();
 
         foreach (var item in tmpTransforms)
         {

+ 3 - 13
ModeDisplay/Assets/Scripts/MoveItem/MoveItemManager.cs

@@ -30,9 +30,6 @@ public class MoveItemManager : MonoBehaviour
     [TabGroup("UI相关")]
     [LabelText("播放按钮")]
     public Button m_PlayButton;
-    [TabGroup("UI相关")]
-    [LabelText("关闭按钮")]
-    public Button m_CloseButton;
 
     private void Awake()
     {
@@ -43,8 +40,6 @@ public class MoveItemManager : MonoBehaviour
     {
         m_PlayButton?.onClick.AddListener(OnPlayButtonClick);
 
-        m_CloseButton?.onClick.AddListener(OnCloseBtnClick);
-
         PlayMoveItemByIndex(0);
 
         UIKit.OpenPanel<PrinciplePanel>(new PrinciplePanelData() { TitleName = deviceName});
@@ -281,16 +276,11 @@ public class MoveItemManager : MonoBehaviour
         } 
     }
 
-    private void OnCloseBtnClick()
-    {
-        Application.Quit();
-    }
-
     /// <summary>
     /// 导出部件数据
     /// </summary>
     [TabGroup("工具相关")]
-    [Button("导出所有部件名称到表格")]
+    [Button("1.导出所有部件名称到表格(先去根据表格配音)")]
     private void ExportPartData()
     {
         List<MoveData> partMarkNames = new List<MoveData>();
@@ -315,10 +305,10 @@ public class MoveItemManager : MonoBehaviour
     }
 
     /// <summary>
-    /// 重命名音频名称
+    /// 重命名音频名称,只能重命名数字的文件
     /// </summary>
     [TabGroup("工具相关")]
-    [Button("重命名音频名称")]
+    [Button("2.重命名音频名称(初始配音名字为数字)")]
     private void ReNameAudioClipName()
     {
         //表格路径

+ 59 - 65
ModeDisplay/Assets/Scripts/PartMark.cs

@@ -6,7 +6,13 @@ using HighlightingSystem;
 using Sirenix.OdinInspector;
 public enum ShowState
 {
+    /// <summary>
+    /// 隐藏
+    /// </summary>
     Hide,
+    /// <summary>
+    /// 透明
+    /// </summary>
     Tran
 }
 
@@ -17,9 +23,6 @@ public class PartMark : MonoBehaviour
 
     public Dictionary<MeshRenderer, Material> m_DicOldMeshRender;
 
-    /// <summary>
-    /// 目前状态
-    /// </summary>
     private bool m_CurrentState;
 
     private void Awake()
@@ -32,6 +35,26 @@ public class PartMark : MonoBehaviour
         AddMeshColliders();
     }
 
+    /// <summary>
+    /// 初始化
+    /// </summary>
+    public void InitData()
+    {
+        MeshRenderer tmpSelfMeshRender = transform.GetComponent<MeshRenderer>();
+
+        if (tmpSelfMeshRender != null) m_DicOldMeshRender.Add(tmpSelfMeshRender, tmpSelfMeshRender.material);
+
+        for (int i = 0; i < transform.childCount; i++)
+        {
+            if (transform.GetChild(i).GetComponent<PartMark>() != null) m_ChildPartMarks.Add(transform.GetChild(i).GetComponent<PartMark>());
+        }
+
+        GetAllChildMeshRender(transform);
+    }
+
+    /// <summary>
+    /// 添加碰撞体
+    /// </summary>
     public void AddMeshColliders()
     {
         MeshRenderer[] meshRenderers = GetComponentsInChildren<MeshRenderer>();
@@ -45,35 +68,31 @@ public class PartMark : MonoBehaviour
         }
     }
 
+    /// <summary>
+    /// 设置状态
+    /// </summary>
+    /// <param name="state"></param>
     public void SetState(bool state)
     {
-        PartListPanel tmpPartListPanel = UIKit.GetPanel<PartListPanel>();
         SetInitState();
 
-        if (tmpPartListPanel.m_ShowState == ShowState.Tran)
+        if (DeviceController.instance.m_ShowState == ShowState.Tran)
         {
+            Material tmpTransMaterial = Resources.Load<Material>("Trans");
+
             this.gameObject.SetActive(true);
 
-            if (!state)
+            foreach (var item in m_DicOldMeshRender)
             {
-                Material tmpMaterial = Resources.Load<Material>("Trans");
-
-                foreach (var item in m_DicOldMeshRender)
+                if (state)
                 {
-                    item.Key.material = tmpMaterial;
-
-                    if (item.Key.GetComponent<MeshCollider>())
-                    {
-                        item.Key.GetComponent<MeshCollider>().enabled = false;
-                    }
-
+                    item.Key.material = item.Value;
                 }
-            }
-            else
-            {
-                foreach (var item in m_DicOldMeshRender)
+                else
                 {
-                    item.Key.material = item.Value;
+                    item.Key.material = tmpTransMaterial;
+
+                    if (item.Key.GetComponent<MeshCollider>()) item.Key.GetComponent<MeshCollider>().enabled = false;
                 }
             }
         }
@@ -85,66 +104,41 @@ public class PartMark : MonoBehaviour
         m_CurrentState = state;
     }
 
-    public void RefreshState()
+    /// <summary>
+    /// 获取子级不携带PartMark标签的子级材质球
+    /// </summary>
+    /// <param name="target"></param>
+    private void GetAllChildMeshRender(Transform target)
     {
-        SetInitState();
-
-        if (!m_CurrentState)
+        for (int i = 0; i < target.childCount; i++)
         {
-            PartListPanel tmpPartListPanel = UIKit.GetPanel<PartListPanel>();
-
-            if (tmpPartListPanel.CheckDropdown.captionText.text == "部件半透")
+            if (target.GetChild(i).GetComponent<PartMark>() == null)
             {
-                Material tmpMaterial = Resources.Load<Material>("Trans");
+                MeshRenderer tmpMeshRender = target.GetChild(i).GetComponent<MeshRenderer>();
 
-                foreach (var item in m_DicOldMeshRender)
+                if (tmpMeshRender != null)
                 {
-                    item.Key.material = tmpMaterial;
-                    if (item.Key.GetComponent<MeshCollider>())
-                    {
-                        item.Key.GetComponent<MeshCollider>().enabled = false;
-                    }
+                    m_DicOldMeshRender.Add(tmpMeshRender, tmpMeshRender.material);
+                }
+                else
+                {
+                    GetAllChildMeshRender(target.GetChild(i));
                 }
-            }
-            else
-            {
-                this.gameObject.SetActive(false);
             }
         }
     }
 
-    public void InitData()
-    {
-        MeshRenderer tmpSelfMeshRender = transform.GetComponent<MeshRenderer>();
-
-        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<PartMark>() != null)
-            {
-                m_ChildPartMarks.Add(tmpChild.GetComponent<PartMark>());
-            }
-            else
-            {
-                MeshRenderer tmpMeshRender = tmpChild.GetComponent<MeshRenderer>();
-
-                if (tmpMeshRender != null) m_DicOldMeshRender.Add(tmpMeshRender, tmpMeshRender.material);
-            }
-        }
-    }
 
+    /// <summary>
+    /// 切换到正常状态
+    /// </summary>
     public void SetInitState()
     {
         foreach (var item in m_DicOldMeshRender)
         {
             item.Key.material = item.Value;
-            if (item.Key.GetComponent<MeshCollider>())
-            {
-                item.Key.GetComponent<MeshCollider>().enabled = true;
-            }
+
+            if (item.Key.GetComponent<MeshCollider>()) item.Key.GetComponent<MeshCollider>().enabled = true;
         }
 
         this.gameObject.SetActive(true);

+ 10 - 1
ModeDisplay/Assets/Scripts/UI/QFramework/PartListPanel.Designer.cs

@@ -5,7 +5,7 @@ using QFramework;
 
 namespace QFramework
 {
-	// Generate Id:8bbb3e8b-e347-461e-ae9a-f989ef1ded4d
+	// Generate Id:038dfe49-6ac2-4032-993c-938c54f8e010
 	public partial class PartListPanel
 	{
 		public const string Name = "PartListPanel";
@@ -55,6 +55,8 @@ namespace QFramework
 		[SerializeField]
 		public UnityEngine.UI.Button ExpandBtn;
 		[SerializeField]
+		public UnityEngine.UI.Text Title_TopLayer;
+		[SerializeField]
 		public UnityEngine.UI.Image HeadPortraitBg;
 		[SerializeField]
 		public UnityEngine.UI.Text HeadPortraitText;
@@ -66,6 +68,10 @@ namespace QFramework
 		public UnityEngine.UI.Button HidetBtn;
 		[SerializeField]
 		public UnityEngine.UI.Button TransflectiveBtn;
+		[SerializeField]
+		public UnityEngine.UI.Button RevokeBtn;
+		[SerializeField]
+		public UnityEngine.UI.Button RevokeAllBtn;
 		
 		private PartListPanelData mPrivateData = null;
 		
@@ -93,12 +99,15 @@ namespace QFramework
 			Content = null;
 			CheckDropdown = null;
 			ExpandBtn = null;
+			Title_TopLayer = null;
 			HeadPortraitBg = null;
 			HeadPortraitText = null;
 			UserName = null;
 			ScheduleText = null;
 			HidetBtn = null;
 			TransflectiveBtn = null;
+			RevokeBtn = null;
+			RevokeAllBtn = null;
 			
 			mData = null;
 		}

+ 105 - 99
ModeDisplay/Assets/Scripts/UI/QFramework/PartListPanel.cs

@@ -2,147 +2,153 @@ using UnityEngine;
 using UnityEngine.UI;
 using QFramework;
 using DG.Tweening;
+using System.Collections.Generic;
 
 namespace QFramework
 {
-	public class PartListPanelData : UIPanelData
-	{
-		public PartInfo m_PartInfo;
+    public class PartListPanelData : UIPanelData
+    {
+        public PartInfo m_PartInfo;
 
-	}
-	public partial class PartListPanel : UIPanel
-	{
-		bool m_Expand = false;
+    }
+    public partial class PartListPanel : UIPanel
+    {
+        bool m_Expand = false;
 
-		public ShowState m_ShowState;
+        protected override void OnInit(IUIData uiData = null)
+        {
+            mData = uiData as PartListPanelData ?? new PartListPanelData();
+
+            ExpandBtn.onClick.AddListener(OnExpandBtnClick);
 
-		protected override void ProcessMsg(int eventId, QMsg msg)
-		{
-			throw new System.NotImplementedException();
-		}
-		
-		protected override void OnInit(IUIData uiData = null)
-		{
-			mData = uiData as PartListPanelData ?? new PartListPanelData();
+            OperationTitle.text = DeviceController.instance.DeviceName;
 
-			ExpandBtn.onClick.AddListener(OnExpandBtnClick);
+            CloseBtn.onClick.AddListener(() => Application.Quit());
 
-			OperationTitle.text = DeviceController.instance.DeviceName;
+            HidetBtn.onClick.AddListener(OnHideBtnClick);
 
-			CloseBtn.onClick.AddListener(() => Application.Quit());
+            TransflectiveBtn.onClick.AddListener(OnTransflectiveBtnClick);
 
-			HidetBtn.onClick.AddListener(OnHideBtnClick);
+            RevokeBtn.onClick.AddListener(OnRevokeBtnClick);
 
-			TransflectiveBtn.onClick.AddListener(OnTransflectiveBtnClick);
+            RevokeAllBtn.onClick.AddListener(OnRevokeAllBtnClick);
 
-			OnHideBtnClick();
-		}
-		
-		protected override void OnOpen(IUIData uiData = null)
-		{
-			mData = uiData as PartListPanelData ?? new PartListPanelData();
+            OnHideBtnClick();
+        }
+
+        protected override void OnOpen(IUIData uiData = null)
+        {
+            mData = uiData as PartListPanelData ?? new PartListPanelData();
 
-			CheckDropdown.onValueChanged.AddListener(OnCheckDropDownValueChange);
+            GameObject tmpObj = Instantiate(PartItem.gameObject, Content);
+            tmpObj.gameObject.SetActive(true);
 
-		    GameObject tmpObj = Instantiate(PartItem.gameObject, Content);
-			tmpObj.gameObject.SetActive(true);
+            PartItem tmpPartItem = tmpObj.GetComponent<PartItem>();
 
-			PartItem tmpPartItem = tmpObj.GetComponent<PartItem>();
+            tmpPartItem.InitData(mData.m_PartInfo);
 
-			tmpPartItem.InitData(mData.m_PartInfo);
+            tmpPartItem.OnSelectToggleChange(true, true);
+            tmpPartItem.ExpandChildPartItem();
+
+            CameraSurround.instance.SetCameraPosition(true);
+        }
+
+        protected override void OnShow()
+        {
+        }
 
-			tmpPartItem.OnSelectToggleChange(true, true);
-			tmpPartItem.ExpandChildPartItem();
+        protected override void OnHide()
+        {
+        }
 
-			CameraSurround.instance.SetCameraPosition(true);
-		}
-		
-		protected override void OnShow()
-		{
-		}
-		
-		protected override void OnHide()
-		{
-		}
-		
-		protected override void OnClose()
-		{
-		}
+        protected override void OnClose()
+        {
+        }
 
-		public void SetPartItemState(PartMark partMark)
+        public void SetPartItemState(PartMark partMark, bool state)
         {
-			PartItem[] tmpPartItems = transform.GetComponentsInChildren<PartItem>(true);
+            PartItem[] tmpPartItems = transform.GetComponentsInChildren<PartItem>(true);
 
             foreach (var item in tmpPartItems)
             {
                 if (item.m_PartMark == partMark)
                 {
-					item.SelectBtn.gameObject.SetActive(true);
-					item.UnSelectBtn.gameObject.SetActive(false);
-					break;
+                    item.OnSelectToggleChange(state);
+                    break;
                 }
             }
         }
 
-		public void OnCheckDropDownValueChange(int value)
-        {
-			PartItem[] tmpPartItems = transform.GetComponentsInChildren<PartItem>(false);
-
-			foreach (var item in tmpPartItems)
-			{
-				Debug.LogError(item.name + item.m_PartMark == null);
-				item.m_PartMark.RefreshState();
-			}
-		}
-
-		/// <summary>
-		/// 展开按钮点击
-		/// </summary>
-		public void OnExpandBtnClick()
+
+        /// <summary>
+        /// 展开按钮点击
+        /// </summary>
+        public void OnExpandBtnClick()
         {
-			m_Expand = !m_Expand;
+            m_Expand = !m_Expand;
 
             if (m_Expand)
             {
-				Panel.transform.DOMove(UnExpandTarget.transform.position,0.5f);
-            }else
+                Panel.transform.DOMove(UnExpandTarget.transform.position, 0.5f);
+            }
+            else
             {
-				Panel.transform.DOMove(ExpandTarget.transform.position, 0.5f);
-			}
-
-		}
+                Panel.transform.DOMove(ExpandTarget.transform.position, 0.5f);
+            }
+        }
 
-		private void OnHideBtnClick()
+        private void OnHideBtnClick()
         {
-			HidetBtn.GetComponent<DownBGButton>().SetBtnState(BtnState.select);
-			TransflectiveBtn.GetComponent<DownBGButton>().SetBtnState(BtnState.normal);
+            HidetBtn.GetComponent<DownBGButton>().SetBtnState(BtnState.select);
+            TransflectiveBtn.GetComponent<DownBGButton>().SetBtnState(BtnState.normal);
 
-			m_ShowState = ShowState.Hide;
+            DeviceController.instance.m_ShowState = ShowState.Hide;
+        }
 
-			PartItem[] tmpPartItems = transform.GetComponentsInChildren<PartItem>(false);
+        private void OnTransflectiveBtnClick()
+        {
+            HidetBtn.GetComponent<DownBGButton>().SetBtnState(BtnState.normal);
+            TransflectiveBtn.GetComponent<DownBGButton>().SetBtnState(BtnState.select);
 
-			foreach (var item in tmpPartItems)
-			{
-				Debug.LogError(item.name + item.m_PartMark == null);
-				item.m_PartMark.RefreshState();
-			}
-		}
+            DeviceController.instance.m_ShowState = ShowState.Tran;
+        }
 
-		private void OnTransflectiveBtnClick()
-		{
-			HidetBtn.GetComponent<DownBGButton>().SetBtnState(BtnState.normal);
-			TransflectiveBtn.GetComponent<DownBGButton>().SetBtnState(BtnState.select);
+        /// <summary>
+        /// 撤销按钮点击
+        /// </summary>
+        private void OnRevokeBtnClick()
+        {
+            if (DeviceController.instance.m_OperationPartMarkStruct.Count != 0)
+            {
+                PartMark tmpPartMark = DeviceController.instance.m_OperationPartMarkStruct.Pop();
+
+                if (tmpPartMark != null)
+                {
+                    tmpPartMark.SetInitState();
+                    UIKit.GetPanel<PartListPanel>().SetPartItemState(tmpPartMark, true);
+                }
+            }
 
-			m_ShowState = ShowState.Tran;
+            CameraSurround.instance.SetCameraPosition(true);
+        }
 
-			PartItem[] tmpPartItems = transform.GetComponentsInChildren<PartItem>(false);
+        /// <summary>
+        /// 撤销所有按钮点击
+        /// </summary>
+        private void OnRevokeAllBtnClick()
+        {
+            while (DeviceController.instance.m_OperationPartMarkStruct.Count > 0)
+            {
+                PartMark tmpPartMark = DeviceController.instance.m_OperationPartMarkStruct.Pop();
 
-			foreach (var item in tmpPartItems)
-			{
-				Debug.LogError(item.name + item.m_PartMark == null);
-				item.m_PartMark.RefreshState();
-			}
+                if (tmpPartMark != null)
+                {
+                    tmpPartMark.SetInitState();
+                    UIKit.GetPanel<PartListPanel>().SetPartItemState(tmpPartMark, true);
+                }
+            }
 
-		}
-	}
+            CameraSurround.instance.SetCameraPosition(true);
+        }
+    }
 }

+ 27 - 20
ModeDisplay/Assets/Scripts/UI/QFramework/PartListPanel/PartItem.cs

@@ -93,6 +93,7 @@ namespace QFramework
         public void InitData(PartInfo partInfo,int level = 0, PartItem ParentPartItem = null)
         {
             m_ParentPartItem = ParentPartItem;
+
             Text.text = partInfo.partName;
             m_Level = level;
             m_PartMark = partInfo.partMark;
@@ -150,16 +151,6 @@ namespace QFramework
             SelectBtn.gameObject.SetActive(!select);
             UnSelectBtn.gameObject.SetActive(select);
 
-            if (select)
-            {
-                //选中父级
-                SelectParentToggle(this.m_ParentPartItem);
-            }
-            else
-            {
-                SetParentUnSelectState(m_ParentPartItem);
-            }
-
             //打开子级
             if (selectAll)
             {
@@ -170,16 +161,32 @@ namespace QFramework
             }
 
             m_PartMark.SetState(select);
+
+            if (select)
+            {
+                //选中父级
+                SelectParentToggle();
+            }
+            else
+            {
+                Debug.Log("关闭父级");
+                SetParentUnSelectState();
+            }
+
+            if (!select)
+            {
+                DeviceController.instance.m_OperationPartMarkStruct.Push(m_PartMark);
+            }
         }
 
         /// <summary>
         /// 选中父级
         /// </summary>
-        public void SelectParentToggle(PartItem parentPartItem)
+        public void SelectParentToggle()
         {
-            if (parentPartItem != null)
+            if (m_ParentPartItem != null)
             {
-                parentPartItem.OnSelectToggleChange(true);
+                m_ParentPartItem.OnSelectToggleChange(true);
             }
         }
 
@@ -187,11 +194,12 @@ namespace QFramework
         /// 如果父级下没有选中,那么将父级改为未选中状态
         /// </summary>
         /// <param name="parentPartItem"></param>
-        public void SetParentUnSelectState(PartItem parentPartItem)
+        public void SetParentUnSelectState()
         {
-            if (parentPartItem != null && parentPartItem.ChildPartItemIsSelect(parentPartItem))
+            if (m_ParentPartItem != null && m_ParentPartItem.ChildPartItemIsSelect())
             {
-                parentPartItem.OnSelectToggleChange(false);
+                Debug.LogError(m_ParentPartItem.name + "子级已经都关闭");
+                m_ParentPartItem.OnSelectToggleChange(false);
             }
         }
 
@@ -240,16 +248,15 @@ namespace QFramework
         /// 都未选中
         /// </summary>
         /// <returns></returns>
-        private bool ChildPartItemIsSelect(PartItem parentPartItem)
+        private bool ChildPartItemIsSelect()
         {
             bool result = true;
 
-            foreach (var item in parentPartItem.m_ChildPartItems)
+            foreach (var item in m_ChildPartItems)
             {
                 if (item.m_IsSelect)
                 {
-                    result = false;
-                    break;
+                    return false;
                 }
             }
 

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff