Prechádzať zdrojové kódy

【灵树风机编辑模式调整-增加坐标显示,名称优化】

CHIVA\bj 1 týždeň pred
rodič
commit
73b544fec8
21 zmenil súbory, kde vykonal 2756 pridanie a 752 odobranie
  1. 3 4
      ModeDisplay/Assets/GameAssets/02.Prefabs/灵树科技内部结构拆解/金风GW109-2500永磁直驱风力发电机组.prefab
  2. 562 7
      ModeDisplay/Assets/GameAssets/06.UIPrefabs/AutoDisassemblyPanel.prefab
  3. 873 38
      ModeDisplay/Assets/GameAssets/06.UIPrefabs/CustomPartPanel.prefab
  4. 10 10
      ModeDisplay/Assets/GameAssets/06.UIPrefabs/EditWindowsPlane.prefab
  5. 558 3
      ModeDisplay/Assets/GameAssets/06.UIPrefabs/PartListPanel.prefab
  6. 2 1
      ModeDisplay/Assets/Scenes/内部结构/联合风机.unity
  7. 3 1
      ModeDisplay/Assets/Scenes/内部结构/金风风力发电组.unity
  8. 1 0
      ModeDisplay/Assets/Scripts/CameraSurround.cs
  9. 4 1
      ModeDisplay/Assets/Scripts/UI/QFramework/AutoDisassemblyPanel.Designer.cs
  10. 6 2
      ModeDisplay/Assets/Scripts/UI/QFramework/AutoDisassemblyPanel.cs
  11. 13 1
      ModeDisplay/Assets/Scripts/UI/QFramework/CustomPartPanel.Designer.cs
  12. 699 674
      ModeDisplay/Assets/Scripts/UI/QFramework/CustomPartPanel.cs
  13. 1 1
      ModeDisplay/Assets/Scripts/UI/QFramework/CustomPartPanel/CustomItem.Designer.cs
  14. 1 1
      ModeDisplay/Assets/Scripts/UI/QFramework/EditWindowsPlane.cs
  15. 4 1
      ModeDisplay/Assets/Scripts/UI/QFramework/PartListPanel.Designer.cs
  16. 8 6
      ModeDisplay/Assets/Scripts/UI/QFramework/PartListPanel.cs
  17. 1 1
      ModeDisplay/Assets/Scripts/UI/QFramework/PartListPanel/PartItem.Designer.cs
  18. BIN
      ModeDisplay/Assets/StreamingAssets/Config/内部结构设备自定义配置/联合风机.xlsx
  19. 7 0
      ModeDisplay/Assets/StreamingAssets/Config/内部结构设备自定义配置/联合风机.xlsx.meta
  20. BIN
      ModeDisplay/Assets/StreamingAssets/Config/内部结构设备自定义配置/金风GW109-2500永磁直驱风力发电机组.xlsx
  21. BIN
      ModeDisplay/Assets/StreamingAssets/金风GW109-2500永磁直驱风力发电机组.xlsx

+ 3 - 4
ModeDisplay/Assets/GameAssets/02.Prefabs/灵树科技内部结构拆解/金风GW109-2500永磁直驱风力发电机组.prefab

@@ -26158,8 +26158,7 @@ GameObject:
   - component: {fileID: 1078834439922718945}
   - component: {fileID: 1078834439922718946}
   m_Layer: 0
-  m_Name: "\u91D1\u98CEGW109-2500\u6C38\u78C1\u76F4\u9A71\u98CE\u529B\u53D1\u7535\u673A\u7EC4
-    1"
+  m_Name: "\u91D1\u98CEGW109-2500\u6C38\u78C1\u76F4\u9A71\u98CE\u529B\u53D1\u7535\u673A\u7EC4"
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -97904,7 +97903,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!4 &1078834440479150341
 Transform:
   m_ObjectHideFlags: 0
@@ -242392,7 +242391,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!4 &1078834441636370664
 Transform:
   m_ObjectHideFlags: 0

+ 562 - 7
ModeDisplay/Assets/GameAssets/06.UIPrefabs/AutoDisassemblyPanel.prefab

@@ -112,11 +112,11 @@ RectTransform:
   - {fileID: 3666548778705845570}
   - {fileID: 8317958065841906901}
   m_Father: {fileID: 1641346402271870707}
-  m_RootOrder: 3
+  m_RootOrder: 4
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 655.8, y: -1057.7001}
+  m_AnchoredPosition: {x: 798.1, y: -1057.7001}
   m_SizeDelta: {x: 142.18188, y: 45.799957}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &6461487946855478644
@@ -237,6 +237,81 @@ MonoBehaviour:
   m_NormalFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
   m_HoverFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
   m_SelectFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
+--- !u!1 &1585789558480055800
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8166066808522974723}
+  - component: {fileID: 4530121705242429054}
+  - component: {fileID: 1940913466945704291}
+  m_Layer: 5
+  m_Name: PromptIcon
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8166066808522974723
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1585789558480055800}
+  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_Children: []
+  m_Father: {fileID: 8935654739446460149}
+  m_RootOrder: 3
+  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_AnchoredPosition: {x: 0.25091553, y: 0}
+  m_SizeDelta: {x: 141.68005, y: 46}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &4530121705242429054
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1585789558480055800}
+  m_CullTransparentMesh: 0
+--- !u!114 &1940913466945704291
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1585789558480055800}
+  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: 0
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: -3592251023943376180, guid: c8c709b3849a552459d805ab3a1016e3,
+    type: 3}
+  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 &1607047995504179303
 GameObject:
   m_ObjectHideFlags: 0
@@ -423,6 +498,242 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   m_HorizontalFit: 2
   m_VerticalFit: 0
+--- !u!1 &1873051876745205661
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8935654739446460149}
+  - component: {fileID: 2233559784022144183}
+  - component: {fileID: 6150393194959568926}
+  - component: {fileID: 2955912111099495100}
+  - component: {fileID: 7545503237490537807}
+  - component: {fileID: 9204608696787640894}
+  m_Layer: 5
+  m_Name: AssembleBtn
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &8935654739446460149
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1873051876745205661}
+  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_Children:
+  - {fileID: 4365769759756746633}
+  - {fileID: 792938276042661223}
+  - {fileID: 5398641933142946247}
+  - {fileID: 8166066808522974723}
+  m_Father: {fileID: 1641346402271870707}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 512.7, y: -1057.7001}
+  m_SizeDelta: {x: 142.18188, y: 45.799957}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2233559784022144183
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1873051876745205661}
+  m_CullTransparentMesh: 0
+--- !u!114 &6150393194959568926
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1873051876745205661}
+  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: 0, g: 0, b: 0, a: 0}
+  m_RaycastTarget: 1
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: 776f629a4c02a2746b51409b704f02b4, type: 3}
+  m_Type: 0
+  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 &2955912111099495100
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1873051876745205661}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 6150393194959568926}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!114 &7545503237490537807
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1873051876745205661}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0d51f3a7c41ab0346b49ae50d456bece, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  MarkType: 0
+  CustomComponentName: HelpBtn
+  ComponentGeneratePath: 
+  CustomComment: 
+  mComponentName: UnityEngine.UI.Button
+--- !u!114 &9204608696787640894
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1873051876745205661}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 1505a3e801c2552418096985593d4746, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_NormalIcon: {fileID: 21300000, guid: ad5ef9b96f8146d4d8d32e3bc51a4060, type: 3}
+  m_HoverIcon: {fileID: 21300000, guid: c8e123d8d09f9cb40a2054a70fc295c8, type: 3}
+  m_SelectIcon: {fileID: 21300000, guid: 8586d7c956655074f9607899348438ff, type: 3}
+  m_NormalColor: {r: 0.99215686, g: 0.99215686, b: 0.99215686, a: 1}
+  m_HoverColor: {r: 1, g: 1, b: 1, a: 1}
+  m_SelectColor: {r: 0.92941177, g: 0.53333336, b: 0.09411765, a: 1}
+  m_NormalFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
+  m_HoverFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
+  m_SelectFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
+--- !u!1 &2119265339435686841
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5398641933142946247}
+  - component: {fileID: 8222117587559028939}
+  - component: {fileID: 1129530207323857094}
+  m_Layer: 5
+  m_Name: Line
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &5398641933142946247
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2119265339435686841}
+  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_Children: []
+  m_Father: {fileID: 8935654739446460149}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 0}
+  m_AnchoredPosition: {x: 0.00091552734, y: 1.5}
+  m_SizeDelta: {x: -0.0018310547, y: 3}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8222117587559028939
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2119265339435686841}
+  m_CullTransparentMesh: 0
+--- !u!114 &1129530207323857094
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2119265339435686841}
+  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_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: 776f629a4c02a2746b51409b704f02b4, type: 3}
+  m_Type: 0
+  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 &2291580810621939277
 GameObject:
   m_ObjectHideFlags: 0
@@ -573,6 +884,80 @@ MonoBehaviour:
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
   m_PixelsPerUnitMultiplier: 1
+--- !u!1 &2594558534830564479
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 4365769759756746633}
+  - component: {fileID: 2022362847301272810}
+  - component: {fileID: 9109888674725586440}
+  m_Layer: 5
+  m_Name: SelectArea
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &4365769759756746633
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2594558534830564479}
+  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_Children: []
+  m_Father: {fileID: 8935654739446460149}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0.00091552734, y: 0}
+  m_SizeDelta: {x: -0.0018310547, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2022362847301272810
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2594558534830564479}
+  m_CullTransparentMesh: 0
+--- !u!114 &9109888674725586440
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2594558534830564479}
+  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_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: f572b7acdd46c7c4a87973fd1c7e3196, type: 3}
+  m_Type: 0
+  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 &2611886645336659579
 GameObject:
   m_ObjectHideFlags: 0
@@ -800,7 +1185,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: "\u8BB2\u89E3"
+  m_Text: "\u62C6\u89E3"
 --- !u!114 &1473950331193666834
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -815,6 +1200,99 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   m_HorizontalFit: 2
   m_VerticalFit: 0
+--- !u!1 &3654735905966721864
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7988634067660285787}
+  - component: {fileID: 1181463142156953208}
+  - component: {fileID: 5980937814440519940}
+  - component: {fileID: 5080128550649255950}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &7988634067660285787
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3654735905966721864}
+  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_Children: []
+  m_Father: {fileID: 792938276042661223}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 1, y: 0.5}
+  m_AnchorMax: {x: 1, y: 0.5}
+  m_AnchoredPosition: {x: 8, y: 0}
+  m_SizeDelta: {x: 0, y: 30}
+  m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &1181463142156953208
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3654735905966721864}
+  m_CullTransparentMesh: 0
+--- !u!114 &5980937814440519940
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3654735905966721864}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.99215686, g: 0.99215686, b: 0.99215686, a: 0.78039217}
+  m_RaycastTarget: 1
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
+    m_FontSize: 17
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 1
+    m_MaxSize: 40
+    m_Alignment: 3
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u5B89\u88C5"
+--- !u!114 &5080128550649255950
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3654735905966721864}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalFit: 2
+  m_VerticalFit: 0
 --- !u!1 &3711358337639759513
 GameObject:
   m_ObjectHideFlags: 0
@@ -1187,11 +1665,11 @@ RectTransform:
   - {fileID: 8772682964177690242}
   - {fileID: 7556542823109768945}
   m_Father: {fileID: 1641346402271870707}
-  m_RootOrder: 4
+  m_RootOrder: 5
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 797.2, y: -1057.7001}
+  m_AnchoredPosition: {x: 939.5, y: -1057.7001}
   m_SizeDelta: {x: 142.18188, y: 45.799957}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &1601125749826701461
@@ -1572,11 +2050,11 @@ RectTransform:
   - {fileID: 8382970666035256085}
   - {fileID: 4398545490907817028}
   m_Father: {fileID: 1641346402271870707}
-  m_RootOrder: 2
+  m_RootOrder: 3
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 512.8, y: -1057.7001}
+  m_AnchoredPosition: {x: 655.1, y: -1057.7001}
   m_SizeDelta: {x: 142.18188, y: 45.799957}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &4057301474577734045
@@ -1965,6 +2443,7 @@ RectTransform:
   m_Children:
   - {fileID: 318974701001595778}
   - {fileID: 87230079553651119}
+  - {fileID: 8935654739446460149}
   - {fileID: 4023982557319981212}
   - {fileID: 120435640535004846}
   - {fileID: 8383835901643435367}
