完善3D解剖菜单功能
This commit is contained in:
parent
40f0e1e6d9
commit
0eea99c8df
@ -35,7 +35,7 @@ RectTransform:
|
|||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 1}
|
m_AnchorMin: {x: 0, y: 1}
|
||||||
m_AnchorMax: {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_SizeDelta: {x: 470, y: 33.1036}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!114 &7059217903814836235
|
--- !u!114 &7059217903814836235
|
||||||
@ -247,10 +247,10 @@ RectTransform:
|
|||||||
- {fileID: 1314588679329502247}
|
- {fileID: 1314588679329502247}
|
||||||
m_Father: {fileID: 7413620028793613176}
|
m_Father: {fileID: 7413620028793613176}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 1}
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
m_AnchorMax: {x: 0, y: 1}
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
m_AnchoredPosition: {x: 10, y: -10}
|
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}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!222 &7657823456554628219
|
--- !u!222 &7657823456554628219
|
||||||
CanvasRenderer:
|
CanvasRenderer:
|
||||||
@ -408,10 +408,10 @@ RectTransform:
|
|||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 3253026650041459306}
|
m_Father: {fileID: 3253026650041459306}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
m_AnchoredPosition: {x: 0, y: 0}
|
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}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!222 &6791851927171983665
|
--- !u!222 &6791851927171983665
|
||||||
CanvasRenderer:
|
CanvasRenderer:
|
||||||
@ -606,83 +606,6 @@ MonoBehaviour:
|
|||||||
m_FlexibleWidth: -1
|
m_FlexibleWidth: -1
|
||||||
m_FlexibleHeight: -1
|
m_FlexibleHeight: -1
|
||||||
m_LayoutPriority: 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
|
--- !u!1 &4436478427261826874
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -924,12 +847,12 @@ GameObject:
|
|||||||
- component: {fileID: 4513527160489183252}
|
- component: {fileID: 4513527160489183252}
|
||||||
- component: {fileID: 6563839704117627199}
|
- component: {fileID: 6563839704117627199}
|
||||||
m_Layer: 0
|
m_Layer: 0
|
||||||
m_Name: half
|
m_Name: Half
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
||||||
m_StaticEditorFlags: 0
|
m_StaticEditorFlags: 0
|
||||||
m_IsActive: 1
|
m_IsActive: 0
|
||||||
--- !u!224 &5894363737722245234
|
--- !u!224 &5894363737722245234
|
||||||
RectTransform:
|
RectTransform:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -942,12 +865,12 @@ RectTransform:
|
|||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 7840789038907519404}
|
m_Father: {fileID: 251803197481128702}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 0}
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
m_AnchorMax: {x: 1, y: 1}
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
m_AnchoredPosition: {x: 0, y: 0}
|
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}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!222 &4513527160489183252
|
--- !u!222 &4513527160489183252
|
||||||
CanvasRenderer:
|
CanvasRenderer:
|
||||||
@ -1136,12 +1059,12 @@ GameObject:
|
|||||||
- component: {fileID: 5822037825308611511}
|
- component: {fileID: 5822037825308611511}
|
||||||
- component: {fileID: 8829331589693888189}
|
- component: {fileID: 8829331589693888189}
|
||||||
m_Layer: 0
|
m_Layer: 0
|
||||||
m_Name: Fg
|
m_Name: Full
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
||||||
m_StaticEditorFlags: 0
|
m_StaticEditorFlags: 0
|
||||||
m_IsActive: 1
|
m_IsActive: 0
|
||||||
--- !u!224 &6328242271330880581
|
--- !u!224 &6328242271330880581
|
||||||
RectTransform:
|
RectTransform:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -1154,7 +1077,7 @@ RectTransform:
|
|||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 7840789038907519404}
|
m_Father: {fileID: 251803197481128702}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
@ -1182,14 +1105,14 @@ MonoBehaviour:
|
|||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
m_Material: {fileID: 0}
|
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_RaycastTarget: 1
|
||||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
m_Maskable: 1
|
m_Maskable: 1
|
||||||
m_OnCullStateChanged:
|
m_OnCullStateChanged:
|
||||||
m_PersistentCalls:
|
m_PersistentCalls:
|
||||||
m_Calls: []
|
m_Calls: []
|
||||||
m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0}
|
m_Sprite: {fileID: 0}
|
||||||
m_Type: 0
|
m_Type: 0
|
||||||
m_PreserveAspect: 0
|
m_PreserveAspect: 0
|
||||||
m_FillCenter: 1
|
m_FillCenter: 1
|
||||||
@ -1480,7 +1403,9 @@ GameObject:
|
|||||||
serializedVersion: 6
|
serializedVersion: 6
|
||||||
m_Component:
|
m_Component:
|
||||||
- component: {fileID: 251803197481128702}
|
- component: {fileID: 251803197481128702}
|
||||||
- component: {fileID: 676066682308995329}
|
- component: {fileID: 2513262253907134897}
|
||||||
|
- component: {fileID: 8995589607768803785}
|
||||||
|
- component: {fileID: 424829580646518385}
|
||||||
m_Layer: 0
|
m_Layer: 0
|
||||||
m_Name: Obj
|
m_Name: Obj
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
@ -1500,7 +1425,8 @@ RectTransform:
|
|||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 7840789038907519404}
|
- {fileID: 5894363737722245234}
|
||||||
|
- {fileID: 6328242271330880581}
|
||||||
m_Father: {fileID: 968044794616394021}
|
m_Father: {fileID: 968044794616394021}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 1}
|
m_AnchorMin: {x: 0, y: 1}
|
||||||
@ -1508,7 +1434,15 @@ RectTransform:
|
|||||||
m_AnchoredPosition: {x: 43.516052, y: -29.0518}
|
m_AnchoredPosition: {x: 43.516052, y: -29.0518}
|
||||||
m_SizeDelta: {x: 29.0107, y: 29.0518}
|
m_SizeDelta: {x: 29.0107, y: 29.0518}
|
||||||
m_Pivot: {x: 0.5, y: 0}
|
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:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
@ -1517,7 +1451,37 @@ MonoBehaviour:
|
|||||||
m_GameObject: {fileID: 7290462064693839224}
|
m_GameObject: {fileID: 7290462064693839224}
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_EditorHideFlags: 0
|
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_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
m_Navigation:
|
m_Navigation:
|
||||||
@ -1548,14 +1512,10 @@ MonoBehaviour:
|
|||||||
m_SelectedTrigger: Selected
|
m_SelectedTrigger: Selected
|
||||||
m_DisabledTrigger: Disabled
|
m_DisabledTrigger: Disabled
|
||||||
m_Interactable: 1
|
m_Interactable: 1
|
||||||
m_TargetGraphic: {fileID: 5435028851309332385}
|
m_TargetGraphic: {fileID: 8995589607768803785}
|
||||||
toggleTransition: 1
|
m_OnClick:
|
||||||
graphic: {fileID: 8829331589693888189}
|
|
||||||
m_Group: {fileID: 0}
|
|
||||||
onValueChanged:
|
|
||||||
m_PersistentCalls:
|
m_PersistentCalls:
|
||||||
m_Calls: []
|
m_Calls: []
|
||||||
m_IsOn: 0
|
|
||||||
--- !u!1 &7324032189222578137
|
--- !u!1 &7324032189222578137
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
@ -3,6 +3,8 @@ using UnityEngine.UI;
|
|||||||
using XMLTool;
|
using XMLTool;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using TMPro;
|
using TMPro;
|
||||||
|
using System.Drawing;
|
||||||
|
using UnityEngine.Assertions.Must;
|
||||||
|
|
||||||
namespace QFramework.Example
|
namespace QFramework.Example
|
||||||
{
|
{
|
||||||
@ -12,11 +14,128 @@ namespace QFramework.Example
|
|||||||
}
|
}
|
||||||
public partial class UIBody3DMenuTree : UIPanel
|
public partial class UIBody3DMenuTree : UIPanel
|
||||||
{
|
{
|
||||||
|
class ObjBtnData
|
||||||
|
{
|
||||||
|
public Button btn;
|
||||||
|
public Body3D.Body body;
|
||||||
|
public ObjToggleStatus status;
|
||||||
|
public Dictionary<Body3D.Body, ObjBtnData> objBtnDataMap = new Dictionary<Body3D.Body, ObjBtnData>();
|
||||||
|
public ObjBtnData(Dictionary<Body3D.Body, ObjBtnData> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 搜索结果按钮与菜单按钮的对应
|
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD>Ķ<EFBFBD>Ӧ
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Dictionary<GameObject, GameObject> searchItemMap = new Dictionary<GameObject, GameObject>();
|
Dictionary<GameObject, GameObject> searchItemMap = new Dictionary<GameObject, GameObject>();
|
||||||
|
|
||||||
|
|
||||||
|
Dictionary<Body3D.Body, ObjBtnData> objBtnDataMap = new Dictionary<Body3D.Body, ObjBtnData>();
|
||||||
|
|
||||||
|
enum ObjToggleStatus
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
Half,
|
||||||
|
Full
|
||||||
|
}
|
||||||
protected override void OnInit(IUIData uiData = null)
|
protected override void OnInit(IUIData uiData = null)
|
||||||
{
|
{
|
||||||
// please add init code here
|
// please add init code here
|
||||||
@ -57,34 +176,31 @@ namespace QFramework.Example
|
|||||||
Content.RemoveAllChildren();
|
Content.RemoveAllChildren();
|
||||||
BuildTreeUI(mData.body);
|
BuildTreeUI(mData.body);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BuildTreeUI(Body3D.Body data, int depth = 0, Transform parent = null)
|
private void BuildTreeUI(Body3D.Body data, int depth = 0, Transform parent = null)
|
||||||
{
|
{
|
||||||
foreach (var bodyPair in data.subBody)
|
foreach (var bodyPair in data.subBody)
|
||||||
{
|
{
|
||||||
Body3D.Body body = bodyPair.Value;
|
Body3D.Body body = bodyPair.Value;
|
||||||
|
// ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
// 确定父容器
|
|
||||||
Transform targetParent = parent != null ? parent : Content;
|
Transform targetParent = parent != null ? parent : Content;
|
||||||
|
|
||||||
// 创建Toggle
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Toggle
|
||||||
GameObject toggleObj = GameObject.Instantiate(Item.gameObject, targetParent);
|
GameObject toggleObj = GameObject.Instantiate(Item.gameObject, targetParent);
|
||||||
toggleObj.name = body.Name;
|
toggleObj.name = body.Name;
|
||||||
|
|
||||||
Toggle uiToggle = toggleObj.transform.Find("ToggleContent/UI").GetComponent<Toggle>();
|
Toggle uiToggle = toggleObj.transform.Find("ToggleContent/UI").GetComponent<Toggle>();
|
||||||
Toggle objToggle = toggleObj.transform.Find("ToggleContent/Obj").GetComponent<Toggle>();
|
Button objBtn = toggleObj.transform.Find("ToggleContent/Obj").GetComponent<Button>();
|
||||||
TextMeshProUGUI label = toggleObj.transform.Find("ToggleContent/Label").GetComponentInChildren<TextMeshProUGUI>();
|
TextMeshProUGUI label = toggleObj.transform.Find("ToggleContent/Label").GetComponentInChildren<TextMeshProUGUI>();
|
||||||
label.text = body.Name; // 根据深度添加缩进
|
|
||||||
|
label.text = body.Name;
|
||||||
toggleObj.transform.Find("ToggleContent").GetComponent<HorizontalLayoutGroup>().padding = new RectOffset(depth * 15, 5, 2, 2);
|
toggleObj.transform.Find("ToggleContent").GetComponent<HorizontalLayoutGroup>().padding = new RectOffset(depth * 15, 5, 2, 2);
|
||||||
if (depth != 0)
|
if (depth != 0)
|
||||||
{
|
{
|
||||||
toggleObj.SetActive(false);
|
toggleObj.SetActive(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 递归构建子节点
|
|
||||||
Transform subContent = toggleObj.transform.Find("SubContent");
|
Transform subContent = toggleObj.transform.Find("SubContent");
|
||||||
|
|
||||||
// 设置Toggle的监听事件
|
|
||||||
uiToggle.onValueChanged.AddListener((isOn) =>
|
uiToggle.onValueChanged.AddListener((isOn) =>
|
||||||
{
|
{
|
||||||
for (int i = 0; i < subContent.childCount; i++)
|
for (int i = 0; i < subContent.childCount; i++)
|
||||||
@ -93,37 +209,32 @@ namespace QFramework.Example
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 为objToggle添加点击事件处理逻辑
|
objBtnDataMap.Add(body, new ObjBtnData(objBtnDataMap, objBtn, body));
|
||||||
objToggle.onValueChanged.AddListener((isOn) =>
|
|
||||||
{
|
|
||||||
SetObjectVisibility(body, isOn, subContent);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (body.subBody.Count > 0)
|
if (body.subBody.Count > 0)
|
||||||
{
|
{
|
||||||
uiToggle.gameObject.SetActive(true);
|
uiToggle.gameObject.SetActive(true);
|
||||||
BuildTreeUI(body, depth + 1, subContent);
|
BuildTreeUI(body, depth + 1, subContent);
|
||||||
//HideSubBody(body); // 初始时隐藏子节点
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uiToggle.gameObject.SetActive(false);
|
uiToggle.gameObject.SetActive(false);
|
||||||
Debug.Log($"节点 {body.Name} 没有子节点。");
|
Debug.Log($"<EFBFBD>ڵ<EFBFBD> {body.Name} û<><C3BB><EFBFBD>ӽڵ㡣");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 根据body和subbody中的path设置物体的显隐,同时设置子UI中的objToggle状态
|
private void SetSubObjActive(Body3D.Body body, bool isOn, Transform subContent)
|
||||||
private void SetObjectVisibility(Body3D.Body body, bool isOn, Transform subContent)
|
|
||||||
{
|
{
|
||||||
// 处理当前body的path对应的物体
|
// 先设置当前对象
|
||||||
GameObject targetObj = Utility.FindObj(body.Path);
|
GameObject targetObj = Utility.FindObj(body.Path);
|
||||||
if (targetObj != null)
|
if (targetObj != null)
|
||||||
{
|
{
|
||||||
targetObj.SetActive(isOn);
|
targetObj.SetActive(isOn);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 递归处理subbody中的path对应的物体,并设置子UI中的objToggle状态
|
// 再递归设置子对象
|
||||||
int index = 0;
|
int index = 0;
|
||||||
foreach (var subBodyPair in body.subBody)
|
foreach (var subBodyPair in body.subBody)
|
||||||
{
|
{
|
||||||
@ -132,33 +243,34 @@ namespace QFramework.Example
|
|||||||
{
|
{
|
||||||
Transform childToggleObj = subContent.GetChild(index);
|
Transform childToggleObj = subContent.GetChild(index);
|
||||||
Toggle childObjToggle = childToggleObj.transform.Find("ToggleContent/Obj").GetComponent<Toggle>();
|
Toggle childObjToggle = childToggleObj.transform.Find("ToggleContent/Obj").GetComponent<Toggle>();
|
||||||
childObjToggle.isOn = isOn; // 设置子UI中的objToggle状态
|
childObjToggle.isOn = isOn;
|
||||||
Transform childSubContent = childToggleObj.transform.Find("SubContent");
|
Transform childSubContent = childToggleObj.transform.Find("SubContent");
|
||||||
SetObjectVisibility(subBody, isOn, childSubContent);
|
SetSubObjActive(subBody, isOn, childSubContent);
|
||||||
}
|
}
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 实现RefreshSearchContent函数
|
|
||||||
|
// ʵRefreshSearchContent
|
||||||
private void RefreshSearchContent(string str)
|
private void RefreshSearchContent(string str)
|
||||||
{
|
{
|
||||||
// 清空SearchContent下的所有子物体
|
// SearchContentµ
|
||||||
searchItemMap.Clear();
|
searchItemMap.Clear();
|
||||||
SearchContent.RemoveAllChildren();
|
SearchContent.RemoveAllChildren();
|
||||||
// 递归检查子物体的子物体
|
// ݹ
|
||||||
CheckChildren(Content, str);
|
CheckChildren(Content, str);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 递归检查子物体的子物体
|
// ݹ
|
||||||
private void CheckChildren(Transform parent, string str)
|
private void CheckChildren(Transform parent, string str)
|
||||||
{
|
{
|
||||||
// 遍历当前父物体下的所有子物体
|
// ǰµ
|
||||||
for (int i = 0; i < parent.childCount; i++)
|
for (int i = 0; i < parent.childCount; i++)
|
||||||
{
|
{
|
||||||
Transform child = parent.GetChild(i);
|
Transform child = parent.GetChild(i);
|
||||||
// 尝试查找 ToggleContent/Label 组件
|
// Բ ToggleContent/Label
|
||||||
Transform labelTransform = child.Find("ToggleContent/Label");
|
Transform labelTransform = child.Find("ToggleContent/Label");
|
||||||
if (labelTransform != null)
|
if (labelTransform != null)
|
||||||
{
|
{
|
||||||
@ -166,14 +278,14 @@ namespace QFramework.Example
|
|||||||
if (textComponent != null)
|
if (textComponent != null)
|
||||||
{
|
{
|
||||||
string name = textComponent.text;
|
string name = textComponent.text;
|
||||||
// 检查子物体的名字是否包含搜索字符串
|
// Ƿַ
|
||||||
if (name.Contains(str))
|
if (name.Contains(str))
|
||||||
{
|
{
|
||||||
// 复制该子物体到 SearchContent 中
|
// Ƹ嵽 SearchContent
|
||||||
GameObject clone = GameObject.Instantiate(SearchItem.gameObject, SearchContent);
|
GameObject clone = GameObject.Instantiate(SearchItem.gameObject, SearchContent);
|
||||||
searchItemMap.Add(clone, child.gameObject);
|
searchItemMap.Add(clone, child.gameObject);
|
||||||
Transform subContent = child.Find("SubContent");
|
Transform subContent = child.Find("SubContent");
|
||||||
// 检查是否有子内容
|
// Ƿ
|
||||||
if (subContent.childCount > 0)
|
if (subContent.childCount > 0)
|
||||||
{
|
{
|
||||||
Button btn = clone.transform.Find("Button").GetComponent<Button>();
|
Button btn = clone.transform.Find("Button").GetComponent<Button>();
|
||||||
@ -187,10 +299,10 @@ namespace QFramework.Example
|
|||||||
TextMeshProUGUI buttonText = buttonLabel.GetComponent<TextMeshProUGUI>();
|
TextMeshProUGUI buttonText = buttonLabel.GetComponent<TextMeshProUGUI>();
|
||||||
if (buttonText != null)
|
if (buttonText != null)
|
||||||
{
|
{
|
||||||
buttonText.text = "(组)" + name + ">";
|
buttonText.text = "飩" + name + ">";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 递归检查当前子物体的子物体
|
// ݹ鵱ǰ
|
||||||
CheckChildren(subContent, str);
|
CheckChildren(subContent, str);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@ -64,7 +64,7 @@
|
|||||||
</Body>
|
</Body>
|
||||||
</Body>
|
</Body>
|
||||||
</Body>
|
</Body>
|
||||||
<Body name="肌肉" isBodyList="true">
|
<Body name="肌肉" isBodyList="true" path="Ren/Tou/JiRou">
|
||||||
<Body name="111" path="Ren/Tou/JiRou/1">
|
<Body name="111" path="Ren/Tou/JiRou/1">
|
||||||
<ObjectToggle>
|
<ObjectToggle>
|
||||||
<Color></Color>
|
<Color></Color>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user