From 0eea99c8df2ef57e97f57805d84215d4a68069d2 Mon Sep 17 00:00:00 2001 From: shenjianxing <”315615051@qq.com“> Date: Tue, 18 Feb 2025 17:26:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=843D=E8=A7=A3=E5=89=96=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Art/UIPrefab/UIBody3DMenuTree.prefab | 172 ++++++++----------- Assets/Scripts/UI/UIBody3DMenuTree.cs | 178 ++++++++++++++++---- Data/Xml/Test.xml | 2 +- 3 files changed, 212 insertions(+), 140 deletions(-) diff --git a/Assets/Art/UIPrefab/UIBody3DMenuTree.prefab b/Assets/Art/UIPrefab/UIBody3DMenuTree.prefab index 2d8809e2..75494103 100644 --- a/Assets/Art/UIPrefab/UIBody3DMenuTree.prefab +++ b/Assets/Art/UIPrefab/UIBody3DMenuTree.prefab @@ -35,7 +35,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 764.7555, y: 222.4883} + m_AnchoredPosition: {x: 764.7555, y: 186.59} m_SizeDelta: {x: 470, y: 33.1036} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &7059217903814836235 @@ -247,10 +247,10 @@ RectTransform: - {fileID: 1314588679329502247} m_Father: {fileID: 7413620028793613176} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 10, y: -10} - m_SizeDelta: {x: 20, y: 20} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &7657823456554628219 CanvasRenderer: @@ -408,10 +408,10 @@ RectTransform: m_Children: [] m_Father: {fileID: 3253026650041459306} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &6791851927171983665 CanvasRenderer: @@ -606,83 +606,6 @@ MonoBehaviour: m_FlexibleWidth: -1 m_FlexibleHeight: -1 m_LayoutPriority: 1 ---- !u!1 &4369923378443636512 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7840789038907519404} - - component: {fileID: 4241166032354527677} - - component: {fileID: 5435028851309332385} - m_Layer: 0 - m_Name: Bg - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7840789038907519404 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4369923378443636512} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 6328242271330880581} - - {fileID: 5894363737722245234} - m_Father: {fileID: 251803197481128702} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 10, y: -10} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &4241166032354527677 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4369923378443636512} - m_CullTransparentMesh: 1 ---- !u!114 &5435028851309332385 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4369923378443636512} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!1 &4436478427261826874 GameObject: m_ObjectHideFlags: 0 @@ -924,12 +847,12 @@ GameObject: - component: {fileID: 4513527160489183252} - component: {fileID: 6563839704117627199} m_Layer: 0 - m_Name: half + m_Name: Half m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &5894363737722245234 RectTransform: m_ObjectHideFlags: 0 @@ -942,12 +865,12 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7840789038907519404} + m_Father: {fileID: 251803197481128702} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -6, y: -6} + m_SizeDelta: {x: 14.9893, y: 14.9482} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &4513527160489183252 CanvasRenderer: @@ -1136,12 +1059,12 @@ GameObject: - component: {fileID: 5822037825308611511} - component: {fileID: 8829331589693888189} m_Layer: 0 - m_Name: Fg + m_Name: Full m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &6328242271330880581 RectTransform: m_ObjectHideFlags: 0 @@ -1154,7 +1077,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 7840789038907519404} + m_Father: {fileID: 251803197481128702} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1182,14 +1105,14 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Color: {r: 1, g: 0, b: 0, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Sprite: {fileID: 0} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -1480,7 +1403,9 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 251803197481128702} - - component: {fileID: 676066682308995329} + - component: {fileID: 2513262253907134897} + - component: {fileID: 8995589607768803785} + - component: {fileID: 424829580646518385} m_Layer: 0 m_Name: Obj m_TagString: Untagged @@ -1500,7 +1425,8 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 7840789038907519404} + - {fileID: 5894363737722245234} + - {fileID: 6328242271330880581} m_Father: {fileID: 968044794616394021} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} @@ -1508,7 +1434,15 @@ RectTransform: m_AnchoredPosition: {x: 43.516052, y: -29.0518} m_SizeDelta: {x: 29.0107, y: 29.0518} m_Pivot: {x: 0.5, y: 0} ---- !u!114 &676066682308995329 +--- !u!222 &2513262253907134897 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7290462064693839224} + m_CullTransparentMesh: 1 +--- !u!114 &8995589607768803785 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1517,7 +1451,37 @@ MonoBehaviour: m_GameObject: {fileID: 7290462064693839224} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &424829580646518385 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7290462064693839224} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} m_Name: m_EditorClassIdentifier: m_Navigation: @@ -1548,14 +1512,10 @@ MonoBehaviour: m_SelectedTrigger: Selected m_DisabledTrigger: Disabled m_Interactable: 1 - m_TargetGraphic: {fileID: 5435028851309332385} - toggleTransition: 1 - graphic: {fileID: 8829331589693888189} - m_Group: {fileID: 0} - onValueChanged: + m_TargetGraphic: {fileID: 8995589607768803785} + m_OnClick: m_PersistentCalls: m_Calls: [] - m_IsOn: 0 --- !u!1 &7324032189222578137 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/UI/UIBody3DMenuTree.cs b/Assets/Scripts/UI/UIBody3DMenuTree.cs index 21c46ce6..9b3dd34c 100644 --- a/Assets/Scripts/UI/UIBody3DMenuTree.cs +++ b/Assets/Scripts/UI/UIBody3DMenuTree.cs @@ -3,6 +3,8 @@ using UnityEngine.UI; using XMLTool; using System.Collections.Generic; using TMPro; +using System.Drawing; +using UnityEngine.Assertions.Must; namespace QFramework.Example { @@ -12,11 +14,128 @@ namespace QFramework.Example } public partial class UIBody3DMenuTree : UIPanel { + class ObjBtnData + { + public Button btn; + public Body3D.Body body; + public ObjToggleStatus status; + public Dictionary objBtnDataMap = new Dictionary(); + public ObjBtnData(Dictionary objBtnDataMap, Button btn, Body3D.Body body) + { + this.objBtnDataMap = objBtnDataMap; + this.btn = btn; + this.body = body; + btn.onClick.AddListener(() => + { + switch (status) + { + case ObjToggleStatus.None: + case ObjToggleStatus.Half: + SetStatus(ObjToggleStatus.Full); + break; + case ObjToggleStatus.Full: + SetStatus(ObjToggleStatus.None); + break; + } + }); + } + public void SetStatus(ObjToggleStatus status) + { + this.status = status; + RefreshStatus(); + } + + public void RefreshStatus() + { + switch (status) + { + case ObjToggleStatus.None: + Utility.FindObj(body.Path).gameObject.SetActive(false); + foreach (var sub in body.subBody) + { + if (objBtnDataMap.ContainsKey(sub.Value)) + { + objBtnDataMap[sub.Value].SetStatus(status); + } + } + break; + case ObjToggleStatus.Half: + break; + case ObjToggleStatus.Full: + Utility.FindObj(body.Path).gameObject.SetActive(true); + foreach (var sub in body.subBody) + { + if (objBtnDataMap.ContainsKey(sub.Value)) + { + objBtnDataMap[sub.Value].SetStatus(status); + } + } + break; + } + + + SetUpStatus(body.parent); + + RefreshUI(); + } + + public void SetUpStatus(Body3D.Body body) + { + //if (body != null) + //{ + // foreach (var sub in body.subBody) + // { + // if (objBtnDataMap.ContainsKey(sub.Value)) + // { + // objBtnDataMap[sub.Value] + // } + // } + //} + //if (objBtnDataMap.ContainsKey(body)) + //{ + // objBtnDataMap[body].SetStatus(this.status); + //} + //if (body.parent != null) + //{ + // SetUpStatus(body.parent); + //} + } + + + public void RefreshUI() + { + switch (status) + { + case ObjToggleStatus.None: + btn.transform.Find("Full").gameObject.SetActive(false); + btn.transform.Find("Half").gameObject.SetActive(false); + break; + case ObjToggleStatus.Half: + btn.transform.Find("Full").gameObject.SetActive(false); + btn.transform.Find("Half").gameObject.SetActive(true); + break; + case ObjToggleStatus.Full: + btn.transform.Find("Full").gameObject.SetActive(true); + btn.transform.Find("Half").gameObject.SetActive(false); + break; + } + } + } /// - /// ť˵ťĶӦ + /// ���������ť��˵���ť�Ķ�Ӧ /// Dictionary searchItemMap = new Dictionary(); + + + Dictionary objBtnDataMap = new Dictionary(); + + enum ObjToggleStatus + { + None, + Half, + Full + } protected override void OnInit(IUIData uiData = null) { // please add init code here @@ -57,34 +176,31 @@ namespace QFramework.Example Content.RemoveAllChildren(); BuildTreeUI(mData.body); } - private void BuildTreeUI(Body3D.Body data, int depth = 0, Transform parent = null) { foreach (var bodyPair in data.subBody) { Body3D.Body body = bodyPair.Value; - - // ȷ + // ȷ�������� Transform targetParent = parent != null ? parent : Content; - // Toggle + // ����Toggle GameObject toggleObj = GameObject.Instantiate(Item.gameObject, targetParent); toggleObj.name = body.Name; Toggle uiToggle = toggleObj.transform.Find("ToggleContent/UI").GetComponent(); - Toggle objToggle = toggleObj.transform.Find("ToggleContent/Obj").GetComponent(); + Button objBtn = toggleObj.transform.Find("ToggleContent/Obj").GetComponent