@@ -2028,9 +2507,85 @@ MonoBehaviour:
   Bg: {fileID: 1339259183278071226}
   SubTitlesText: {fileID: 8471168093831016683}
   DisassembleBtn: {fileID: 1278140150163085059}
+  AssembleBtn: {fileID: 2955912111099495100}
   PlayBtn: {fileID: 6224552796119446953}
   BackBtn: {fileID: 6418595163251032648}
   EditBtn: {fileID: 3758600428034080604}
+--- !u!1 &6581682033040223012
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 792938276042661223}
+  - component: {fileID: 6758212856046061983}
+  - component: {fileID: 4229297626695444380}
+  m_Layer: 5
+  m_Name: Icon
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &792938276042661223
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6581682033040223012}
+  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_Children:
+  - {fileID: 7988634067660285787}
+  m_Father: {fileID: 8935654739446460149}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.5}
+  m_AnchorMax: {x: 0, y: 0.5}
+  m_AnchoredPosition: {x: 36, y: 0}
+  m_SizeDelta: {x: 19, y: 18}
+  m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &6758212856046061983
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6581682033040223012}
+  m_CullTransparentMesh: 0
+--- !u!114 &4229297626695444380
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6581682033040223012}
+  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_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: ad5ef9b96f8146d4d8d32e3bc51a4060, type: 3}
+  m_Type: 0
+  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 &7484164476438042922
 GameObject:
   m_ObjectHideFlags: 0

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 873 - 38
ModeDisplay/Assets/GameAssets/06.UIPrefabs/CustomPartPanel.prefab


+ 10 - 10
ModeDisplay/Assets/GameAssets/06.UIPrefabs/EditWindowsPlane.prefab

@@ -235,7 +235,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: "\u62C6\u89E3\u987A\u5E8F"
+  m_Text: "\u88C5\u914D\u987A\u5E8F"
 --- !u!1 &1260581264997990706
 GameObject:
   m_ObjectHideFlags: 0
@@ -1776,10 +1776,10 @@ RectTransform:
   m_Father: {fileID: 8992710269439940609}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 1}
-  m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 609.85, y: -31.38}
-  m_SizeDelta: {x: 875.7, y: 48.76}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &6899788804891737220
 CanvasRenderer:
@@ -2277,7 +2277,7 @@ MonoBehaviour:
   m_TargetGraphic: {fileID: 8992710270365102431}
   m_HandleRect: {fileID: 8992710270365102424}
   m_Direction: 2
-  m_Value: 0
+  m_Value: 1
   m_Size: 1
   m_NumberOfSteps: 0
   m_OnValueChanged:
@@ -2354,9 +2354,9 @@ RectTransform:
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
+  m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: -17, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
   m_Pivot: {x: 0, y: 1}
 --- !u!222 &8992710269400323328
 CanvasRenderer:
@@ -2444,7 +2444,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 1, y: 1}
   m_AnchoredPosition: {x: 0.0000073936467, y: -0.000045776367}
-  m_SizeDelta: {x: 0, y: 55.76}
+  m_SizeDelta: {x: 0, y: 0}
   m_Pivot: {x: 0, y: 1}
 --- !u!114 &8992710269439940608
 MonoBehaviour:
@@ -2785,7 +2785,7 @@ RectTransform:
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
+  m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 20, y: 20}
   m_Pivot: {x: 0.5, y: 0.5}

+ 558 - 3
ModeDisplay/Assets/GameAssets/06.UIPrefabs/PartListPanel.prefab

@@ -197,6 +197,99 @@ MonoBehaviour:
   m_NormalFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
   m_HoverFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
   m_SelectFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
+--- !u!1 &279440142920213835
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1571491662606947393}
+  - component: {fileID: 5252167853587747519}
+  - component: {fileID: 39069930941816681}
+  - component: {fileID: 8649502846396749719}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1571491662606947393
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 279440142920213835}
+  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_Children: []
+  m_Father: {fileID: 4926278748080112378}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 1, y: 0.5}
+  m_AnchorMax: {x: 1, y: 0.5}
+  m_AnchoredPosition: {x: 8, y: 0}
+  m_SizeDelta: {x: 0, y: 30}
+  m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &5252167853587747519
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 279440142920213835}
+  m_CullTransparentMesh: 0
+--- !u!114 &39069930941816681
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 279440142920213835}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.99215686, g: 0.99215686, b: 0.99215686, a: 0.78039217}
+  m_RaycastTarget: 1
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
+    m_FontSize: 17
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 1
+    m_MaxSize: 40
+    m_Alignment: 3
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u90E8\u4EF6\u5C5E\u6027\u7F16\u8F91"
+--- !u!114 &8649502846396749719
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 279440142920213835}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalFit: 2
+  m_VerticalFit: 0
 --- !u!1 &363195836115832648
 GameObject:
   m_ObjectHideFlags: 0
@@ -238,8 +331,8 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 914, y: -1057.7001}
-  m_SizeDelta: {x: 142.18188, y: 45.799957}
+  m_AnchoredPosition: {x: 926.45, y: -1057.7001}
+  m_SizeDelta: {x: 167.09094, y: 45.799957}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &8452564729792554168
 CanvasRenderer:
@@ -1038,6 +1131,168 @@ MonoBehaviour:
   ComponentGeneratePath: 
   CustomComment: 
   mComponentName: UnityEngine.UI.Image
+--- !u!1 &2889382628950502413
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 9122522838666932143}
+  - component: {fileID: 2875796803892434432}
+  - component: {fileID: 7867036210873239005}
+  - component: {fileID: 4628494730174492478}
+  - component: {fileID: 3163086286080139387}
+  - component: {fileID: 8550702564644293593}
+  m_Layer: 5
+  m_Name: EquipmentEditorBtn
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &9122522838666932143
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2889382628950502413}
+  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_Children:
+  - {fileID: 2408006059884595447}
+  - {fileID: 4926278748080112378}
+  - {fileID: 3717108590271902363}
+  - {fileID: 2819321673898037813}
+  m_Father: {fileID: 3518437669659330043}
+  m_RootOrder: 9
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 1093.8, y: -1057.7001}
+  m_SizeDelta: {x: 167.09094, y: 45.799957}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2875796803892434432
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2889382628950502413}
+  m_CullTransparentMesh: 0
+--- !u!114 &7867036210873239005
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2889382628950502413}
+  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: 0, g: 0, b: 0, a: 0}
+  m_RaycastTarget: 1
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: 776f629a4c02a2746b51409b704f02b4, type: 3}
+  m_Type: 0
+  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 &4628494730174492478
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2889382628950502413}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 7867036210873239005}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!114 &3163086286080139387
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2889382628950502413}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0d51f3a7c41ab0346b49ae50d456bece, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  MarkType: 0
+  CustomComponentName: HelpBtn
+  ComponentGeneratePath: 
+  CustomComment: 
+  mComponentName: UnityEngine.UI.Button
+--- !u!114 &8550702564644293593
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2889382628950502413}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 1505a3e801c2552418096985593d4746, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_NormalIcon: {fileID: 21300000, guid: ad5ef9b96f8146d4d8d32e3bc51a4060, type: 3}
+  m_HoverIcon: {fileID: 21300000, guid: c8e123d8d09f9cb40a2054a70fc295c8, type: 3}
+  m_SelectIcon: {fileID: 21300000, guid: 8586d7c956655074f9607899348438ff, type: 3}
+  m_NormalColor: {r: 0.99215686, g: 0.99215686, b: 0.99215686, a: 1}
+  m_HoverColor: {r: 1, g: 1, b: 1, a: 1}
+  m_SelectColor: {r: 0.92941177, g: 0.53333336, b: 0.09411765, a: 1}
+  m_NormalFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
+  m_HoverFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
+  m_SelectFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
 --- !u!1 &3157876514565290564
 GameObject:
   m_ObjectHideFlags: 0
@@ -1426,6 +1681,7 @@ RectTransform:
   - {fileID: 2749633299167059887}
   - {fileID: 7548455910793466698}
   - {fileID: 4292609748222993908}
+  - {fileID: 9122522838666932143}
   m_Father: {fileID: 0}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -1495,6 +1751,7 @@ MonoBehaviour:
   RevokeBtn: {fileID: 4809012345445213660}
   RevokeAllBtn: {fileID: 2202943018905370643}
   AutoDisassemblyBtn: {fileID: 3217448529356914540}
+  EquipmentEditorBtn: {fileID: 4628494730174492478}
   SelfPartItem: {fileID: 0}
   CurrentAutoDisassemblyObj: {fileID: 0}
 --- !u!1 &3518437669676527183
@@ -3364,6 +3621,229 @@ MonoBehaviour:
   m_NormalFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
   m_HoverFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
   m_SelectFont: {fileID: 12800000, guid: 40655297447ed2e46a2d4b5c829580da, type: 3}
+--- !u!1 &6162709832735743743
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3717108590271902363}
+  - component: {fileID: 9073424918127905799}
+  - component: {fileID: 5236927061506592654}
+  m_Layer: 5
+  m_Name: Line
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &3717108590271902363
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6162709832735743743}
+  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_Children: []
+  m_Father: {fileID: 9122522838666932143}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 0}
+  m_AnchoredPosition: {x: 0.00091552734, y: 1.5}
+  m_SizeDelta: {x: -0.0018310547, y: 3}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &9073424918127905799
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6162709832735743743}
+  m_CullTransparentMesh: 0
+--- !u!114 &5236927061506592654
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6162709832735743743}
+  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_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: 776f629a4c02a2746b51409b704f02b4, type: 3}
+  m_Type: 0
+  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 &6239341356564779513
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2408006059884595447}
+  - component: {fileID: 4225271202367442481}
+  - component: {fileID: 6806807228558337877}
+  m_Layer: 5
+  m_Name: SelectArea
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &2408006059884595447
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6239341356564779513}
+  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_Children: []
+  m_Father: {fileID: 9122522838666932143}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0.00091552734, y: 0}
+  m_SizeDelta: {x: -0.0018310547, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &4225271202367442481
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6239341356564779513}
+  m_CullTransparentMesh: 0
+--- !u!114 &6806807228558337877
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6239341356564779513}
+  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_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: f572b7acdd46c7c4a87973fd1c7e3196, type: 3}
+  m_Type: 0
+  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 &6397516951148885487
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2819321673898037813}
+  - component: {fileID: 2038625791671227056}
+  - component: {fileID: 1798267204175741551}
+  m_Layer: 5
+  m_Name: PromptIcon
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &2819321673898037813
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6397516951148885487}
+  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_Children: []
+  m_Father: {fileID: 9122522838666932143}
+  m_RootOrder: 3
+  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_AnchoredPosition: {x: 0.25091553, y: 0}
+  m_SizeDelta: {x: 141.68005, y: 46}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2038625791671227056
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6397516951148885487}
+  m_CullTransparentMesh: 0
+--- !u!114 &1798267204175741551
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6397516951148885487}
+  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: 0
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: -3592251023943376180, guid: c8c709b3849a552459d805ab3a1016e3,
+    type: 3}
+  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 &6527872177968462647
 GameObject:
   m_ObjectHideFlags: 0
@@ -3779,6 +4259,81 @@ MonoBehaviour:
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
   m_PixelsPerUnitMultiplier: 1
+--- !u!1 &7145285773285691615
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 4926278748080112378}
+  - component: {fileID: 1288116646809299912}
+  - component: {fileID: 6008393549973363293}
+  m_Layer: 5
+  m_Name: Icon
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &4926278748080112378
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7145285773285691615}
+  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_Children:
+  - {fileID: 1571491662606947393}
+  m_Father: {fileID: 9122522838666932143}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.5}
+  m_AnchorMax: {x: 0, y: 0.5}
+  m_AnchoredPosition: {x: 20.001892, y: 0}
+  m_SizeDelta: {x: 19, y: 18}
+  m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &1288116646809299912
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7145285773285691615}
+  m_CullTransparentMesh: 0
+--- !u!114 &6008393549973363293
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7145285773285691615}
+  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_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: ad5ef9b96f8146d4d8d32e3bc51a4060, type: 3}
+  m_Type: 0
+  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 &7146586454068983714
 GameObject:
   m_ObjectHideFlags: 0
@@ -5164,7 +5719,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: "\u81EA\u52A8\u8BB2\u89E3"
+  m_Text: "\u90E8\u4EF6\u62C6\u89E3\u7EC4\u88C5"
 --- !u!114 &1339382169843623892
 MonoBehaviour:
   m_ObjectHideFlags: 0

+ 2 - 1
ModeDisplay/Assets/Scenes/内部结构/联合风机.unity

@@ -329,7 +329,7 @@ MonoBehaviour:
   Pos: {fileID: 1146730453}
   Distance_Pos: {fileID: 1143812558}
   minDistance: 0.3
-  zoomSpeed: 5
+  zoomSpeed: 1
 --- !u!81 &130505334
 AudioListener:
   m_ObjectHideFlags: 0
@@ -6465,6 +6465,7 @@ MonoBehaviour:
   m_CurrentSelectPartItem: {fileID: 0}
   ShowCustomPanel: 0
   ifShowCoustom: 1
+  isDelectCustomTable: 0
 --- !u!23 &270296783235102242
 MeshRenderer:
   m_ObjectHideFlags: 0

+ 3 - 1
ModeDisplay/Assets/Scenes/内部结构/金风风力发电组.unity

@@ -717,7 +717,7 @@ MonoBehaviour:
   Pos: {fileID: 52049346}
   Distance_Pos: {fileID: 1244467106}
   minDistance: 0.3
-  zoomSpeed: 5
+  zoomSpeed: 1
 --- !u!81 &130505334
 AudioListener:
   m_ObjectHideFlags: 0
@@ -60077,6 +60077,8 @@ MonoBehaviour:
   m_ShowState: 0
   m_CurrentSelectPartItem: {fileID: 0}
   ShowCustomPanel: 0
+  ifShowCoustom: 1
+  isDelectCustomTable: 0
 --- !u!33 &1893022789182880061
 MeshFilter:
   m_ObjectHideFlags: 0

+ 1 - 0
ModeDisplay/Assets/Scripts/CameraSurround.cs

@@ -99,6 +99,7 @@ public class CameraSurround : MonoBehaviour
             // 当前摄像机与旋转点距离
             float currentDistance = Vector3.Distance(transform.position, m_RotationPoint);
 
+            currentDistance = Mathf.Clamp(currentDistance, 0, 10);
             // 根据距离动态缩放速度(距离越小速度越慢)
             float dynamicSpeed = currentDistance * zoomSpeed * scroll;
 

+ 4 - 1
ModeDisplay/Assets/Scripts/UI/QFramework/AutoDisassemblyPanel.Designer.cs

@@ -5,7 +5,7 @@ using QFramework;
 
 namespace QFramework
 {
-	// Generate Id:10470fa5-0f21-4b66-a858-aedcb1215c54
+	// Generate Id:ce396354-5ee9-4ccb-878e-8af4807b4148
 	public partial class AutoDisassemblyPanel
 	{
 		public const string Name = "AutoDisassemblyPanel";
@@ -17,6 +17,8 @@ namespace QFramework
 		[SerializeField]
 		public UnityEngine.UI.Button DisassembleBtn;
 		[SerializeField]
+		public UnityEngine.UI.Button AssembleBtn;
+		[SerializeField]
 		public UnityEngine.UI.Button PlayBtn;
 		[SerializeField]
 		public UnityEngine.UI.Button BackBtn;
@@ -30,6 +32,7 @@ namespace QFramework
 			Bg = null;
 			SubTitlesText = null;
 			DisassembleBtn = null;
+			AssembleBtn = null;
 			PlayBtn = null;
 			BackBtn = null;
 			EditBtn = null;

+ 6 - 2
ModeDisplay/Assets/Scripts/UI/QFramework/AutoDisassemblyPanel.cs

@@ -27,7 +27,7 @@ namespace QFramework
             BackBtn.onClick.AddListener(OnBackBtnClick);
 
             DisassembleBtn.onClick.AddListener(OnDisassembleBtnClick);
-
+            AssembleBtn.onClick.AddListener(OnAssembleBtnClick);
             //긍서객큐맣槨댔역긍서눗왯
             EditBtn.onClick.RemoveAllListeners();
             EditBtn.onClick.AddListener(OnEditWindowsPanle);
@@ -74,7 +74,7 @@ namespace QFramework
             if (Time.timeScale == 0)
             {
                 SetCurrentState(1);
-                CameraSurround.instance.SetCameraPosition(MoveItemManager.instance.transform.GetChild(0), true, false);
+                //CameraSurround.instance.SetCameraPosition(MoveItemManager.instance.transform.GetChild(0), true, false);
             }
             else
             {
@@ -130,6 +130,8 @@ namespace QFramework
             SetCurrentState(1);
             Bg.gameObject.SetActive(true);
             DisassembleBtn.GetComponent<DownBGButton>().SetBtnState(BtnState.select);
+
+            CameraSurround.instance.SetCameraPosition(MoveItemManager.instance.moveItemInfos[0].moveItem.transform, true, false);
         }
 
         /// <summary>
@@ -140,6 +142,8 @@ namespace QFramework
             MoveItemManager.instance.PlayMoveItemByReverse();
             SetCurrentState(1);
             DisassembleBtn.GetComponent<DownBGButton>().SetBtnState(BtnState.normal);
+
+            CameraSurround.instance.SetCameraPosition(MoveItemManager.instance.moveItemInfos[MoveItemManager.instance.moveItemInfos.Count-1].moveItem.transform, true, false);
         }
 
         /// <summary>

+ 13 - 1
ModeDisplay/Assets/Scripts/UI/QFramework/CustomPartPanel.Designer.cs

@@ -5,7 +5,7 @@ using QFramework;
 
 namespace QFramework
 {
-	// Generate Id:3998bfda-2b09-4368-a312-a1e9c6338592
+	// Generate Id:39851a7d-a3c9-4fe8-b736-3cf5337244b1
 	public partial class CustomPartPanel
 	{
 		public const string Name = "CustomPartPanel";
@@ -15,6 +15,10 @@ namespace QFramework
 		[SerializeField]
 		public UnityEngine.UI.InputField PartNameEditInput;
 		[SerializeField]
+		public UnityEngine.UI.Text PosName;
+		[SerializeField]
+		public UnityEngine.UI.Button PosEditBtn;
+		[SerializeField]
 		public UnityEngine.UI.Text AudioName;
 		[SerializeField]
 		public UnityEngine.UI.Button AudioEditBtn;
@@ -23,6 +27,10 @@ namespace QFramework
 		[SerializeField]
 		public UnityEngine.UI.Button SubtitleEditBtn;
 		[SerializeField]
+		public UnityEngine.UI.Text ColiiderName;
+		[SerializeField]
+		public UnityEngine.UI.Button ColiiderEditBtn;
+		[SerializeField]
 		public UnityEngine.UI.Text PromptMessage;
 		[SerializeField]
 		public UnityEngine.UI.Button SaveEditBtn;
@@ -51,10 +59,14 @@ namespace QFramework
 		{
 			PartName = null;
 			PartNameEditInput = null;
+			PosName = null;
+			PosEditBtn = null;
 			AudioName = null;
 			AudioEditBtn = null;
 			SubtitleName = null;
 			SubtitleEditBtn = null;
+			ColiiderName = null;
+			ColiiderEditBtn = null;
 			PromptMessage = null;
 			SaveEditBtn = null;
 			ExitEditBtn = null;

+ 699 - 674
ModeDisplay/Assets/Scripts/UI/QFramework/CustomPartPanel.cs

@@ -7,793 +7,818 @@ using OfficeOpenXml;
 using System;
 using System.Collections;
 using static FileDialogHelper;
+using System.Text;
 
 namespace QFramework
 {
-	public class CustomPartPanelData : UIPanelData
-	{
-	}
-	public partial class CustomPartPanel : UIPanel
-	{
-		/// <summary> 选中的Item </summary>
-		CustomItem SelectItem;
-		/// <summary> 选中的新父级Item </summary>
-		CustomItem SelectNewParent;
-
-		/// <summary> 音频路径 </summary>
-		private string AudioSearchPath;
-		/// <summary>  </summary>
-		private string SubtitleSearchPath;
-		/// <summary>  </summary>
-		private string ConfigSerachPath;
-		private string AbsolutePath;
-
-		public List<CustomItem> CustomAllData;
-
-		private int ExcelIndex;
-
-		/// <summary> 是否修改层级结构 </summary>
-		public bool IFChangeLayer = false;
-		/// <summary> 是否修改存储文件修改 </summary>
-		private bool ifSaveFileChange = false;
-
-		public List<CustomItem> editObjs;
-
-		public enum CustomPanelBtnkState
-		{
-			NoOnclick,
-			ResourceEdit,
-			LayerEdit,
-			NameEdit
-		}
-
-		public CustomPanelBtnkState CustomState = CustomPanelBtnkState.NoOnclick;
-
-		protected override void ProcessMsg(int eventId, QMsg msg)
-		{
-			throw new System.NotImplementedException();
-		}
-		
-		protected override void OnInit(IUIData uiData = null)
-		{
-			mData = uiData as CustomPartPanelData ?? new CustomPartPanelData();
-			// please add init code here
-
-			//数据初始化
-			PartName.text = DeviceController.instance.DeviceName;
-			SaveEditBtn.gameObject.SetActive(false);
-			ExitEditBtn.gameObject.SetActive(false);
-
-			AudioSearchPath = $"{Application.streamingAssetsPath}/Config/Audios/内部结构/{DeviceController.instance.DeviceName}";
-			SubtitleSearchPath = $"{Application.streamingAssetsPath}/SubTitles/内部结构/{DeviceController.instance.DeviceName}";
-			ConfigSerachPath = $"{Application.streamingAssetsPath}/Config/内部结构设备自定义配置/{DeviceController.instance.DeviceName}.xlsx";
-
-			CustomAllData = new List<CustomItem>();
-			editObjs = new List<CustomItem>();
-
-			//如果修改表格不存在就创建表格
-			FileInfo tmpFileInfo = new FileInfo(ConfigSerachPath);
-			if (!tmpFileInfo.Exists)
-			{
-				tmpFileInfo.Create().Dispose();
-				ExcelHelper.WriteInfoToExcel(ConfigSerachPath, new CustomPartData());
-			}
+    public class CustomPartPanelData : UIPanelData
+    {
+    }
+    public partial class CustomPartPanel : UIPanel
+    {
+        /// <summary> 选中的Item </summary>
+        CustomItem SelectItem;
+        /// <summary> 选中的新父级Item </summary>
+        CustomItem SelectNewParent;
+
+        /// <summary> 音频路径 </summary>
+        private string AudioSearchPath;
+        /// <summary>  </summary>
+        private string SubtitleSearchPath;
+        /// <summary>  </summary>
+        private string ConfigSerachPath;
+        private string AbsolutePath;
+
+        public List<CustomItem> CustomAllData;
+
+        private int ExcelIndex;
+
+        /// <summary> 是否修改层级结构 </summary>
+        public bool IFChangeLayer = false;
+        /// <summary> 是否修改存储文件修改 </summary>
+        private bool ifSaveFileChange = false;
+
+        public List<CustomItem> editObjs;
+
+        private StringBuilder selectSrt=new StringBuilder();
+
+        public enum CustomPanelBtnkState
+        {
+            NoOnclick,
+            ResourceEdit,
+            LayerEdit,
+            NameEdit
+        }
+
+        public CustomPanelBtnkState CustomState = CustomPanelBtnkState.NoOnclick;
+
+        protected override void ProcessMsg(int eventId, QMsg msg)
+        {
+            throw new System.NotImplementedException();
+        }
+
+        protected override void OnInit(IUIData uiData = null)
+        {
+            mData = uiData as CustomPartPanelData ?? new CustomPartPanelData();
+            // please add init code here
+
+            //数据初始化
+            PartName.text = DeviceController.instance.DeviceName;
+            SaveEditBtn.gameObject.SetActive(false);
+            ExitEditBtn.gameObject.SetActive(false);
+
+            AudioSearchPath = $"{Application.streamingAssetsPath}/Config/Audios/内部结构/{DeviceController.instance.DeviceName}";
+            SubtitleSearchPath = $"{Application.streamingAssetsPath}/SubTitles/内部结构/{DeviceController.instance.DeviceName}";
+            ConfigSerachPath = $"{Application.streamingAssetsPath}/Config/内部结构设备自定义配置/{DeviceController.instance.DeviceName}.xlsx";
+
+            CustomAllData = new List<CustomItem>();
+            editObjs = new List<CustomItem>();
+
+            //如果修改表格不存在就创建表格
+            FileInfo tmpFileInfo = new FileInfo(ConfigSerachPath);
+            if (!tmpFileInfo.Exists)
+            {
+                tmpFileInfo.Create().Dispose();
+                ExcelHelper.WriteInfoToExcel(ConfigSerachPath, new CustomPartData());
+            }
 #if UNITY_EDITOR
-			UnityEditor.AssetDatabase.Refresh();
+            UnityEditor.AssetDatabase.Refresh();
 #endif
 
-			//创建Item
-			CustomItem customExample = Instantiate(CustomItem.gameObject,Content).GetComponent<CustomItem>();
-			customExample.InitData(DeviceController.instance.GetDevicePartInfos(DeviceController.instance.transform.GetComponent<PartMark>()),ref CustomAllData);
-			customExample.UnExpandChildPartItem();
-			customExample.ExpandChildPartItem();
+            //创建Item
+            CustomItem customExample = Instantiate(CustomItem.gameObject, Content).GetComponent<CustomItem>();
+            customExample.InitData(DeviceController.instance.GetDevicePartInfos(DeviceController.instance.transform.GetComponent<PartMark>()), ref CustomAllData);
+            customExample.UnExpandChildPartItem();
+            customExample.ExpandChildPartItem();
 
             for (int i = 0; i < DAL.Instance.Get<DeviceOfPartDataProxy>().m_CustomInfos.Count; i++)
             {
-				editObjs.Add( CustomAllData.Find(t => t.partInfo.partName == DAL.Instance.Get<DeviceOfPartDataProxy>().m_CustomInfos[i].partName));
-			}
-			
-			addBtnOnclick();
-		}
+                editObjs.Add(CustomAllData.Find(t => t.partInfo.partName == DAL.Instance.Get<DeviceOfPartDataProxy>().m_CustomInfos[i].partName));
+            }
 
-		private void addBtnOnclick()
+            addBtnOnclick();
+        }
+
+        private void addBtnOnclick()
         {
-			//修改名称按钮
-			PartNameBtn.onClick.AddListener(() =>
-			{
-				if (SelectItem == null)
-				{
-					return;
-				}
-				initCustomTable();
-				SetBtnInteractable(false);
-				CustomState = CustomPanelBtnkState.NameEdit;
-
-				SaveEditBtn.gameObject.SetActive(true);
-				ExitEditBtn.gameObject.SetActive(true);
-				PartName.gameObject.SetActive(false);
-				PartNameEditInput.gameObject.SetActive(true);
-
-				PromptMessage.text = "请点击部件名称进行输入";
-
-				SaveEditBtn.onClick.RemoveAllListeners();
-				SaveEditBtn.onClick.AddListener(() => SaveNameBtnOnClick());
-
-			});
-
-			//修改媒体资源按钮
-			ResourcesBtn.onClick.AddListener(() =>
-			{
-				if(SelectItem == null)
+            //修改名称按钮
+            PartNameBtn.onClick.AddListener(() =>
+            {
+                if (SelectItem == null)
                 {
-					return;
+                    return;
                 }
-				initCustomTable();
-				SetBtnInteractable(false);
-				CustomState = CustomPanelBtnkState.ResourceEdit;
+                initCustomTable();
+                SetBtnInteractable(false);
+                CustomState = CustomPanelBtnkState.NameEdit;
 
-				SaveEditBtn.gameObject.SetActive(true);
-				ExitEditBtn.gameObject.SetActive(true);
-				AudioEditBtn.gameObject.SetActive(true);
-				SubtitleEditBtn.gameObject.SetActive(true);
+                SaveEditBtn.gameObject.SetActive(true);
+                ExitEditBtn.gameObject.SetActive(true);
+                PartName.gameObject.SetActive(false);
+                PartNameEditInput.gameObject.SetActive(true);
 
-				PromptMessage.text = "点击上方按钮修改音频及字幕文件。\n请保持音频及字幕文件名称相同。";
+                PromptMessage.text = "请点击部件名称进行输入";
 
-				SaveEditBtn.onClick.RemoveAllListeners();
-				SaveEditBtn.onClick.AddListener(() => SaveResourceBtnOnClick());
-			});
+                SaveEditBtn.onClick.RemoveAllListeners();
+                SaveEditBtn.onClick.AddListener(() => SaveNameBtnOnClick());
 
-			HierarchyBtn.onClick.AddListener(() =>
-			{
-				if (SelectItem == null)
-				{
-					return;
-				}
-				initCustomTable();
-				IFChangeLayer = true;
-				SetBtnInteractable(false);
-				CustomState = CustomPanelBtnkState.LayerEdit;
+            });
 
-				SaveEditBtn.gameObject.SetActive(true);
-				ExitEditBtn.gameObject.SetActive(true);
+            //修改媒体资源按钮
+            ResourcesBtn.onClick.AddListener(() =>
+            {
+                if (SelectItem == null)
+                {
+                    return;
+                }
+                initCustomTable();
+                SetBtnInteractable(false);
+                CustomState = CustomPanelBtnkState.ResourceEdit;
+
+                SaveEditBtn.gameObject.SetActive(true);
+                ExitEditBtn.gameObject.SetActive(true);
+                AudioEditBtn.gameObject.SetActive(true);
+                SubtitleEditBtn.gameObject.SetActive(true);
+
+                PromptMessage.text = "点击上方按钮修改音频及字幕文件。\n请保持音频及字幕文件名称相同。";
+
+                SaveEditBtn.onClick.RemoveAllListeners();
+                SaveEditBtn.onClick.AddListener(() => SaveResourceBtnOnClick());
+            });
+
+            HierarchyBtn.onClick.AddListener(() =>
+            {
+                if (SelectItem == null)
+                {
+                    return;
+                }
+                initCustomTable();
+                IFChangeLayer = true;
+                SetBtnInteractable(false);
+                CustomState = CustomPanelBtnkState.LayerEdit;
 
-				PromptMessage.text = $"当前所选物体: {SelectItem.partInfo.partName} \n当前所选物体原父级: {SelectItem.parentItem.partInfo.partName}  \n请选择该部件新的父层级";
+                SaveEditBtn.gameObject.SetActive(true);
+                ExitEditBtn.gameObject.SetActive(true);
 
-				SaveEditBtn.onClick.RemoveAllListeners();
-				SaveEditBtn.onClick.AddListener(() => SaveLayerBtnOnClick());
+                PromptMessage.text = $"当前所选物体: {SelectItem.partInfo.partName} \n当前所选物体原父级: {SelectItem.parentItem.partInfo.partName}  \n请选择该部件新的父层级";
 
-			});
+                SaveEditBtn.onClick.RemoveAllListeners();
+                SaveEditBtn.onClick.AddListener(() => SaveLayerBtnOnClick());
 
-			PanelExitBtn.onClick.AddListener(() =>
-			{
-				UIKit.HidePanel<CustomPartPanel>();
-				
-				DeviceController.instance.ShowCustomPanel = !DeviceController.instance.ShowCustomPanel;
-			});
+            });
 
-			ExitEditBtn.onClick.AddListener(() => ExitBtnOnclick());
+            PanelExitBtn.onClick.AddListener(() =>
+            {
+                UIKit.HidePanel<CustomPartPanel>();
 
-			AudioEditBtn.onClick.AddListener(() => SelectResourceAndCopyFile("选择音频资源", System.Environment.GetEnvironmentVariable("USERPROFILE") + "\\Desktop", "音频文件\0*.MP3\0All Files\0*.*\0\0", AudioSearchPath));
-			SubtitleEditBtn.onClick.AddListener(() => SelectResourceAndCopyFile("选择字幕资源", System.Environment.GetEnvironmentVariable("USERPROFILE") + "\\Desktop", "字幕文件\0*.SRT\0All Files\0*.*\0\0", SubtitleSearchPath));
+                DeviceController.instance.ShowCustomPanel = !DeviceController.instance.ShowCustomPanel;
+            });
 
-			DeleteCustomTbaleBtn.onClick.AddListener(() => 
-			{
-				if (File.Exists(ConfigSerachPath))
+            ExitEditBtn.onClick.AddListener(() => ExitBtnOnclick());
+
+            AudioEditBtn.onClick.AddListener(() => SelectResourceAndCopyFile("选择音频资源", System.Environment.GetEnvironmentVariable("USERPROFILE") + "\\Desktop", "音频文件\0*.MP3\0All Files\0*.*\0\0", AudioSearchPath));
+            SubtitleEditBtn.onClick.AddListener(() => SelectResourceAndCopyFile("选择字幕资源", System.Environment.GetEnvironmentVariable("USERPROFILE") + "\\Desktop", "字幕文件\0*.SRT\0All Files\0*.*\0\0", SubtitleSearchPath));
+
+            DeleteCustomTbaleBtn.onClick.AddListener(() =>
+            {
+                if (File.Exists(ConfigSerachPath))
                 {
-					File.Delete(ConfigSerachPath);
+                    File.Delete(ConfigSerachPath);
 #if UNITY_EDITOR
-					UnityEditor.AssetDatabase.Refresh();
+                    UnityEditor.AssetDatabase.Refresh();
 #endif
-					DAL.Instance.Get<DeviceOfPartDataProxy>().ReadStepMsgInfoFromTable(DeviceController.instance.DeviceName);
-					DAL.Instance.Get<DeviceOfPartDataProxy>().returnBackTable();
-					
-					RefreshPartItemList();
-					RefreshCustomItemList();
-					DeleteTableBtnText.text = "配置表已删除";
-					PromptMessage.text = "重新启动以恢复配置修改。\n配置表将在下次打开编辑页面时自动生成。";
-					DeleteCustomTbaleBtn.interactable = false;
-					SelectItem = null;
-					DeviceController.instance.isDelectCustomTable = true;
-					isDelectTable = true;
-				}
+                    DAL.Instance.Get<DeviceOfPartDataProxy>().ReadStepMsgInfoFromTable(DeviceController.instance.DeviceName);
+                    DAL.Instance.Get<DeviceOfPartDataProxy>().returnBackTable();
+
+                    RefreshPartItemList();
+                    RefreshCustomItemList();
+                    DeleteTableBtnText.text = "配置表已删除";
+                    PromptMessage.text = "重新启动以恢复配置修改。\n配置表将在下次打开编辑页面时自动生成。";
+                    DeleteCustomTbaleBtn.interactable = false;
+                    SelectItem = null;
+                    DeviceController.instance.isDelectCustomTable = true;
+                    isDelectTable = true;
+                }
                 else
                 {
-					FileInfo tmpFileInfo = new FileInfo(ConfigSerachPath);
-					if (!tmpFileInfo.Exists)
-					{
-						tmpFileInfo.Create().Dispose();
-						ExcelHelper.WriteInfoToExcel(ConfigSerachPath, new CustomPartData());
-					}
-					DeleteTableBtnText.text = "点击删除修改配置表";
-				}
+                    FileInfo tmpFileInfo = new FileInfo(ConfigSerachPath);
+                    if (!tmpFileInfo.Exists)
+                    {
+                        tmpFileInfo.Create().Dispose();
+                        ExcelHelper.WriteInfoToExcel(ConfigSerachPath, new CustomPartData());
+                    }
+                    DeleteTableBtnText.text = "点击删除修改配置表";
+                }
 
-			});
-		}
+            });
+        }
 
 
 
-		private void initCustomTable()
+        private void initCustomTable()
         {
-			if (SelectItem == null)
-				return;
-
-			if (DAL.Instance.Get<DeviceOfPartDataProxy>().GetCustomByEditPartName(SelectItem.TitleText.text) != null)
-				return;
-
-			if (DAL.Instance.Get<DeviceOfPartDataProxy>().GetCustomByPartName(SelectItem.TitleText.text) != null)
-				return;
-
-			
-			CustomPartData data = new CustomPartData(SelectItem.partInfo.partName, SubtitleName.text.Substring(0, SubtitleName.text.LastIndexOf('.')), SelectItem.partInfo.partName, AbsolutePath, AbsolutePath);
-			ExcelHelper.WriteInfoToExcel(ConfigSerachPath, data);
-			DAL.Instance.Get<DeviceOfPartDataProxy>().ReadCustomInfoFromTable(DeviceController.instance.DeviceName);
-			ExcelIndex = data.id.ToInt()+1;
-			editObjs.Add(SelectItem);
-
-		}
-		public string GetAbsolutePath(CustomItem tmpItem)
-		{
-			string path = tmpItem.partInfo.partMark.PartName;
-			CustomItem tmpParent = tmpItem.parentItem;
-			while (tmpParent != null)
-			{
-				path = tmpParent.partInfo.partMark.PartName + "/" + path;
-				tmpParent = tmpParent.parentItem;
-			}
-			return "/" + path;
-		}
-
-		public void SetBtnInteractable(bool ifOpen)
+            if (SelectItem == null)
+                return;
+
+            if (DAL.Instance.Get<DeviceOfPartDataProxy>().GetCustomByEditPartName(SelectItem.TitleText.text) != null)
+                return;
+
+            if (DAL.Instance.Get<DeviceOfPartDataProxy>().GetCustomByPartName(SelectItem.TitleText.text) != null)
+                return;
+
+
+            CustomPartData data = new CustomPartData(SelectItem.partInfo.partName, SubtitleName.text.Substring(0, SubtitleName.text.LastIndexOf('.')), SelectItem.partInfo.partName, AbsolutePath, AbsolutePath);
+            ExcelHelper.WriteInfoToExcel(ConfigSerachPath, data);
+            DAL.Instance.Get<DeviceOfPartDataProxy>().ReadCustomInfoFromTable(DeviceController.instance.DeviceName);
+            ExcelIndex = data.id.ToInt() + 1;
+            editObjs.Add(SelectItem);
+
+        }
+        public string GetAbsolutePath(CustomItem tmpItem)
         {
-			HierarchyBtn.interactable = ifOpen;
-			ResourcesBtn.interactable = ifOpen;
-			PartNameBtn.interactable = ifOpen;
-		}
-
-		public bool isDelectTable = false;
-
-		#region 获取选中信息
-		/// <summary> 获取选中的组件信息 </summary>
-		/// <param name="customItem"></param>
-		public void GetSelectChangeMessage(CustomItem customItem)
-		{
-			if (isDelectTable)
-				return;
-			if (IFChangeLayer)
-			{
-				if (SelectItem == customItem)
-					return;
-
-				if (SelectNewParent != null)
-					SelectNewParent.TitleText.color = Color.white;
-
-				SelectNewParent = customItem;
-				SelectNewParent.TitleText.color = Color.red;
-				PromptMessage.text = $"当前所选物体: {PartName.text}\n 当前父层级: {SelectItem.parentItem.partInfo.partName} \n 选中的新父层级 :{SelectNewParent.partInfo.partName}";
-			}
-			else
-			{
-				if (SelectItem != null)
-					SelectItem.TitleText.color = Color.white;
-				SelectItem = customItem;
-				PartName.text = SelectItem.partInfo.partName;
-				SelectItem.TitleText.color = Color.grey;
-				PromptMessage.text = $"当前选择物体为 {SelectItem.TitleText.text}";
-				AbsolutePath = GetAbsolutePath(SelectItem);
-				getSourcePath(SelectItem.TitleText.text);
-
-				if (PartNameBtn.gameObject.activeSelf == false)
+            string path = tmpItem.partInfo.partMark.PartName;
+            CustomItem tmpParent = tmpItem.parentItem;
+            while (tmpParent != null)
+            {
+                path = tmpParent.partInfo.partMark.PartName + "/" + path;
+                tmpParent = tmpParent.parentItem;
+            }
+            return "/" + path;
+        }
+
+        public void SetBtnInteractable(bool ifOpen)
+        {
+            HierarchyBtn.interactable = ifOpen;
+            ResourcesBtn.interactable = ifOpen;
+            PartNameBtn.interactable = ifOpen;
+        }
+
+        public bool isDelectTable = false;
+
+        #region 获取选中信息
+        /// <summary> 获取选中的组件信息 </summary>
+        /// <param name="customItem"></param>
+        public void GetSelectChangeMessage(CustomItem customItem)
+        {
+            if (isDelectTable)
+                return;
+            if (IFChangeLayer)
+            {
+                if (SelectItem == customItem)
+                    return;
+
+                if (SelectNewParent != null)
+                    SelectNewParent.TitleText.color = Color.white;
+
+                SelectNewParent = customItem;
+                SelectNewParent.TitleText.color = Color.red;
+                PromptMessage.text = $"当前所选物体: {PartName.text}\n 当前父层级: {SelectItem.parentItem.partInfo.partName} \n 选中的新父层级 :{SelectNewParent.partInfo.partName}";
+            }
+            else
+            {
+                if (SelectItem != null)
+                    SelectItem.TitleText.color = Color.white;
+                SelectItem = customItem;
+                PartName.text = SelectItem.partInfo.partName;
+                SelectItem.TitleText.color = Color.grey;
+                PromptMessage.text = $"当前选择物体为 {SelectItem.TitleText.text}";
+                AbsolutePath = GetAbsolutePath(SelectItem);
+                getSourcePath(SelectItem.TitleText.text);
+
+                if (PartNameBtn.gameObject.activeSelf == false)
                 {
-					PartNameBtn.gameObject.SetActive(true);
-					ResourcesBtn.gameObject.SetActive(true);
-					//HierarchyBtn.gameObject.SetActive(true);
-				}
-			}
-		}
+                    PartNameBtn.gameObject.SetActive(true);
+                    ResourcesBtn.gameObject.SetActive(true);
+                    //HierarchyBtn.gameObject.SetActive(true);
+                }
 
-		/// <summary> 获取选中部件的音频及字幕路径 </summary>
-		/// <param name="partName"></param>
-		public void getSourcePath(string partName)
-		{
-			PartDataInfo partDataInfo;
+                PosName.text = SelectItem.partInfo.partMark.transform.position.ToString("F2");
+                ColiiderName.text = "已开启碰撞检测";
+            }
+        }
+
+        /// <summary> 获取选中部件的音频及字幕路径 </summary>
+        /// <param name="partName"></param>
+        public void getSourcePath(string partName)
+        {
+            PartDataInfo partDataInfo;
 
-			CustomPartData customPartData = DAL.Instance.Get<DeviceOfPartDataProxy>().GetCustomByEditPartName(partName);
+            CustomPartData customPartData = DAL.Instance.Get<DeviceOfPartDataProxy>().GetCustomByEditPartName(partName);
 
-			IEnumerable<string> audioFiles;
-			IEnumerable<string> SubtitleFiles;
+            IEnumerable<string> audioFiles;
+            IEnumerable<string> SubtitleFiles;
 
-			if (customPartData == null)
+            if (customPartData == null)
             {
-				customPartData = DAL.Instance.Get<DeviceOfPartDataProxy>().GetCustomByPartName(partName);
+                customPartData = DAL.Instance.Get<DeviceOfPartDataProxy>().GetCustomByPartName(partName);
 
-				if (customPartData == null)
+                if (customPartData == null)
                 {
-					partDataInfo = DAL.Instance.Get<DeviceOfPartDataProxy>().GetPartInfoByPartName(partName);
-					ExcelIndex = partDataInfo.id.ToInt() + 1;
-					audioFiles = Directory.EnumerateFiles(AudioSearchPath, partDataInfo.audioClipName + ".mp3");
-					SubtitleFiles = Directory.EnumerateFiles(SubtitleSearchPath, partDataInfo.audioClipName + ".srt");
+                    partDataInfo = DAL.Instance.Get<DeviceOfPartDataProxy>().GetPartInfoByPartName(partName);
+                    ExcelIndex = partDataInfo.id.ToInt() + 1;
+                    audioFiles = Directory.EnumerateFiles(AudioSearchPath, partDataInfo.audioClipName + ".mp3");
+                    SubtitleFiles = Directory.EnumerateFiles(SubtitleSearchPath, partDataInfo.audioClipName + ".srt");
 
-				}
+                }
                 else
                 {
-					ExcelIndex = customPartData.id.ToInt() + 1;
-					audioFiles = Directory.EnumerateFiles(AudioSearchPath, customPartData.audioClipName + ".mp3");
-					SubtitleFiles = Directory.EnumerateFiles(SubtitleSearchPath, customPartData.audioClipName + ".srt");
+                    ExcelIndex = customPartData.id.ToInt() + 1;
+                    audioFiles = Directory.EnumerateFiles(AudioSearchPath, customPartData.audioClipName + ".mp3");
+                    SubtitleFiles = Directory.EnumerateFiles(SubtitleSearchPath, customPartData.audioClipName + ".srt");
 
-				}
+                }
             }
             else
             {
-				ExcelIndex = customPartData.id.ToInt() + 1;
-				audioFiles = Directory.EnumerateFiles(AudioSearchPath, customPartData.audioClipName + ".mp3");
-				SubtitleFiles = Directory.EnumerateFiles(SubtitleSearchPath, customPartData.audioClipName + ".srt");
-			}
+                ExcelIndex = customPartData.id.ToInt() + 1;
+                audioFiles = Directory.EnumerateFiles(AudioSearchPath, customPartData.audioClipName + ".mp3");
+                SubtitleFiles = Directory.EnumerateFiles(SubtitleSearchPath, customPartData.audioClipName + ".srt");
+            }
 
+            string[] textTxt = File.ReadAllLines(SubtitleFiles.First());
+            selectSrt.Clear();
+            foreach (string line in textTxt)
+            {
+                // 跳过序号行(纯数字)
+                if (int.TryParse(line.Trim(), out _))
+                    continue;
 
+                // 跳过时间轴行(包含 -->)
+                if (line.Contains("-->"))
+                    continue;
 
-			SubtitleName.text = Path.GetFileName(SubtitleFiles.First());
-			AudioName.text = Path.GetFileName(audioFiles.First());
-		}
-		#endregion
+                // 跳过空行
+                if (string.IsNullOrWhiteSpace(line))
+                    continue;
 
-		#region 名称修改
+                // 添加文本行
+                selectSrt.AppendLine(line);
+            }
+            PromptMessage.text = selectSrt.ToString();
+
+            SubtitleName.text = Path.GetFileName(SubtitleFiles.First());
+            AudioName.text = Path.GetFileName(audioFiles.First());
+        }
+        #endregion
+
+        #region 名称修改
 
-		public bool isRepetitionName(string tmpStr)
+        public bool isRepetitionName(string tmpStr)
         {
-			CustomPartData customPartData = DAL.Instance.Get<DeviceOfPartDataProxy>().GetCustomByEditPartName(tmpStr);
-			if (customPartData != null)
-				return true;
+            CustomPartData customPartData = DAL.Instance.Get<DeviceOfPartDataProxy>().GetCustomByEditPartName(tmpStr);
+            if (customPartData != null)
+                return true;
 
-			customPartData = DAL.Instance.Get<DeviceOfPartDataProxy>().GetCustomByPartName(tmpStr);
-			PartDataInfo partDataInfo = DAL.Instance.Get<DeviceOfPartDataProxy>().GetPartInfoByPartName(tmpStr);
+            customPartData = DAL.Instance.Get<DeviceOfPartDataProxy>().GetCustomByPartName(tmpStr);
+            PartDataInfo partDataInfo = DAL.Instance.Get<DeviceOfPartDataProxy>().GetPartInfoByPartName(tmpStr);
 
-			if (customPartData != null || partDataInfo != null)
-				return true;
+            if (customPartData != null || partDataInfo != null)
+                return true;
 
-			return false;
+            return false;
         }
 
-		private void SaveNameBtnOnClick()
-		{
-			string tmpStr = PartNameEditInput.textComponent.text;
+        private void SaveNameBtnOnClick()
+        {
+            string tmpStr = PartNameEditInput.textComponent.text;
 
-			if (string.IsNullOrEmpty(tmpStr))
-			{
-				PromptMessage.text = "输入为空,请检查";
-				return;
-			}
+            if (string.IsNullOrEmpty(tmpStr))
+            {
+                PromptMessage.text = "输入为空,请检查";
+                return;
+            }
             if (isRepetitionName(tmpStr))
             {
-				PromptMessage.text = "修改名称重复,请检查";
-				return;
-			}
-            
-
-			using (ExcelPackage excelPackage = new ExcelPackage(new FileInfo(ConfigSerachPath)))
-			{
-				ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1];
-				worksheet.Cells[ExcelIndex, 4].Value = tmpStr;
-				excelPackage.Save();
-			}
-
-			DAL.Instance.Get<DeviceOfPartDataProxy>().ReadStepMsgInfoFromTable(DeviceController.instance.DeviceName);
-			DAL.Instance.Get<DeviceOfPartDataProxy>().ReadCustomInfoFromTable(DeviceController.instance.DeviceName);
-			DAL.Instance.Get<DeviceOfPartDataProxy>().CoverTableInfos();
-
-			PromptMessage.text = "";
-			PartNameEditInput.text = "";
-			SelectItem.TitleText.text = tmpStr;
-			SelectItem.partInfo.partName = tmpStr;
-			SelectItem.partInfo.partMark.gameObject.name = tmpStr;
-			PartName.text = tmpStr;
-
-
-			PartName.gameObject.SetActive(true);
-			PartNameEditInput.gameObject.SetActive(false);
-			SaveEditBtn.gameObject.SetActive(false);
-			ExitEditBtn.gameObject.SetActive(false);
-
-			SetBtnInteractable(true);
-			SaveEditBtn.onClick.RemoveAllListeners();
-			PromptMessage.text = $"当前选择物体为 {SelectItem.TitleText.text}";
-			CustomState = CustomPanelBtnkState.NoOnclick;
-		}
-		#endregion
-
-		#region 音频修改
-
-		private string audioPath = "", subtitlePath = "";
-
-		IEnumerator DelayCoroutine(string tmpFilePath ,string title, string defaultPath, string extension, string targetPath)
-		{
-			yield return new WaitForSeconds(0.2f);
-			string tmpFileName = Path.GetFileName(tmpFilePath);
-			if (tmpFileName == null)
-			{
-				PromptMessage.text = "文件资源获取有误,请检查";
-				yield return null;
-			}
-
-			if (targetPath.Equals(AudioSearchPath))
-			{
-				audioPath = tmpFilePath;
-				AudioName.text = tmpFileName;
-			}
-
-			if (targetPath.Equals(SubtitleSearchPath))
-			{
-				subtitlePath = tmpFilePath;
-				SubtitleName.text = tmpFileName;
-			}
-
-			if (AudioName.text.Substring(0, AudioName.text.LastIndexOf('.')).Equals(SubtitleName.text.Substring(0, SubtitleName.text.LastIndexOf('.'))))//如果改一个之后,名字相同
-			{
-				ifSaveFileChange = true;
-				SaveEditBtn.interactable = true;
-				PromptMessage.text = "请保持音频及字幕文件名称相同。\n 当前可以保存修改内容";
+                PromptMessage.text = "修改名称重复,请检查";
+                return;
+            }
+
+
+            using (ExcelPackage excelPackage = new ExcelPackage(new FileInfo(ConfigSerachPath)))
+            {
+                ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1];
+                worksheet.Cells[ExcelIndex, 4].Value = tmpStr;
+                excelPackage.Save();
+            }
+
+            DAL.Instance.Get<DeviceOfPartDataProxy>().ReadStepMsgInfoFromTable(DeviceController.instance.DeviceName);
+            DAL.Instance.Get<DeviceOfPartDataProxy>().ReadCustomInfoFromTable(DeviceController.instance.DeviceName);
+            DAL.Instance.Get<DeviceOfPartDataProxy>().CoverTableInfos();
+
+            PromptMessage.text = "";
+            PartNameEditInput.text = "";
+            SelectItem.TitleText.text = tmpStr;
+            SelectItem.partInfo.partName = tmpStr;
+            SelectItem.partInfo.partMark.gameObject.name = tmpStr;
+            PartName.text = tmpStr;
+
+
+            PartName.gameObject.SetActive(true);
+            PartNameEditInput.gameObject.SetActive(false);
+            SaveEditBtn.gameObject.SetActive(false);
+            ExitEditBtn.gameObject.SetActive(false);
+
+            SetBtnInteractable(true);
+            SaveEditBtn.onClick.RemoveAllListeners();
+            PromptMessage.text = $"当前选择物体为 {SelectItem.TitleText.text}";
+            CustomState = CustomPanelBtnkState.NoOnclick;
+        }
+        #endregion
+
+        #region 音频修改
+
+        private string audioPath = "", subtitlePath = "";
+
+        IEnumerator DelayCoroutine(string tmpFilePath, string title, string defaultPath, string extension, string targetPath)
+        {
+            yield return new WaitForSeconds(0.2f);
+            string tmpFileName = Path.GetFileName(tmpFilePath);
+            if (tmpFileName == null)
+            {
+                PromptMessage.text = "文件资源获取有误,请检查";
+                yield return null;
+            }
+
+            if (targetPath.Equals(AudioSearchPath))
+            {
+                audioPath = tmpFilePath;
+                AudioName.text = tmpFileName;
+            }
+
+            if (targetPath.Equals(SubtitleSearchPath))
+            {
+                subtitlePath = tmpFilePath;
+                SubtitleName.text = tmpFileName;
+            }
+
+            if (AudioName.text.Substring(0, AudioName.text.LastIndexOf('.')).Equals(SubtitleName.text.Substring(0, SubtitleName.text.LastIndexOf('.'))))//如果改一个之后,名字相同
+            {
+                ifSaveFileChange = true;
+                SaveEditBtn.interactable = true;
+                PromptMessage.text = "请保持音频及字幕文件名称相同。\n 当前可以保存修改内容";
+            }
+            else
+            {
+                SaveEditBtn.interactable = false;
+                ifSaveFileChange = false;
+                PromptMessage.text = "请保持音频及字幕文件名称相同。\n 请继续修改内容以保持媒体资源名称相同";
+            }
+
+        }
+
+        /// <summary>
+        /// 选择外部资源文件
+        /// </summary>
+        /// <param name="title">文件对话框标题</param>
+        /// <param name="defaultPath">文件对话框默认路径</param>
+        /// <param name="extension">文件默认格式</param>
+        /// <returns></returns>
+        private void SelectResourceAndCopyFile(string title, string defaultPath, string extension, string targetPath)
+        {
+            FileDialogHelper helper = new FileDialogHelper();
+            Action<FileOpMsg> callBack = HandleFileSelection;
+            string tmpFilePath = helper.SelectFile(callBack, extension);
+            //string tmpFilePath = helper.OpenWindowsFileDialog(title, defaultPath, extension);
+            StartCoroutine(DelayCoroutine(tmpFilePath, title, defaultPath, extension, targetPath));
+        }
+
+        private void HandleFileSelection(FileOpMsg result)
+        {
+            if (result.success)
+            {
+                if (!string.IsNullOrEmpty(result.msg))
+                {
+                    Debug.Log($"成功选择: {result.msg}");
+                }
+                else
+                {
+                    Debug.Log("选择取消");
+                }
+            }
+            else
+            {
+                Debug.LogError($"错误: {result.msg}");
+            }
+        }
+
+        private void SaveResourceBtnOnClick()
+        {
+            if (!ifSaveFileChange)
+                return;
+
+            FileDialogHelper helper = new FileDialogHelper();
+            if (!string.IsNullOrEmpty(audioPath))
+                helper.CopySelectFile(audioPath, AudioSearchPath);
+            if (!string.IsNullOrEmpty(subtitlePath))
+                helper.CopySelectFile(subtitlePath, SubtitleSearchPath);
+
+            string tmpStr = AudioName.text;
+
+            using (ExcelPackage excelPackage = new ExcelPackage(new FileInfo(ConfigSerachPath)))
+            {
+                ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1];
+                worksheet.Cells[ExcelIndex, 3].Value = tmpStr.Split('.')[0];
+                excelPackage.Save();
+            }
+            DAL.Instance.Get<DeviceOfPartDataProxy>().ReadStepMsgInfoFromTable(DeviceController.instance.DeviceName);
+            DAL.Instance.Get<DeviceOfPartDataProxy>().ReadCustomInfoFromTable(DeviceController.instance.DeviceName);
+            DAL.Instance.Get<DeviceOfPartDataProxy>().CoverTableInfos();
+
+            subtitlePath = audioPath = "";
+
+
+            AudioEditBtn.gameObject.SetActive(false);
+            SubtitleEditBtn.gameObject.SetActive(false);
+            SaveEditBtn.gameObject.SetActive(false);
+            ExitEditBtn.gameObject.SetActive(false);
+
+            SetBtnInteractable(true);
+            SaveEditBtn.onClick.RemoveAllListeners();
+            PromptMessage.text = $"当前选择物体为 {SelectItem.TitleText.text}";
+            CustomState = CustomPanelBtnkState.NoOnclick;
+
+        }
+        #endregion
+
+        #region 层级修改
+
+        public bool ifChangeInChild(CustomItem tmpItem)
+        {
+            foreach (CustomItem item in tmpItem.childCustomInfo)
+            {
+
+                if (item.TitleText.text.Equals(SelectNewParent.TitleText.text))
+                {
+                    PromptMessage.text = $"请先将子层级部件上移\n禁止直接将父层级下移至其子层级";
+                    return false;  // 找到匹配,返回 false
+                }
+
+                if (!ifChangeInChild(item))
+                {
+                    return false;  // 子项中找到匹配,返回 false
+                }
+            }
+            return true;  // 所有子项都没有匹配,返回 true
+        }
+
+        public void SaveLayerBtnOnClick()
+        {
+
+            if (SelectNewParent == null)
+                return;
+
+            if (!ifChangeInChild(SelectItem))
+                return;
+
+            ChangeLayer();
+            IFChangeLayer = false;
+            SelectNewParent.TitleText.color = Color.white;
+            SelectNewParent = null;
+
+            SaveEditBtn.gameObject.SetActive(false);
+            ExitEditBtn.gameObject.SetActive(false);
+
+            SetBtnInteractable(true);
+            SaveEditBtn.onClick.RemoveAllListeners();
+            PromptMessage.text = $"当前选择物体为 {SelectItem.TitleText.text}";
+            CustomState = CustomPanelBtnkState.NoOnclick;
+        }
+
+        public void ChangeLayer()
+        {
+
+            int TrIndex = SelectItem.transform.GetSiblingIndex();//获取在编辑器的同级索引
+            int TrParentIndex = SelectNewParent.transform.GetSiblingIndex();//获取新父级在编辑器的同级索引
+            if (TrParentIndex < TrIndex) TrParentIndex++;
+
+            SelectItem.level = SelectNewParent.level + 1;
+            SelectItem.transform.SetSiblingIndex(SelectItem.transform.GetSiblingIndex() + TrParentIndex - TrIndex);
+            SelectItem.Position.GetComponent<RectTransform>().anchoredPosition = new Vector3(10 * (SelectItem.level), 0, 0);
+            ChangeTranform(SelectItem, TrParentIndex - TrIndex);
+
+            int tmpIndex = SelectItem.parentItem.childCustomInfo.IndexOf(SelectItem);//获取在列表中的索引
+            SelectItem.parentItem.childCustomInfo.RemoveAt(tmpIndex);
+
+            tmpIndex = SelectItem.parentItem.partInfo.partMark.m_ChildPartMarks.IndexOf(SelectItem.partInfo.partMark);
+            SelectItem.parentItem.partInfo.partMark.m_ChildPartMarks.RemoveAt(tmpIndex);
+
+            SelectItem.partInfo.partMark.transform.SetParent(SelectNewParent.partInfo.partMark.transform);
+            SelectNewParent.partInfo.partMark.m_ChildPartMarks.Add(SelectItem.partInfo.partMark);
+
+            SelectNewParent.childCustomInfo.Add(SelectItem);
+            SelectItem.parentItem = SelectNewParent;
+
+
+            //判断原父级和现有父级是否显示图标
+            if (SelectNewParent.childCustomInfo.Count > 0)
+            {
+                SelectNewParent.UnExpandBtn.gameObject.SetActive(true);
             }
             else
             {
-				SaveEditBtn.interactable = false;
-				ifSaveFileChange = false;
-				PromptMessage.text = "请保持音频及字幕文件名称相同。\n 请继续修改内容以保持媒体资源名称相同";
-			}
-
-		}
-
-		/// <summary>
-		/// 选择外部资源文件
-		/// </summary>
-		/// <param name="title">文件对话框标题</param>
-		/// <param name="defaultPath">文件对话框默认路径</param>
-		/// <param name="extension">文件默认格式</param>
-		/// <returns></returns>
-		private void SelectResourceAndCopyFile(string title, string defaultPath, string extension, string targetPath)
-		{
-			FileDialogHelper helper = new FileDialogHelper();
-			Action<FileOpMsg> callBack = HandleFileSelection;
-			string tmpFilePath = helper.SelectFile(callBack, extension);
-			//string tmpFilePath = helper.OpenWindowsFileDialog(title, defaultPath, extension);
-			StartCoroutine(DelayCoroutine(tmpFilePath, title, defaultPath, extension, targetPath));
-		}
-
-		private void HandleFileSelection(FileOpMsg result)
-		{
-			if (result.success)
-			{
-				if (!string.IsNullOrEmpty(result.msg))
-				{
-					Debug.Log($"成功选择: {result.msg}");
-				}
-				else
-				{
-					Debug.Log("选择取消");
-				}
-			}
-			else
-			{
-				Debug.LogError($"错误: {result.msg}");
-			}
-		}
-
-		private void SaveResourceBtnOnClick()
+                SelectNewParent.ExpandBtn.gameObject.SetActive(false);
+                SelectNewParent.UnExpandBtn.gameObject.SetActive(false);
+            }
+
+            SelectNewParent.ExpandChildPartItem();
+
+
+        }
+
+        public void ChangeTranform(CustomItem tmpCustomItem, int ChuangNum)
         {
-			if (!ifSaveFileChange)
-				return;
-
-			FileDialogHelper helper = new FileDialogHelper();
-			if (!string.IsNullOrEmpty(audioPath))
-				helper.CopySelectFile(audioPath, AudioSearchPath);
-			if (!string.IsNullOrEmpty(subtitlePath))
-				helper.CopySelectFile(subtitlePath, SubtitleSearchPath);
-
-			string tmpStr = AudioName.text;
-
-			using (ExcelPackage excelPackage = new ExcelPackage(new FileInfo(ConfigSerachPath)))
-			{
-				ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1];
-				worksheet.Cells[ExcelIndex, 3].Value = tmpStr.Split('.')[0];
-				excelPackage.Save();
-			}
-			DAL.Instance.Get<DeviceOfPartDataProxy>().ReadStepMsgInfoFromTable(DeviceController.instance.DeviceName);
-			DAL.Instance.Get<DeviceOfPartDataProxy>().ReadCustomInfoFromTable(DeviceController.instance.DeviceName);
-			DAL.Instance.Get<DeviceOfPartDataProxy>().CoverTableInfos();
-
-			subtitlePath = audioPath = "";
-			
-
-			AudioEditBtn.gameObject.SetActive(false);
-			SubtitleEditBtn.gameObject.SetActive(false);
-			SaveEditBtn.gameObject.SetActive(false);
-			ExitEditBtn.gameObject.SetActive(false);
-
-			SetBtnInteractable(true);
-			SaveEditBtn.onClick.RemoveAllListeners();
-			PromptMessage.text = $"当前选择物体为 {SelectItem.TitleText.text}";
-			CustomState = CustomPanelBtnkState.NoOnclick;
-			
-		}
-		#endregion
-
-		#region 层级修改
-
-		public bool ifChangeInChild(CustomItem tmpItem)
-		{
-			foreach (CustomItem item in tmpItem.childCustomInfo)
-			{
-			
-				if (item.TitleText.text.Equals(SelectNewParent.TitleText.text))
-				{
-					PromptMessage.text = $"请先将子层级部件上移\n禁止直接将父层级下移至其子层级";
-					return false;  // 找到匹配,返回 false
-				}
-
-				if (!ifChangeInChild(item))
-				{
-					return false;  // 子项中找到匹配,返回 false
-				}
-			}
-			return true;  // 所有子项都没有匹配,返回 true
-		}
-
-		public void SaveLayerBtnOnClick()
+            for (int i = 0; i < tmpCustomItem.childCustomInfo.Count; i++)
+            {
+                Transform tmpTr = tmpCustomItem.childCustomInfo[i].transform;
+                tmpTr.SetSiblingIndex(tmpTr.GetSiblingIndex() + ChuangNum);
+                tmpCustomItem.childCustomInfo[i].level = tmpCustomItem.level + 1;
+                tmpCustomItem.childCustomInfo[i].Position.GetComponent<RectTransform>().anchoredPosition = new Vector3(10 * (tmpCustomItem.level + 1), 0, 0);
+                ChangeTranform(tmpCustomItem.childCustomInfo[i], ChuangNum);
+            }
+        }
+        #endregion
+
+        #region 取消及保存编辑
+
+        /// <summary> 取消编辑按钮 </summary>
+        private void ExitBtnOnclick()
         {
-			
-			if (SelectNewParent == null )
-				return;
-
-			if (! ifChangeInChild(SelectItem))
-				return;
-
-			ChangeLayer();
-			IFChangeLayer = false;
-			SelectNewParent.TitleText.color = Color.white;
-			SelectNewParent = null;
-
-			SaveEditBtn.gameObject.SetActive(false);
-			ExitEditBtn.gameObject.SetActive(false);
-
-			SetBtnInteractable(true);
-			SaveEditBtn.onClick.RemoveAllListeners();
-			PromptMessage.text = $"当前选择物体为 {SelectItem.TitleText.text}";
-			CustomState = CustomPanelBtnkState.NoOnclick;
-		}
-
-		public void ChangeLayer()
-		{
-
-			int TrIndex = SelectItem.transform.GetSiblingIndex();//获取在编辑器的同级索引
-			int TrParentIndex = SelectNewParent.transform.GetSiblingIndex();//获取新父级在编辑器的同级索引
-			if (TrParentIndex < TrIndex) TrParentIndex++;
-
-			SelectItem.level = SelectNewParent.level + 1;
-			SelectItem.transform.SetSiblingIndex(SelectItem.transform.GetSiblingIndex() + TrParentIndex - TrIndex);
-			SelectItem.Position.GetComponent<RectTransform>().anchoredPosition = new Vector3(10 * (SelectItem.level), 0, 0);
-			ChangeTranform(SelectItem, TrParentIndex - TrIndex);
-
-			int tmpIndex = SelectItem.parentItem.childCustomInfo.IndexOf(SelectItem);//获取在列表中的索引
-			SelectItem.parentItem.childCustomInfo.RemoveAt(tmpIndex);
-
-			tmpIndex = SelectItem.parentItem.partInfo.partMark.m_ChildPartMarks.IndexOf(SelectItem.partInfo.partMark);
-			SelectItem.parentItem.partInfo.partMark.m_ChildPartMarks.RemoveAt(tmpIndex);
-
-			SelectItem.partInfo.partMark.transform.SetParent(SelectNewParent.partInfo.partMark.transform);
-			SelectNewParent.partInfo.partMark.m_ChildPartMarks.Add(SelectItem.partInfo.partMark);
-
-			SelectNewParent.childCustomInfo.Add(SelectItem);
-			SelectItem.parentItem = SelectNewParent;
-
-
-			//判断原父级和现有父级是否显示图标
-			if (SelectNewParent.childCustomInfo.Count > 0)
-			{
-				SelectNewParent.UnExpandBtn.gameObject.SetActive(true);
-			}
-			else
-			{
-				SelectNewParent.ExpandBtn.gameObject.SetActive(false);
-				SelectNewParent.UnExpandBtn.gameObject.SetActive(false);
-			}
-
-			SelectNewParent.ExpandChildPartItem();
-
-
-		}
-
-		public void ChangeTranform(CustomItem tmpCustomItem, int ChuangNum)
-		{
-			for (int i = 0; i < tmpCustomItem.childCustomInfo.Count; i++)
-			{
-				Transform tmpTr = tmpCustomItem.childCustomInfo[i].transform;
-				tmpTr.SetSiblingIndex(tmpTr.GetSiblingIndex() + ChuangNum);
-				tmpCustomItem.childCustomInfo[i].level = tmpCustomItem.level + 1;
-				tmpCustomItem.childCustomInfo[i].Position.GetComponent<RectTransform>().anchoredPosition = new Vector3(10 * (tmpCustomItem.level + 1), 0, 0);
-				ChangeTranform(tmpCustomItem.childCustomInfo[i], ChuangNum);
-			}
-		}
-		#endregion
-
-		#region 取消及保存编辑
-
-		/// <summary> 取消编辑按钮 </summary>
-		private void ExitBtnOnclick()
-		{
-			switch (CustomState)
-			{
-				case CustomPanelBtnkState.NameEdit:
-					PartNameEditInput.text = "";
-
-					PartNameBtn.interactable = true;
-					PartName.gameObject.SetActive(true);
-					PartNameEditInput.gameObject.SetActive(false);
-					break;
-				case CustomPanelBtnkState.ResourceEdit:
-					subtitlePath = audioPath = "";
-					ResourcesBtn.interactable = true;
-					getSourcePath(SelectItem.TitleText.text);
-					AudioEditBtn.gameObject.SetActive(false);
-					SubtitleEditBtn.gameObject.SetActive(false);
-					break;
-				case CustomPanelBtnkState.LayerEdit:
-
-					IFChangeLayer = false;
+            switch (CustomState)
+            {
+                case CustomPanelBtnkState.NameEdit:
+                    PartNameEditInput.text = "";
+
+                    PartNameBtn.interactable = true;
+                    PartName.gameObject.SetActive(true);
+                    PartNameEditInput.gameObject.SetActive(false);
+                    break;
+                case CustomPanelBtnkState.ResourceEdit:
+                    subtitlePath = audioPath = "";
+                    ResourcesBtn.interactable = true;
+                    getSourcePath(SelectItem.TitleText.text);
+                    AudioEditBtn.gameObject.SetActive(false);
+                    SubtitleEditBtn.gameObject.SetActive(false);
+                    break;
+                case CustomPanelBtnkState.LayerEdit:
+
+                    IFChangeLayer = false;
 
                     if (SelectNewParent != null)
                     {
-						SelectNewParent.TitleText.color = Color.white;
-						SelectNewParent = null;
-					}
+                        SelectNewParent.TitleText.color = Color.white;
+                        SelectNewParent = null;
+                    }
 
 
-					SaveEditBtn.onClick.RemoveAllListeners();
-					break;
-			}
+                    SaveEditBtn.onClick.RemoveAllListeners();
+                    break;
+            }
 
-			SetBtnInteractable(true);
+            SetBtnInteractable(true);
 
-			PromptMessage.text = $"当前选择物体为 {SelectItem.TitleText.text}";
-			
-			CustomState = CustomPanelBtnkState.NoOnclick;
-			SaveEditBtn.gameObject.SetActive(false);
-			ExitEditBtn.gameObject.SetActive(false);
-		}
+            PromptMessage.text = $"当前选择物体为 {SelectItem.TitleText.text}";
+
+            CustomState = CustomPanelBtnkState.NoOnclick;
+            SaveEditBtn.gameObject.SetActive(false);
+            ExitEditBtn.gameObject.SetActive(false);
+        }
 
         #endregion
 
         #region 更新列表
 
-		public void RefreshPartItemList()
+        public void RefreshPartItemList()
         {
 
-			DAL.Instance.Get<DeviceOfPartDataProxy>().ReadStepMsgInfoFromTable(DeviceController.instance.DeviceName);
-			UIKit.GetPanel<PartListPanel>().Data.m_PartInfo = DeviceController.instance.GetDevicePartInfos(DeviceController.instance.transform.GetComponent<PartMark>());
+            DAL.Instance.Get<DeviceOfPartDataProxy>().ReadStepMsgInfoFromTable(DeviceController.instance.DeviceName);
+            UIKit.GetPanel<PartListPanel>().Data.m_PartInfo = DeviceController.instance.GetDevicePartInfos(DeviceController.instance.transform.GetComponent<PartMark>());
 
-			PartItem firstItem = UIKit.GetPanel<PartListPanel>().Content.GetComponentsInChildren<PartItem>(true)[0];
-			firstItem.gameObject.SetActive(true);
-			int index = 0;
-			firstItem.refreshData(UIKit.GetPanel<PartListPanel>().Data.m_PartInfo,ref index);
-			firstItem.OnSelectToggleChange(true, true);
-			firstItem.UnExpandChildPartItem(firstItem);
-			firstItem.ExpandChildPartItem();
+            PartItem firstItem = UIKit.GetPanel<PartListPanel>().Content.GetComponentsInChildren<PartItem>(true)[0];
+            firstItem.gameObject.SetActive(true);
+            int index = 0;
+            firstItem.refreshData(UIKit.GetPanel<PartListPanel>().Data.m_PartInfo, ref index);
+            firstItem.OnSelectToggleChange(true, true);
+            firstItem.UnExpandChildPartItem(firstItem);
+            firstItem.ExpandChildPartItem();
 
-		}
+        }
 
-		public void RefreshCustomItemList()
+        public void RefreshCustomItemList()
         {
-			DAL.Instance.Get<DeviceOfPartDataProxy>().ReadStepMsgInfoFromTable(DeviceController.instance.DeviceName);
-
-			CustomItem customExample = UIKit.GetPanel<CustomPartPanel>().Content.GetComponentsInChildren<CustomItem>(true)[0];
-			customExample.gameObject.SetActive(true);
-			int index = 0;
-			customExample.refreshData(DeviceController.instance.GetDevicePartInfos(DeviceController.instance.transform.GetComponent<PartMark>()), ref index);
-			customExample.ExpandChildPartItem();
-
-			if (SelectItem != null)
-				SelectItem.TitleText.color = Color.white;
-			PartName.text = DeviceController.instance.DeviceName;
-			AudioName.text = "";
-			SubtitleName.text = "";
-		}
+            DAL.Instance.Get<DeviceOfPartDataProxy>().ReadStepMsgInfoFromTable(DeviceController.instance.DeviceName);
+
+            CustomItem customExample = UIKit.GetPanel<CustomPartPanel>().Content.GetComponentsInChildren<CustomItem>(true)[0];
+            customExample.gameObject.SetActive(true);
+            int index = 0;
+            customExample.refreshData(DeviceController.instance.GetDevicePartInfos(DeviceController.instance.transform.GetComponent<PartMark>()), ref index);
+            customExample.ExpandChildPartItem();
+
+            if (SelectItem != null)
+                SelectItem.TitleText.color = Color.white;
+            PartName.text = DeviceController.instance.DeviceName;
+            AudioName.text = "";
+            SubtitleName.text = "";
+        }
 
-		#endregion
+        #endregion
 
-		public void InputFieldSelect()
+        public void InputFieldSelect()
         {
-			PartNameBtn.gameObject.SetActive(true);
+            PartNameBtn.gameObject.SetActive(true);
         }
 
-		protected override void OnOpen(IUIData uiData = null)
-		{
-			DeviceController.instance.ifShowCoustom = false;
+        protected override void OnOpen(IUIData uiData = null)
+        {
+            DeviceController.instance.ifShowCoustom = false;
 
-		}
+        }
 
         protected override void OnHide()
         {
-			FileInfo tmpFileInfo = new FileInfo(ConfigSerachPath);
-			if (!tmpFileInfo.Exists)
-				return;
+            FileInfo tmpFileInfo = new FileInfo(ConfigSerachPath);
+            if (!tmpFileInfo.Exists)
+                return;
 
-			DeviceController.instance.ifShowCoustom = true;
+            DeviceController.instance.ifShowCoustom = true;
 
-			DAL.Instance.Get<DeviceOfPartDataProxy>().ReadCustomInfoFromTable(DeviceController.instance.DeviceName);
-			DAL.Instance.Get<DeviceOfPartDataProxy>().CoverTableInfos();
-			RefreshPartItemList();
+            DAL.Instance.Get<DeviceOfPartDataProxy>().ReadCustomInfoFromTable(DeviceController.instance.DeviceName);
+            DAL.Instance.Get<DeviceOfPartDataProxy>().CoverTableInfos();
+            RefreshPartItemList();
 
-			foreach (CustomItem item in editObjs)
-			{
+            foreach (CustomItem item in editObjs)
+            {
 
-				CustomPartData customPartData = DAL.Instance.Get<DeviceOfPartDataProxy>().GetCustomByEditPartName(item.TitleText.text);
-				ExcelIndex = customPartData.id.ToInt() + 1;
+                CustomPartData customPartData = DAL.Instance.Get<DeviceOfPartDataProxy>().GetCustomByEditPartName(item.TitleText.text);
+                ExcelIndex = customPartData.id.ToInt() + 1;
 
-				using (ExcelPackage excelPackage = new ExcelPackage(new FileInfo(ConfigSerachPath)))
-				{
-					ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1];
-					worksheet.Cells[ExcelIndex, 6].Value = GetAbsolutePath(item);
-					excelPackage.Save();
-				}
-			}
-		}
+                using (ExcelPackage excelPackage = new ExcelPackage(new FileInfo(ConfigSerachPath)))
+                {
+                    ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1];
+                    worksheet.Cells[ExcelIndex, 6].Value = GetAbsolutePath(item);
+                    excelPackage.Save();
+                }
+            }
+        }
 
         protected override void OnClose()
-		{
-			FileInfo tmpFileInfo = new FileInfo(ConfigSerachPath);
-			if (!tmpFileInfo.Exists)
-				return;
+        {
+            FileInfo tmpFileInfo = new FileInfo(ConfigSerachPath);
+            if (!tmpFileInfo.Exists)
+                return;
 
-			DeviceController.instance.ifShowCoustom = true;
+            DeviceController.instance.ifShowCoustom = true;
 
-			DAL.Instance.Get<DeviceOfPartDataProxy>().ReadCustomInfoFromTable(DeviceController.instance.DeviceName);
-			DAL.Instance.Get<DeviceOfPartDataProxy>().CoverTableInfos();
-			RefreshPartItemList();
+            DAL.Instance.Get<DeviceOfPartDataProxy>().ReadCustomInfoFromTable(DeviceController.instance.DeviceName);
+            DAL.Instance.Get<DeviceOfPartDataProxy>().CoverTableInfos();
+            RefreshPartItemList();
 
-			foreach (CustomItem item in editObjs)
+            foreach (CustomItem item in editObjs)
             {
 
-				CustomPartData customPartData = DAL.Instance.Get<DeviceOfPartDataProxy>().GetCustomByEditPartName(item.TitleText.text);
-				ExcelIndex = customPartData.id.ToInt() + 1;
+                CustomPartData customPartData = DAL.Instance.Get<DeviceOfPartDataProxy>().GetCustomByEditPartName(item.TitleText.text);
+                ExcelIndex = customPartData.id.ToInt() + 1;
 
-				using (ExcelPackage excelPackage = new ExcelPackage(new FileInfo(ConfigSerachPath)))
-				{
-					ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1];
-					worksheet.Cells[ExcelIndex, 6].Value = GetAbsolutePath(item);
-					excelPackage.Save();
-				}
-			}
+                using (ExcelPackage excelPackage = new ExcelPackage(new FileInfo(ConfigSerachPath)))
+                {
+                    ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1];
+                    worksheet.Cells[ExcelIndex, 6].Value = GetAbsolutePath(item);
+                    excelPackage.Save();
+                }
+            }
 
-		}
-	}
+        }
+    }
 
-	public class CustomPartData
+    public class CustomPartData
     {
-		public string id;
-		public string partName;
-		public string audioClipName;
-		public string editName;
-		public string AbsolutePath;
-		public string EditPath;
-
-		public CustomPartData( string partName,string audioClipName,string editName,string AbsolutePath,string EditPath = "")
+        public string id;
+        public string partName;
+        public string audioClipName;
+        public string editName;
+        public string AbsolutePath;
+        public string EditPath;
+
+        public CustomPartData(string partName, string audioClipName, string editName, string AbsolutePath, string EditPath = "")
         {
-			id = (DAL.Instance.Get<DeviceOfPartDataProxy>().m_CustomInfos.Count+1).ToString();
-			this.partName = partName;
-			this.audioClipName = audioClipName;
-			if (string.IsNullOrEmpty(editName))
-				this.editName = editName;
-			else 
-				this.editName = partName;
-			this.AbsolutePath = AbsolutePath;
-			this.EditPath = EditPath;
-		}
-		public CustomPartData()
+            id = (DAL.Instance.Get<DeviceOfPartDataProxy>().m_CustomInfos.Count + 1).ToString();
+            this.partName = partName;
+            this.audioClipName = audioClipName;
+            if (string.IsNullOrEmpty(editName))
+                this.editName = editName;
+            else
+                this.editName = partName;
+            this.AbsolutePath = AbsolutePath;
+            this.EditPath = EditPath;
+        }
+        public CustomPartData()
         {
-			id = "id";
-			partName = "partName";
-			audioClipName = "audioClipName";
-			editName = "editName";
-			AbsolutePath = "AbsolutePath";
-			EditPath = "EditPath";
-		}
-	}	
-		
+            id = "id";
+            partName = "partName";
+            audioClipName = "audioClipName";
+            editName = "editName";
+            AbsolutePath = "AbsolutePath";
+            EditPath = "EditPath";
+        }
+    }
+
 }

+ 1 - 1
ModeDisplay/Assets/Scripts/UI/QFramework/CustomPartPanel/CustomItem.Designer.cs

@@ -1,5 +1,5 @@
 /****************************************************************************
- * 2025.11 DESKTOP-1W138CQ
+ * 2025.12 CHIVA
  ****************************************************************************/
 
 using UnityEngine;

+ 1 - 1
ModeDisplay/Assets/Scripts/UI/QFramework/EditWindowsPlane.cs

@@ -97,7 +97,7 @@ namespace QFramework
 			{
 				// 界岺꺄렴깻할백쥐
 				MoveItemManager.instance.HaltAndResetForEdit();
-				UpdateStatus("친駕학뻣:긍서친駕(錦맣糠埼)");
+				UpdateStatus("친駕학뻣:긍서친駕(錦맣陋토糠埼)");
 				text.text = "긍서";
 			}
 			else

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

@@ -5,7 +5,7 @@ using QFramework;
 
 namespace QFramework
 {
-	// Generate Id:f1f4e978-63f7-4e6c-b665-25a24dc746e2
+	// Generate Id:371a782c-9724-481d-b9ff-fd7aa26dc7f8
 	public partial class PartListPanel
 	{
 		public const string Name = "PartListPanel";
@@ -34,6 +34,8 @@ namespace QFramework
 		public UnityEngine.UI.Button RevokeAllBtn;
 		[SerializeField]
 		public UnityEngine.UI.Button AutoDisassemblyBtn;
+		[SerializeField]
+		public UnityEngine.UI.Button EquipmentEditorBtn;
 		
 		private PartListPanelData mPrivateData = null;
 		
@@ -51,6 +53,7 @@ namespace QFramework
 			RevokeBtn = null;
 			RevokeAllBtn = null;
 			AutoDisassemblyBtn = null;
+			EquipmentEditorBtn = null;
 			
 			mData = null;
 		}

+ 8 - 6
ModeDisplay/Assets/Scripts/UI/QFramework/PartListPanel.cs

@@ -25,7 +25,7 @@ namespace QFramework
 
             ExpandBtn.onClick.AddListener(OnExpandBtnClick);
 
-            UIKit.OpenPanel<TitlePanel>(UILevel.Bg,new TitlePanelData() { TitleName = DeviceController.instance.DeviceName });
+            UIKit.OpenPanel<TitlePanel>(UILevel.Bg, new TitlePanelData() { TitleName = DeviceController.instance.DeviceName });
 
             HidetBtn.onClick.AddListener(OnHideBtnClick);
 
@@ -37,6 +37,8 @@ namespace QFramework
 
             AutoDisassemblyBtn.onClick.AddListener(OnAutoDisassemblyBtnClick);
 
+            EquipmentEditorBtn.onClick.AddListener(() => { UIKit.OpenPanel<CustomPartPanel>(); });
+
             OnTransflectiveBtnClick();
 
             InitData();
@@ -81,11 +83,11 @@ namespace QFramework
             HalfCamera();
         }
 
-        public void CloseAllPartItem() 
+        public void CloseAllPartItem()
         {
             if (SelfPartItem != null)
             {
-                SelfPartItem.OnSelectToggleChange(false,true);
+                SelfPartItem.OnSelectToggleChange(false, true);
             }
         }
 
@@ -191,7 +193,7 @@ namespace QFramework
                 }
             }
 
-             
+
         }
 
         /// <summary>
@@ -201,7 +203,7 @@ namespace QFramework
         {
             AudioHelper.AudioStop();
 
-            
+
 
             ResLoader resLoader = ResLoader.Allocate();
 
@@ -209,7 +211,7 @@ namespace QFramework
 
             CurrentAutoDisassemblyObj = Instantiate(tmpPrefab);
 
-            CameraSurround.instance.SetCameraPosition(DeviceController.instance.transform, true,false,true);
+            CameraSurround.instance.SetCameraPosition(DeviceController.instance.transform, true, false, true);
 
             MoveItemManager.instance.SetModelActive(false);
 

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

@@ -1,5 +1,5 @@
 /****************************************************************************
- * 2025.8 CHIVA
+ * 2025.12 CHIVA
  ****************************************************************************/
 
 using UnityEngine;

BIN
ModeDisplay/Assets/StreamingAssets/Config/内部结构设备自定义配置/联合风机.xlsx


+ 7 - 0
ModeDisplay/Assets/StreamingAssets/Config/内部结构设备自定义配置/联合风机.xlsx.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e937e447a213fb749a66aff77e88608f
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
ModeDisplay/Assets/StreamingAssets/Config/内部结构设备自定义配置/金风GW109-2500永磁直驱风力发电机组.xlsx


BIN
ModeDisplay/Assets/StreamingAssets/金风GW109-2500永磁直驱风力发电机组.xlsx


Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov