diff --git a/Assets/Resources/Prefabs/UI/List/TreeList.prefab b/Assets/Resources/Prefabs/UI/List/TreeList.prefab
index ba1a3ab1..5755ce5f 100644
--- a/Assets/Resources/Prefabs/UI/List/TreeList.prefab
+++ b/Assets/Resources/Prefabs/UI/List/TreeList.prefab
@@ -1,6 +1,6 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
---- !u!1 &155533778929081386
+--- !u!1 &1462360020605571893
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -8,545 +8,52 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- - component: {fileID: 8994610988129793201}
- - component: {fileID: 1056715493304856023}
- - component: {fileID: 1268756376114614541}
- - component: {fileID: 8002563551903510981}
+ - component: {fileID: 1022765863909309765}
+ - component: {fileID: 2951520196524031467}
+ - component: {fileID: 2289736159566368719}
+ - component: {fileID: 6025781672912143612}
m_Layer: 5
- m_Name: removeTextButton
+ m_Name: Scrollbar Horizontal
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!224 &8994610988129793201
+--- !u!224 &1022765863909309765
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 155533778929081386}
+ m_GameObject: {fileID: 1462360020605571893}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 1661139593473125497}
- 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: 0, y: 0}
- m_SizeDelta: {x: 24, y: 16}
- m_Pivot: {x: 1, y: 0.5}
---- !u!222 &1056715493304856023
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 155533778929081386}
- m_CullTransparentMesh: 1
---- !u!114 &1268756376114614541
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 155533778929081386}
- 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.8, g: 0.8, b: 0.8, a: 1}
- m_RaycastTarget: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_Sprite: {fileID: 21300000, guid: 17863240a1386604e8c74d85d4a95818, 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 &8002563551903510981
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 155533778929081386}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Navigation:
- m_Mode: 3
- m_WrapAround: 0
- m_SelectOnUp: {fileID: 0}
- m_SelectOnDown: {fileID: 0}
- m_SelectOnLeft: {fileID: 0}
- m_SelectOnRight: {fileID: 0}
- m_Transition: 1
- m_Colors:
- m_NormalColor: {r: 0.8, g: 0.8, b: 0.8, a: 1}
- m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
- m_PressedColor: {r: 1, g: 1, b: 1, a: 1}
- m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
- m_DisabledColor: {r: 0.8, g: 0.8, b: 0.8, 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: 1268756376114614541}
- m_OnClick:
- m_PersistentCalls:
- m_Calls:
- - m_Target: {fileID: 0}
- m_TargetAssemblyTypeName: UVC.UI.List.ComponentList.ComponentList, Assembly-CSharp
- m_MethodName: OnClickClearText
- m_Mode: 1
- m_Arguments:
- m_ObjectArgument: {fileID: 0}
- m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
- m_IntArgument: 0
- m_FloatArgument: 0
- m_StringArgument:
- m_BoolArgument: 0
- m_CallState: 2
---- !u!1 &261240731796464661
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 4799855768651686507}
- - component: {fileID: 926843166612239537}
- - component: {fileID: 3047408605536893539}
- - component: {fileID: 8088258813693569027}
- m_Layer: 5
- m_Name: Placeholder
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &4799855768651686507
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 261240731796464661}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 6430955701886727832}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: -10, y: 0}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &926843166612239537
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 261240731796464661}
- m_CullTransparentMesh: 1
---- !u!114 &3047408605536893539
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 261240731796464661}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_text: "\uAC80\uC0C9"
- m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: 2c77cc500db5adc499bfa50030f7e8c2, type: 2}
- m_sharedMaterial: {fileID: -2285177295282439072, guid: 2c77cc500db5adc499bfa50030f7e8c2, type: 2}
- m_fontSharedMaterials: []
- m_fontMaterial: {fileID: 0}
- m_fontMaterials: []
- m_fontColor32:
- serializedVersion: 2
- rgba: 4288716960
- m_fontColor: {r: 0.627451, g: 0.627451, b: 0.627451, a: 1}
- m_enableVertexGradient: 0
- m_colorMode: 3
- m_fontColorGradient:
- topLeft: {r: 1, g: 1, b: 1, a: 1}
- topRight: {r: 1, g: 1, b: 1, a: 1}
- bottomLeft: {r: 1, g: 1, b: 1, a: 1}
- bottomRight: {r: 1, g: 1, b: 1, a: 1}
- m_fontColorGradientPreset: {fileID: 0}
- m_spriteAsset: {fileID: 0}
- m_tintAllSprites: 0
- m_StyleSheet: {fileID: 0}
- m_TextStyleHashCode: -1183493901
- m_overrideHtmlColors: 0
- m_faceColor:
- serializedVersion: 2
- rgba: 4294967295
- m_fontSize: 13
- m_fontSizeBase: 13
- m_fontWeight: 400
- m_enableAutoSizing: 0
- m_fontSizeMin: 18
- m_fontSizeMax: 72
- m_fontStyle: 2
- m_HorizontalAlignment: 1
- m_VerticalAlignment: 512
- m_textAlignment: 65535
- m_characterSpacing: 0
- m_wordSpacing: 0
- m_lineSpacing: 0
- m_lineSpacingMax: 0
- m_paragraphSpacing: 0
- m_charWidthMaxAdj: 0
- m_TextWrappingMode: 0
- m_wordWrappingRatios: 0.4
- m_overflowMode: 0
- m_linkedTextComponent: {fileID: 0}
- parentLinkedComponent: {fileID: 0}
- m_enableKerning: 0
- m_ActiveFontFeatures: 6e72656b
- m_enableExtraPadding: 1
- checkPaddingRequired: 0
- m_isRichText: 1
- m_EmojiFallbackSupport: 1
- m_parseCtrlCharacters: 1
- m_isOrthographic: 1
- m_isCullingEnabled: 0
- m_horizontalMapping: 0
- m_verticalMapping: 0
- m_uvLineOffset: 0
- m_geometrySortingOrder: 0
- m_IsTextObjectScaleStatic: 0
- m_VertexBufferAutoSizeReduction: 0
- m_useMaxVisibleDescender: 1
- m_pageToDisplay: 1
- m_margin: {x: 0, y: 0, z: 0, w: 0}
- m_isUsingLegacyAnimationComponent: 0
- m_isVolumetricText: 0
- m_hasFontAssetChanged: 0
- m_baseMaterial: {fileID: 0}
- m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
---- !u!114 &8088258813693569027
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 261240731796464661}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_IgnoreLayout: 1
- m_MinWidth: -1
- m_MinHeight: -1
- m_PreferredWidth: -1
- m_PreferredHeight: -1
- m_FlexibleWidth: -1
- m_FlexibleHeight: -1
- m_LayoutPriority: 1
---- !u!1 &590764720580716476
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 5613474474329381979}
- - component: {fileID: 6955663649739003543}
- - component: {fileID: 7985561521833800352}
- m_Layer: 5
- m_Name: Handle
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &5613474474329381979
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 590764720580716476}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 161416004204927197}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- 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}
---- !u!222 &6955663649739003543
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 590764720580716476}
- m_CullTransparentMesh: 0
---- !u!114 &7985561521833800352
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 590764720580716476}
- 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.2, g: 0.2, b: 0.2, a: 1}
- m_RaycastTarget: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_Sprite: {fileID: 0}
- m_Type: 1
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
- m_UseSpriteMesh: 0
- m_PixelsPerUnitMultiplier: 1
---- !u!1 &1092229779674337045
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1697446796394887609}
- - component: {fileID: 6940096492033927365}
- - component: {fileID: 2424698233555359630}
- m_Layer: 5
- m_Name: Handle
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &1697446796394887609
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1092229779674337045}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 1072136122685428223}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- 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}
---- !u!222 &6940096492033927365
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1092229779674337045}
- m_CullTransparentMesh: 0
---- !u!114 &2424698233555359630
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1092229779674337045}
- 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.2, g: 0.2, b: 0.2, a: 1}
- m_RaycastTarget: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_Sprite: {fileID: 0}
- m_Type: 1
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
- m_UseSpriteMesh: 0
- m_PixelsPerUnitMultiplier: 1
---- !u!1 &2651864206743669424
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 6567388883908861155}
- - component: {fileID: 4160214132252070715}
- m_Layer: 5
- m_Name: TreeList
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &6567388883908861155
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2651864206743669424}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
m_Children:
- - {fileID: 1661139593473125497}
- - {fileID: 9209122612970100190}
- m_Father: {fileID: 0}
+ - {fileID: 3097322909638401089}
+ m_Father: {fileID: 8894486403032071402}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: -40}
- m_SizeDelta: {x: 0, y: -40}
- m_Pivot: {x: 0, y: 1}
---- !u!114 &4160214132252070715
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2651864206743669424}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 7be08eb56899e2042811c8d1da0924a6, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- itemPrefab: {fileID: 4190301731963491743, guid: 3b667b13f22b81b4896e14bd416de1f7, type: 3}
- root: {fileID: 6986221832819843173}
- allowMultipleSelection: 1
- enableDragDrop: 1
---- !u!1 &4144761513685641481
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 7793457982563150253}
- - component: {fileID: 5637219084019760396}
- - component: {fileID: 1413492220820647664}
- - component: {fileID: 505480948637281615}
- m_Layer: 5
- m_Name: Scrollbar Vertical
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &7793457982563150253
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 4144761513685641481}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children:
- - {fileID: 161416004204927197}
- m_Father: {fileID: 9209122612970100190}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 1, y: 0}
- m_AnchorMax: {x: 1, y: 1}
+ m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 5, y: 0}
- m_Pivot: {x: 1, y: 1}
---- !u!222 &5637219084019760396
+ m_SizeDelta: {x: 0, y: 5}
+ m_Pivot: {x: 0, y: 0}
+--- !u!222 &2951520196524031467
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 4144761513685641481}
- m_CullTransparentMesh: 0
---- !u!114 &1413492220820647664
+ m_GameObject: {fileID: 1462360020605571893}
+ m_CullTransparentMesh: 1
+--- !u!114 &2289736159566368719
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 4144761513685641481}
+ m_GameObject: {fileID: 1462360020605571893}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
@@ -570,13 +77,175 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
---- !u!114 &505480948637281615
+--- !u!114 &6025781672912143612
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 4144761513685641481}
+ m_GameObject: {fileID: 1462360020605571893}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ 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: 2680734087760533677}
+ m_HandleRect: {fileID: 6081086258189437538}
+ m_Direction: 0
+ m_Value: 0
+ m_Size: 1
+ m_NumberOfSteps: 0
+ m_OnValueChanged:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!1 &1572880287690542826
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 3301928374361144381}
+ m_Layer: 5
+ m_Name: Sliding Area
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &3301928374361144381
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1572880287690542826}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 6234462523872176539}
+ m_Father: {fileID: 5780838202259870402}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: -20, y: -20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &1848783212353540151
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 5780838202259870402}
+ - component: {fileID: 2689031090661273458}
+ - component: {fileID: 4121319568877025449}
+ - component: {fileID: 4856300785373777908}
+ m_Layer: 5
+ m_Name: Scrollbar Vertical
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &5780838202259870402
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1848783212353540151}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 3301928374361144381}
+ m_Father: {fileID: 8894486403032071402}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 1, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 5, y: 0}
+ m_Pivot: {x: 1, y: 1}
+--- !u!222 &2689031090661273458
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1848783212353540151}
+ m_CullTransparentMesh: 0
+--- !u!114 &4121319568877025449
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1848783212353540151}
+ 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.09411765, g: 0.09411765, b: 0.09411765, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!114 &4856300785373777908
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1848783212353540151}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3}
@@ -610,8 +279,8 @@ MonoBehaviour:
m_SelectedTrigger: Highlighted
m_DisabledTrigger: Disabled
m_Interactable: 1
- m_TargetGraphic: {fileID: 7985561521833800352}
- m_HandleRect: {fileID: 5613474474329381979}
+ m_TargetGraphic: {fileID: 7428146289359687929}
+ m_HandleRect: {fileID: 6234462523872176539}
m_Direction: 2
m_Value: 0
m_Size: 1
@@ -619,7 +288,7 @@ MonoBehaviour:
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
---- !u!1 &5230957332517017859
+--- !u!1 &3011982018749398316
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -627,216 +296,71 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- - component: {fileID: 1072136122685428223}
+ - component: {fileID: 8894486403032071402}
+ - component: {fileID: 9000987459549261387}
+ - component: {fileID: 4415661564241239138}
+ - component: {fileID: 2006518343008415563}
+ - component: {fileID: 5742779717166474465}
m_Layer: 5
- m_Name: Sliding Area
+ m_Name: TreeList
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!224 &1072136122685428223
+--- !u!224 &8894486403032071402
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 5230957332517017859}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_GameObject: {fileID: 3011982018749398316}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- - {fileID: 1697446796394887609}
- m_Father: {fileID: 9168450267583407812}
+ - {fileID: 3974886479277341081}
+ - {fileID: 5780838202259870402}
+ - {fileID: 1022765863909309765}
+ m_Father: {fileID: 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, y: 0}
- m_SizeDelta: {x: -20, y: -20}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!1 &5434636498674400270
-GameObject:
+ m_AnchoredPosition: {x: 0, y: -76}
+ m_SizeDelta: {x: 0, y: -76}
+ m_Pivot: {x: 0, y: 1}
+--- !u!114 &9000987459549261387
+MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 9168450267583407812}
- - component: {fileID: 752456552382603827}
- - component: {fileID: 8146304326716143292}
- - component: {fileID: 5353790932593107132}
- m_Layer: 5
- m_Name: Scrollbar Horizontal
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &9168450267583407812
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 5434636498674400270}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children:
- - {fileID: 1072136122685428223}
- m_Father: {fileID: 9209122612970100190}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 0, y: 5}
- m_Pivot: {x: 0, y: 0}
---- !u!222 &752456552382603827
+ m_GameObject: {fileID: 3011982018749398316}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 7be08eb56899e2042811c8d1da0924a6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ itemPrefab: {fileID: 4190301731963491743, guid: 3b667b13f22b81b4896e14bd416de1f7, type: 3}
+ root: {fileID: 908297234377844233}
+ allowMultipleSelection: 1
+ enableDragDrop: 1
+--- !u!222 &4415661564241239138
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 5434636498674400270}
+ m_GameObject: {fileID: 3011982018749398316}
m_CullTransparentMesh: 1
---- !u!114 &8146304326716143292
+--- !u!114 &2006518343008415563
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 5434636498674400270}
- 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.09411765, g: 0.09411765, b: 0.09411765, a: 1}
- m_RaycastTarget: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_Sprite: {fileID: 0}
- m_Type: 1
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
- m_UseSpriteMesh: 0
- m_PixelsPerUnitMultiplier: 1
---- !u!114 &5353790932593107132
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 5434636498674400270}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Navigation:
- m_Mode: 3
- m_WrapAround: 0
- 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: 2424698233555359630}
- m_HandleRect: {fileID: 1697446796394887609}
- m_Direction: 0
- m_Value: 0
- m_Size: 1
- m_NumberOfSteps: 0
- m_OnValueChanged:
- m_PersistentCalls:
- m_Calls: []
---- !u!1 &6088661380421375832
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 9209122612970100190}
- - component: {fileID: 6476927354465729135}
- - component: {fileID: 4767275849322073822}
- - component: {fileID: 3842398061781452714}
- m_Layer: 5
- m_Name: Scroll View
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &9209122612970100190
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6088661380421375832}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children:
- - {fileID: 1824308313848313193}
- - {fileID: 7793457982563150253}
- - {fileID: 9168450267583407812}
- m_Father: {fileID: 6567388883908861155}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: -11}
- m_SizeDelta: {x: 0, y: -42}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &6476927354465729135
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6088661380421375832}
- m_CullTransparentMesh: 1
---- !u!114 &4767275849322073822
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6088661380421375832}
+ m_GameObject: {fileID: 3011982018749398316}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
@@ -860,19 +384,19 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
---- !u!114 &3842398061781452714
+--- !u!114 &5742779717166474465
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6088661380421375832}
+ m_GameObject: {fileID: 3011982018749398316}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3}
m_Name:
m_EditorClassIdentifier:
- m_Content: {fileID: 2240268413977263779}
+ m_Content: {fileID: 2261173428971837695}
m_Horizontal: 1
m_Vertical: 1
m_MovementType: 2
@@ -880,9 +404,9 @@ MonoBehaviour:
m_Inertia: 1
m_DecelerationRate: 0.135
m_ScrollSensitivity: 10
- m_Viewport: {fileID: 1824308313848313193}
- m_HorizontalScrollbar: {fileID: 5353790932593107132}
- m_VerticalScrollbar: {fileID: 505480948637281615}
+ m_Viewport: {fileID: 3974886479277341081}
+ m_HorizontalScrollbar: {fileID: 6025781672912143612}
+ m_VerticalScrollbar: {fileID: 4856300785373777908}
m_HorizontalScrollbarVisibility: 1
m_VerticalScrollbarVisibility: 1
m_HorizontalScrollbarSpacing: -3
@@ -890,7 +414,7 @@ MonoBehaviour:
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
---- !u!1 &6690344807426313734
+--- !u!1 &3904395414431480648
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -898,454 +422,10 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- - component: {fileID: 6986221832819843173}
- - component: {fileID: 1154093525567517578}
- - component: {fileID: 2733383086465723583}
- - component: {fileID: 1132190849957045457}
- m_Layer: 5
- m_Name: Root
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &6986221832819843173
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6690344807426313734}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 2240268413977263779}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 0, y: 0}
- m_Pivot: {x: 0, y: 1}
---- !u!114 &1154093525567517578
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6690344807426313734}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Padding:
- m_Left: 20
- m_Right: 0
- m_Top: 2
- m_Bottom: 0
- m_ChildAlignment: 0
- m_Spacing: 0
- m_ChildForceExpandWidth: 0
- m_ChildForceExpandHeight: 0
- m_ChildControlWidth: 0
- m_ChildControlHeight: 0
- m_ChildScaleWidth: 0
- m_ChildScaleHeight: 0
- m_ReverseArrangement: 0
---- !u!114 &2733383086465723583
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6690344807426313734}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_HorizontalFit: 2
- m_VerticalFit: 2
---- !u!114 &1132190849957045457
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6690344807426313734}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: de4afb3a0d93f05448f2fc60683275c0, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- margin: {x: 0, y: 0}
- target:
- - {fileID: 2240268413977263779}
---- !u!1 &6757006638454796643
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1661139593473125497}
- - component: {fileID: 5752581588549509129}
- - component: {fileID: 1578952239640414418}
- - component: {fileID: 2598691367951394532}
- m_Layer: 5
- m_Name: InputField (TMP)
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &1661139593473125497
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6757006638454796643}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children:
- - {fileID: 8994610988129793201}
- - {fileID: 6430955701886727832}
- m_Father: {fileID: 6567388883908861155}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 20, y: 0}
- m_SizeDelta: {x: 268, y: 24}
- m_Pivot: {x: 0, y: 1}
---- !u!222 &5752581588549509129
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6757006638454796643}
- m_CullTransparentMesh: 1
---- !u!114 &1578952239640414418
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6757006638454796643}
- 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.23529412, g: 0.23529412, b: 0.23529412, a: 1}
- m_RaycastTarget: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_Sprite: {fileID: 0}
- m_Type: 1
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
- m_UseSpriteMesh: 0
- m_PixelsPerUnitMultiplier: 1
---- !u!114 &2598691367951394532
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6757006638454796643}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Navigation:
- m_Mode: 3
- m_WrapAround: 0
- 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: 1578952239640414418}
- m_TextViewport: {fileID: 6430955701886727832}
- m_TextComponent: {fileID: 1912505645382100536}
- m_Placeholder: {fileID: 3047408605536893539}
- m_VerticalScrollbar: {fileID: 0}
- m_VerticalScrollbarEventHandler: {fileID: 0}
- m_LayoutGroup: {fileID: 0}
- m_ScrollSensitivity: 1
- m_ContentType: 0
- m_InputType: 0
- m_AsteriskChar: 42
- m_KeyboardType: 0
- m_LineType: 0
- m_HideMobileInput: 0
- m_HideSoftKeyboard: 0
- m_CharacterValidation: 0
- m_RegexValue:
- m_GlobalPointSize: 12
- m_CharacterLimit: 0
- m_OnEndEdit:
- m_PersistentCalls:
- m_Calls: []
- m_OnSubmit:
- m_PersistentCalls:
- m_Calls: []
- m_OnSelect:
- m_PersistentCalls:
- m_Calls: []
- m_OnDeselect:
- m_PersistentCalls:
- m_Calls: []
- m_OnTextSelection:
- m_PersistentCalls:
- m_Calls: []
- m_OnEndTextSelection:
- m_PersistentCalls:
- m_Calls: []
- m_OnValueChanged:
- m_PersistentCalls:
- m_Calls: []
- m_OnTouchScreenKeyboardStatusChanged:
- m_PersistentCalls:
- m_Calls: []
- m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
- m_CustomCaretColor: 0
- m_SelectionColor: {r: 0, g: 0, b: 0, a: 1}
- m_Text:
- m_CaretBlinkRate: 0.85
- m_CaretWidth: 1
- m_ReadOnly: 0
- m_RichText: 1
- m_GlobalFontAsset: {fileID: 11400000, guid: 2c77cc500db5adc499bfa50030f7e8c2, type: 2}
- m_OnFocusSelectAll: 1
- m_ResetOnDeActivation: 1
- m_KeepTextSelectionVisible: 0
- m_RestoreOriginalTextOnEscape: 1
- m_isRichTextEditingAllowed: 0
- m_LineLimit: 0
- isAlert: 0
- m_InputValidator: {fileID: 0}
- m_ShouldActivateOnSelect: 1
---- !u!1 &6844972442617045610
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 161416004204927197}
- m_Layer: 5
- m_Name: Sliding Area
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &161416004204927197
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6844972442617045610}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children:
- - {fileID: 5613474474329381979}
- m_Father: {fileID: 7793457982563150253}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: -20, y: -20}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!1 &6889153405749114039
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 4235693900264403651}
- - component: {fileID: 1735423591749555638}
- - component: {fileID: 1912505645382100536}
- m_Layer: 5
- m_Name: Text
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &4235693900264403651
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6889153405749114039}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 6430955701886727832}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: -10, y: 0}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &1735423591749555638
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6889153405749114039}
- m_CullTransparentMesh: 1
---- !u!114 &1912505645382100536
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 6889153405749114039}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_text: "\u200B"
- m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: d1fa8a1da59a4de4485cae7c4f9c196b, type: 2}
- m_sharedMaterial: {fileID: -6974119170906569483, guid: d1fa8a1da59a4de4485cae7c4f9c196b, type: 2}
- m_fontSharedMaterials: []
- m_fontMaterial: {fileID: 0}
- m_fontMaterials: []
- m_fontColor32:
- serializedVersion: 2
- rgba: 4291611852
- m_fontColor: {r: 0.8, g: 0.8, b: 0.8, a: 1}
- m_enableVertexGradient: 0
- m_colorMode: 3
- m_fontColorGradient:
- topLeft: {r: 1, g: 1, b: 1, a: 1}
- topRight: {r: 1, g: 1, b: 1, a: 1}
- bottomLeft: {r: 1, g: 1, b: 1, a: 1}
- bottomRight: {r: 1, g: 1, b: 1, a: 1}
- m_fontColorGradientPreset: {fileID: 0}
- m_spriteAsset: {fileID: 0}
- m_tintAllSprites: 0
- m_StyleSheet: {fileID: 0}
- m_TextStyleHashCode: -1183493901
- m_overrideHtmlColors: 0
- m_faceColor:
- serializedVersion: 2
- rgba: 4294967295
- m_fontSize: 13
- m_fontSizeBase: 13
- m_fontWeight: 400
- m_enableAutoSizing: 0
- m_fontSizeMin: 18
- m_fontSizeMax: 72
- m_fontStyle: 0
- m_HorizontalAlignment: 1
- m_VerticalAlignment: 512
- m_textAlignment: 65535
- m_characterSpacing: 0
- m_wordSpacing: 0
- m_lineSpacing: 0
- m_lineSpacingMax: 0
- m_paragraphSpacing: 0
- m_charWidthMaxAdj: 0
- m_TextWrappingMode: 3
- m_wordWrappingRatios: 0.4
- m_overflowMode: 0
- m_linkedTextComponent: {fileID: 0}
- parentLinkedComponent: {fileID: 0}
- m_enableKerning: 0
- m_ActiveFontFeatures: 6e72656b
- m_enableExtraPadding: 1
- checkPaddingRequired: 0
- m_isRichText: 1
- m_EmojiFallbackSupport: 1
- m_parseCtrlCharacters: 1
- m_isOrthographic: 1
- m_isCullingEnabled: 0
- m_horizontalMapping: 0
- m_verticalMapping: 0
- m_uvLineOffset: 0
- m_geometrySortingOrder: 0
- m_IsTextObjectScaleStatic: 0
- m_VertexBufferAutoSizeReduction: 0
- m_useMaxVisibleDescender: 1
- m_pageToDisplay: 1
- m_margin: {x: 0, y: 0, z: 0, w: 0}
- m_isUsingLegacyAnimationComponent: 0
- m_isVolumetricText: 0
- m_hasFontAssetChanged: 0
- m_baseMaterial: {fileID: 0}
- m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
---- !u!1 &7111138225835767551
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1824308313848313193}
- - component: {fileID: 8340655046281950868}
- - component: {fileID: 8899114591733096630}
- - component: {fileID: 6602378990812955008}
+ - component: {fileID: 3974886479277341081}
+ - component: {fileID: 2640013902256625935}
+ - component: {fileID: 7267482512719985956}
+ - component: {fileID: 1414930982064568929}
m_Layer: 5
m_Name: Viewport
m_TagString: Untagged
@@ -1353,54 +433,54 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!224 &1824308313848313193
+--- !u!224 &3974886479277341081
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 7111138225835767551}
+ m_GameObject: {fileID: 3904395414431480648}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- - {fileID: 2240268413977263779}
- m_Father: {fileID: 9209122612970100190}
+ - {fileID: 2261173428971837695}
+ m_Father: {fileID: 8894486403032071402}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 1}
---- !u!114 &8340655046281950868
+--- !u!114 &2640013902256625935
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 7111138225835767551}
+ m_GameObject: {fileID: 3904395414431480648}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_ShowMaskGraphic: 0
---- !u!222 &8899114591733096630
+--- !u!222 &7267482512719985956
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 7111138225835767551}
+ m_GameObject: {fileID: 3904395414431480648}
m_CullTransparentMesh: 0
---- !u!114 &6602378990812955008
+--- !u!114 &1414930982064568929
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 7111138225835767551}
+ m_GameObject: {fileID: 3904395414431480648}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
@@ -1424,7 +504,7 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
---- !u!1 &7412319839729039088
+--- !u!1 &4125224351293165923
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -1432,51 +512,74 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- - component: {fileID: 6430955701886727832}
- - component: {fileID: 7611657322321786739}
+ - component: {fileID: 6234462523872176539}
+ - component: {fileID: 68695882802577982}
+ - component: {fileID: 7428146289359687929}
m_Layer: 5
- m_Name: Text Area
+ m_Name: Handle
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!224 &6430955701886727832
+--- !u!224 &6234462523872176539
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 7412319839729039088}
+ m_GameObject: {fileID: 4125224351293165923}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
- m_Children:
- - {fileID: 4799855768651686507}
- - {fileID: 4235693900264403651}
- m_Father: {fileID: 1661139593473125497}
+ m_Children: []
+ m_Father: {fileID: 3301928374361144381}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: -0.5}
- m_SizeDelta: {x: -20, y: -13}
+ 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}
---- !u!114 &7611657322321786739
+--- !u!222 &68695882802577982
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4125224351293165923}
+ m_CullTransparentMesh: 0
+--- !u!114 &7428146289359687929
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 7412319839729039088}
+ m_GameObject: {fileID: 4125224351293165923}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3}
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
- m_Padding: {x: -8, y: -5, z: -8, w: -5}
- m_Softness: {x: 0, y: 0}
---- !u!1 &7502890321304074715
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!1 &4235972654286552744
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -1484,7 +587,213 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- - component: {fileID: 2240268413977263779}
+ - component: {fileID: 908297234377844233}
+ - component: {fileID: 5053221704473354703}
+ - component: {fileID: 2409632255040810509}
+ - component: {fileID: 3050818479446949986}
+ m_Layer: 5
+ m_Name: Root
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &908297234377844233
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4235972654286552744}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 2261173428971837695}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0, y: 1}
+--- !u!114 &5053221704473354703
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4235972654286552744}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding:
+ m_Left: 20
+ m_Right: 0
+ m_Top: 2
+ m_Bottom: 0
+ m_ChildAlignment: 0
+ m_Spacing: 0
+ m_ChildForceExpandWidth: 0
+ m_ChildForceExpandHeight: 0
+ m_ChildControlWidth: 0
+ m_ChildControlHeight: 0
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
+--- !u!114 &2409632255040810509
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4235972654286552744}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_HorizontalFit: 2
+ m_VerticalFit: 2
+--- !u!114 &3050818479446949986
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4235972654286552744}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: de4afb3a0d93f05448f2fc60683275c0, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ EnableWidth: 0
+ EnableHeight: 1
+ margin: {x: 0, y: 0}
+ target:
+ - {fileID: 2261173428971837695}
+--- !u!1 &4766152670497772902
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 3097322909638401089}
+ m_Layer: 5
+ m_Name: Sliding Area
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &3097322909638401089
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4766152670497772902}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 6081086258189437538}
+ m_Father: {fileID: 1022765863909309765}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: -20, y: -20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &4888954506875524224
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6081086258189437538}
+ - component: {fileID: 1173046865919000884}
+ - component: {fileID: 2680734087760533677}
+ m_Layer: 5
+ m_Name: Handle
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &6081086258189437538
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4888954506875524224}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 3097322909638401089}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ 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}
+--- !u!222 &1173046865919000884
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4888954506875524224}
+ m_CullTransparentMesh: 0
+--- !u!114 &2680734087760533677
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4888954506875524224}
+ 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.2, g: 0.2, b: 0.2, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!1 &8720199997050006827
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2261173428971837695}
m_Layer: 5
m_Name: Content
m_TagString: Untagged
@@ -1492,23 +801,23 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!224 &2240268413977263779
+--- !u!224 &2261173428971837695
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 7502890321304074715}
+ m_GameObject: {fileID: 8720199997050006827}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- - {fileID: 6986221832819843173}
- m_Father: {fileID: 1824308313848313193}
+ - {fileID: 908297234377844233}
+ m_Father: {fileID: 3974886479277341081}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 2}
m_Pivot: {x: 0, y: 1}
diff --git a/Assets/Resources/Prefabs/UI/List/ComponentListWindow.prefab b/Assets/Resources/Prefabs/UI/Window/ComponentListWindow.prefab
similarity index 100%
rename from Assets/Resources/Prefabs/UI/List/ComponentListWindow.prefab
rename to Assets/Resources/Prefabs/UI/Window/ComponentListWindow.prefab
diff --git a/Assets/Resources/Prefabs/UI/List/ComponentListWindow.prefab.meta b/Assets/Resources/Prefabs/UI/Window/ComponentListWindow.prefab.meta
similarity index 100%
rename from Assets/Resources/Prefabs/UI/List/ComponentListWindow.prefab.meta
rename to Assets/Resources/Prefabs/UI/Window/ComponentListWindow.prefab.meta
diff --git a/Assets/Resources/Prefabs/UI/Window/HierarchyWindow.prefab b/Assets/Resources/Prefabs/UI/Window/HierarchyWindow.prefab
new file mode 100644
index 00000000..123c8cf1
--- /dev/null
+++ b/Assets/Resources/Prefabs/UI/Window/HierarchyWindow.prefab
@@ -0,0 +1,1487 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &19856086295022883
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7188490178547780683}
+ - component: {fileID: 2275185046005143034}
+ - component: {fileID: 5184576730040321648}
+ m_Layer: 5
+ m_Name: Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &7188490178547780683
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 19856086295022883}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 6704318869740062506}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: -10, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2275185046005143034
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 19856086295022883}
+ m_CullTransparentMesh: 1
+--- !u!114 &5184576730040321648
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 19856086295022883}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: "\u200B"
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: d1fa8a1da59a4de4485cae7c4f9c196b, type: 2}
+ m_sharedMaterial: {fileID: -6974119170906569483, guid: d1fa8a1da59a4de4485cae7c4f9c196b, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4291611852
+ m_fontColor: {r: 0.8, g: 0.8, b: 0.8, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_StyleSheet: {fileID: 0}
+ m_TextStyleHashCode: -1183493901
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontSize: 13
+ m_fontSizeBase: 13
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 0
+ m_HorizontalAlignment: 1
+ m_VerticalAlignment: 512
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 3
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 0
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 1
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 1
+ m_isCullingEnabled: 0
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_IsTextObjectScaleStatic: 0
+ m_VertexBufferAutoSizeReduction: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &214406981717356526
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6704318869740062506}
+ - component: {fileID: 8946571027995579782}
+ m_Layer: 5
+ m_Name: Text Area
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &6704318869740062506
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 214406981717356526}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 232306301178016477}
+ - {fileID: 7188490178547780683}
+ m_Father: {fileID: 40713400823356351}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: -0.5}
+ m_SizeDelta: {x: -20, y: -13}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &8946571027995579782
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 214406981717356526}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding: {x: -8, y: -5, z: -8, w: -5}
+ m_Softness: {x: 0, y: 0}
+--- !u!1 &1240453198998271138
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6901611604910596127}
+ m_Layer: 5
+ m_Name: Top
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &6901611604910596127
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1240453198998271138}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 798050974035107396}
+ - {fileID: 7241186331197533024}
+ m_Father: {fileID: 1574318677252675885}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 300, y: 32}
+ m_Pivot: {x: 0, y: 1}
+--- !u!1 &1861631876082842492
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4162604190990658749}
+ - component: {fileID: 2822835300248902653}
+ - component: {fileID: 9209424671866392754}
+ - component: {fileID: 5364685758092017862}
+ m_Layer: 5
+ m_Name: removeTextButton
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &4162604190990658749
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1861631876082842492}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 40713400823356351}
+ 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: 0, y: 0}
+ m_SizeDelta: {x: 24, y: 16}
+ m_Pivot: {x: 1, y: 0.5}
+--- !u!222 &2822835300248902653
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1861631876082842492}
+ m_CullTransparentMesh: 1
+--- !u!114 &9209424671866392754
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1861631876082842492}
+ 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.8, g: 0.8, b: 0.8, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 21300000, guid: 17863240a1386604e8c74d85d4a95818, 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 &5364685758092017862
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1861631876082842492}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 0.8, g: 0.8, b: 0.8, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 1, g: 1, b: 1, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.8, g: 0.8, b: 0.8, 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: 9209424671866392754}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls:
+ - m_Target: {fileID: 0}
+ m_TargetAssemblyTypeName: UVC.UI.List.ComponentList.ComponentList, Assembly-CSharp
+ m_MethodName: OnClickClearText
+ m_Mode: 1
+ m_Arguments:
+ m_ObjectArgument: {fileID: 0}
+ m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+ m_IntArgument: 0
+ m_FloatArgument: 0
+ m_StringArgument:
+ m_BoolArgument: 0
+ m_CallState: 2
+--- !u!1 &1866422618894112705
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 40713400823356351}
+ - component: {fileID: 9119395570097571835}
+ - component: {fileID: 6115366051205754178}
+ - component: {fileID: 7769071907284884258}
+ m_Layer: 5
+ m_Name: InputField (TMP)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &40713400823356351
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1866422618894112705}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 3512955993103789164}
+ - {fileID: 4162604190990658749}
+ - {fileID: 6704318869740062506}
+ m_Father: {fileID: 1574318677252675885}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 20, y: -40}
+ m_SizeDelta: {x: -32, y: 24}
+ m_Pivot: {x: 0, y: 1}
+--- !u!222 &9119395570097571835
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1866422618894112705}
+ m_CullTransparentMesh: 1
+--- !u!114 &6115366051205754178
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1866422618894112705}
+ 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.23529412, g: 0.23529412, b: 0.23529412, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!114 &7769071907284884258
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1866422618894112705}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ 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: 6115366051205754178}
+ m_TextViewport: {fileID: 6704318869740062506}
+ m_TextComponent: {fileID: 5184576730040321648}
+ m_Placeholder: {fileID: 1089595314010215438}
+ m_VerticalScrollbar: {fileID: 0}
+ m_VerticalScrollbarEventHandler: {fileID: 0}
+ m_LayoutGroup: {fileID: 0}
+ m_ScrollSensitivity: 1
+ m_ContentType: 0
+ m_InputType: 0
+ m_AsteriskChar: 42
+ m_KeyboardType: 0
+ m_LineType: 0
+ m_HideMobileInput: 0
+ m_HideSoftKeyboard: 0
+ m_CharacterValidation: 0
+ m_RegexValue:
+ m_GlobalPointSize: 12
+ m_CharacterLimit: 0
+ m_OnEndEdit:
+ m_PersistentCalls:
+ m_Calls: []
+ m_OnSubmit:
+ m_PersistentCalls:
+ m_Calls: []
+ m_OnSelect:
+ m_PersistentCalls:
+ m_Calls: []
+ m_OnDeselect:
+ m_PersistentCalls:
+ m_Calls: []
+ m_OnTextSelection:
+ m_PersistentCalls:
+ m_Calls: []
+ m_OnEndTextSelection:
+ m_PersistentCalls:
+ m_Calls: []
+ m_OnValueChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_OnTouchScreenKeyboardStatusChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+ m_CustomCaretColor: 0
+ m_SelectionColor: {r: 0, g: 0, b: 0, a: 1}
+ m_Text:
+ m_CaretBlinkRate: 0.85
+ m_CaretWidth: 1
+ m_ReadOnly: 0
+ m_RichText: 1
+ m_GlobalFontAsset: {fileID: 11400000, guid: 2c77cc500db5adc499bfa50030f7e8c2, type: 2}
+ m_OnFocusSelectAll: 1
+ m_ResetOnDeActivation: 1
+ m_KeepTextSelectionVisible: 0
+ m_RestoreOriginalTextOnEscape: 1
+ m_isRichTextEditingAllowed: 0
+ m_LineLimit: 0
+ isAlert: 0
+ m_InputValidator: {fileID: 0}
+ m_ShouldActivateOnSelect: 1
+--- !u!1 &1913501843011813999
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1574318677252675885}
+ - component: {fileID: 1941791058898214053}
+ - component: {fileID: 5260132368171820871}
+ - component: {fileID: 8327823890420627479}
+ m_Layer: 5
+ m_Name: HierarchyWindow
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1574318677252675885
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1913501843011813999}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 6901611604910596127}
+ - {fileID: 40713400823356351}
+ - {fileID: 7914877393362965188}
+ - {fileID: 5371740527650607395}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 0, y: -64}
+ m_SizeDelta: {x: 300, y: -64}
+ m_Pivot: {x: 0, y: 1}
+--- !u!222 &1941791058898214053
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1913501843011813999}
+ m_CullTransparentMesh: 1
+--- !u!114 &5260132368171820871
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1913501843011813999}
+ 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.14509805, g: 0.14509805, b: 0.14901961, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!114 &8327823890420627479
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1913501843011813999}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 73be4d2e3822cba4a85e1cfb52f6b737, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ treeList: {fileID: 5551319486076175234}
+ treeListSearch: {fileID: 7660962889100034149}
+ inputField: {fileID: 7769071907284884258}
+ clearTextButton: {fileID: 5364685758092017862}
+ loadingImage: {fileID: 196444072060293216}
+ loadingRotateSpeed: 360
+ loadingFillCycle: 0.5
+--- !u!1 &2176369568386752279
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 798050974035107396}
+ - component: {fileID: 5344344422984745882}
+ - component: {fileID: 8908194448240858345}
+ m_Layer: 5
+ m_Name: Text (TMP)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &798050974035107396
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2176369568386752279}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 6901611604910596127}
+ 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, y: 0}
+ m_SizeDelta: {x: 184, y: 24}
+ m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &5344344422984745882
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2176369568386752279}
+ m_CullTransparentMesh: 1
+--- !u!114 &8908194448240858345
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2176369568386752279}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: HIERARCHY
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: d1fa8a1da59a4de4485cae7c4f9c196b, type: 2}
+ m_sharedMaterial: {fileID: -6974119170906569483, guid: d1fa8a1da59a4de4485cae7c4f9c196b, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4291611852
+ m_fontColor: {r: 0.8, g: 0.8, b: 0.8, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_StyleSheet: {fileID: 0}
+ m_TextStyleHashCode: -1183493901
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontSize: 11
+ m_fontSizeBase: 11
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 0
+ m_HorizontalAlignment: 1
+ m_VerticalAlignment: 512
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 0
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 1
+ m_isCullingEnabled: 0
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_IsTextObjectScaleStatic: 0
+ m_VertexBufferAutoSizeReduction: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &2333009082774902369
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1765160980165362397}
+ - component: {fileID: 1079965938617629996}
+ - component: {fileID: 8946630860592845295}
+ - component: {fileID: 2792550393869914720}
+ m_Layer: 5
+ m_Name: CloseButton
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1765160980165362397
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2333009082774902369}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 7241186331197533024}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 22, y: 22}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1079965938617629996
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2333009082774902369}
+ m_CullTransparentMesh: 1
+--- !u!114 &8946630860592845295
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2333009082774902369}
+ 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.8, g: 0.8, b: 0.8, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 21300000, guid: 7bbcdeb4ed6408443852787a94f5c21b, 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 &2792550393869914720
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2333009082774902369}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 0.8, g: 0.8, b: 0.8, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 1, g: 1, b: 1, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.8, g: 0.8, b: 0.8, 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: 8946630860592845295}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls:
+ - m_Target: {fileID: 0}
+ m_TargetAssemblyTypeName: UVC.UI.Window.PropertyWindow.PropertyWindow, Assembly-CSharp
+ m_MethodName: Hide
+ m_Mode: 1
+ m_Arguments:
+ m_ObjectArgument: {fileID: 0}
+ m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+ m_IntArgument: 0
+ m_FloatArgument: 0
+ m_StringArgument:
+ m_BoolArgument: 0
+ m_CallState: 2
+--- !u!1 &3481291456717064673
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7241186331197533024}
+ - component: {fileID: 9173950862504170430}
+ m_Layer: 5
+ m_Name: buttons
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &7241186331197533024
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3481291456717064673}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1765160980165362397}
+ m_Father: {fileID: 6901611604910596127}
+ 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: -12, y: 0}
+ m_SizeDelta: {x: 80, y: 22}
+ m_Pivot: {x: 1, y: 0.5}
+--- !u!114 &9173950862504170430
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3481291456717064673}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding:
+ m_Left: 0
+ m_Right: 0
+ m_Top: 0
+ m_Bottom: 0
+ m_ChildAlignment: 5
+ m_Spacing: 4
+ m_ChildForceExpandWidth: 0
+ m_ChildForceExpandHeight: 0
+ m_ChildControlWidth: 0
+ m_ChildControlHeight: 0
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
+--- !u!1 &7060932487311895023
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 3512955993103789164}
+ - component: {fileID: 771756914789545659}
+ - component: {fileID: 196444072060293216}
+ m_Layer: 5
+ m_Name: loadingImage
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &3512955993103789164
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7060932487311895023}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 40713400823356351}
+ 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: 105, y: 0}
+ m_SizeDelta: {x: 10, y: 10}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &771756914789545659
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7060932487311895023}
+ m_CullTransparentMesh: 1
+--- !u!114 &196444072060293216
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7060932487311895023}
+ 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.8, g: 0.8, b: 0.8, a: 1}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 21300000, guid: 2de0f68dbe4876e47804e01029bd07e8, type: 3}
+ m_Type: 3
+ m_PreserveAspect: 1
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!1 &8703800818190431198
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 232306301178016477}
+ - component: {fileID: 633606437974914870}
+ - component: {fileID: 1089595314010215438}
+ - component: {fileID: 1780098577063208606}
+ m_Layer: 5
+ m_Name: Placeholder
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &232306301178016477
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8703800818190431198}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 6704318869740062506}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: -10, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &633606437974914870
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8703800818190431198}
+ m_CullTransparentMesh: 1
+--- !u!114 &1089595314010215438
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8703800818190431198}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: "\uAC80\uC0C9"
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 2c77cc500db5adc499bfa50030f7e8c2, type: 2}
+ m_sharedMaterial: {fileID: -2285177295282439072, guid: 2c77cc500db5adc499bfa50030f7e8c2, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4288716960
+ m_fontColor: {r: 0.627451, g: 0.627451, b: 0.627451, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_StyleSheet: {fileID: 0}
+ m_TextStyleHashCode: -1183493901
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontSize: 13
+ m_fontSizeBase: 13
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 2
+ m_HorizontalAlignment: 1
+ m_VerticalAlignment: 512
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 0
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 0
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 1
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 1
+ m_isCullingEnabled: 0
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_IsTextObjectScaleStatic: 0
+ m_VertexBufferAutoSizeReduction: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!114 &1780098577063208606
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8703800818190431198}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 1
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
+--- !u!1001 &1637299600126635566
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 1574318677252675885}
+ m_Modifications:
+ - target: {fileID: 908297234377844233, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_SizeDelta.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 908297234377844233, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_SizeDelta.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 2261173428971837695, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_SizeDelta.y
+ value: 2
+ objectReference: {fileID: 0}
+ - target: {fileID: 3011982018749398316, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_Name
+ value: TreeListSearch
+ objectReference: {fileID: 0}
+ - target: {fileID: 6081086258189437538, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchorMax.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6081086258189437538, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6234462523872176539, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchorMax.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6234462523872176539, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_Pivot.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_Pivot.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchorMax.x
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchorMin.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchorMin.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_SizeDelta.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_SizeDelta.y
+ value: -76
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: -76
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 9000987459549261387, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: allowMultipleSelection
+ value: 0
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+--- !u!114 &7660962889100034149 stripped
+MonoBehaviour:
+ m_CorrespondingSourceObject: {fileID: 9000987459549261387, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ m_PrefabInstance: {fileID: 1637299600126635566}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 7be08eb56899e2042811c8d1da0924a6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!224 &7914877393362965188 stripped
+RectTransform:
+ m_CorrespondingSourceObject: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ m_PrefabInstance: {fileID: 1637299600126635566}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1001 &3594947613090885065
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 1574318677252675885}
+ m_Modifications:
+ - target: {fileID: 908297234377844233, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_SizeDelta.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 908297234377844233, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_SizeDelta.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 2261173428971837695, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_SizeDelta.y
+ value: 2
+ objectReference: {fileID: 0}
+ - target: {fileID: 3011982018749398316, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_Name
+ value: TreeList
+ objectReference: {fileID: 0}
+ - target: {fileID: 6081086258189437538, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchorMax.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6081086258189437538, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6234462523872176539, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchorMax.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6234462523872176539, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_Pivot.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_Pivot.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchorMax.x
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchorMin.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchorMin.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_SizeDelta.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_SizeDelta.y
+ value: -76
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: -76
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+--- !u!224 &5371740527650607395 stripped
+RectTransform:
+ m_CorrespondingSourceObject: {fileID: 8894486403032071402, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ m_PrefabInstance: {fileID: 3594947613090885065}
+ m_PrefabAsset: {fileID: 0}
+--- !u!114 &5551319486076175234 stripped
+MonoBehaviour:
+ m_CorrespondingSourceObject: {fileID: 9000987459549261387, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
+ m_PrefabInstance: {fileID: 3594947613090885065}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 7be08eb56899e2042811c8d1da0924a6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
diff --git a/Assets/Resources/Prefabs/UI/Window/HierarchyWindow.prefab.meta b/Assets/Resources/Prefabs/UI/Window/HierarchyWindow.prefab.meta
new file mode 100644
index 00000000..3df77daf
--- /dev/null
+++ b/Assets/Resources/Prefabs/UI/Window/HierarchyWindow.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 55334174237ec37438ae05ee0b89079a
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/Prefabs/UI/images/icon_ellipse_16.png b/Assets/Resources/Prefabs/UI/images/icon_ellipse_16.png
new file mode 100644
index 00000000..543a1acc
Binary files /dev/null and b/Assets/Resources/Prefabs/UI/images/icon_ellipse_16.png differ
diff --git a/Assets/Resources/Prefabs/UI/images/icon_ellipse_16.png.meta b/Assets/Resources/Prefabs/UI/images/icon_ellipse_16.png.meta
new file mode 100644
index 00000000..2c6d3337
--- /dev/null
+++ b/Assets/Resources/Prefabs/UI/images/icon_ellipse_16.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 2de0f68dbe4876e47804e01029bd07e8
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scenes/Sample/HierarchySample.unity b/Assets/Scenes/Sample/HierarchySample.unity
index 4ed82ae5..884b0ea4 100644
--- a/Assets/Scenes/Sample/HierarchySample.unity
+++ b/Assets/Scenes/Sample/HierarchySample.unity
@@ -119,197 +119,22 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
---- !u!1 &651880471
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 651880472}
- - component: {fileID: 651880474}
- - component: {fileID: 651880473}
- - component: {fileID: 651880475}
- m_Layer: 5
- m_Name: HierarchyWindow
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &651880472
+--- !u!224 &651880472 stripped
RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
+ m_CorrespondingSourceObject: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ m_PrefabInstance: {fileID: 2860332021081550125}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 651880471}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children:
- - {fileID: 797351289}
- - {fileID: 2079701273}
- m_Father: {fileID: 1218340765}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 0, y: -64}
- m_SizeDelta: {x: 300, y: -64}
- m_Pivot: {x: 0, y: 1}
---- !u!114 &651880473
+--- !u!114 &651880475 stripped
MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
+ m_CorrespondingSourceObject: {fileID: 8327823890420627479, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ m_PrefabInstance: {fileID: 2860332021081550125}
m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 651880471}
- 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.14509805, g: 0.14509805, b: 0.14901961, a: 1}
- m_RaycastTarget: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_Sprite: {fileID: 0}
- m_Type: 1
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
- m_UseSpriteMesh: 0
- m_PixelsPerUnitMultiplier: 1
---- !u!222 &651880474
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 651880471}
- m_CullTransparentMesh: 1
---- !u!114 &651880475
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 651880471}
+ m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 73be4d2e3822cba4a85e1cfb52f6b737, type: 3}
m_Name:
m_EditorClassIdentifier:
- treeList: {fileID: 2079701274}
---- !u!1 &797351288
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 797351289}
- m_Layer: 5
- m_Name: Top
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &797351289
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 797351288}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children:
- - {fileID: 2045629989}
- - {fileID: 886096681}
- m_Father: {fileID: 651880472}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 300, y: 32}
- m_Pivot: {x: 0, y: 1}
---- !u!1 &886096680
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 886096681}
- - component: {fileID: 886096682}
- m_Layer: 5
- m_Name: buttons
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &886096681
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 886096680}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children:
- - {fileID: 1786541371}
- m_Father: {fileID: 797351289}
- 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: -12, y: 0}
- m_SizeDelta: {x: 80, y: 22}
- m_Pivot: {x: 1, y: 0.5}
---- !u!114 &886096682
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 886096680}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Padding:
- m_Left: 0
- m_Right: 0
- m_Top: 0
- m_Bottom: 0
- m_ChildAlignment: 5
- m_Spacing: 4
- m_ChildForceExpandWidth: 0
- m_ChildForceExpandHeight: 0
- m_ChildControlWidth: 0
- m_ChildControlHeight: 0
- m_ChildScaleWidth: 0
- m_ChildScaleHeight: 0
- m_ReverseArrangement: 0
--- !u!1 &1097328750
GameObject:
m_ObjectHideFlags: 0
@@ -657,427 +482,6 @@ MonoBehaviour:
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
m_SoftShadowQuality: 0
---- !u!1 &1786541370
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1786541371}
- - component: {fileID: 1786541374}
- - component: {fileID: 1786541373}
- - component: {fileID: 1786541372}
- m_Layer: 5
- m_Name: CloseButton
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &1786541371
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1786541370}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 886096681}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 22, y: 22}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1786541372
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1786541370}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Navigation:
- m_Mode: 3
- m_WrapAround: 0
- m_SelectOnUp: {fileID: 0}
- m_SelectOnDown: {fileID: 0}
- m_SelectOnLeft: {fileID: 0}
- m_SelectOnRight: {fileID: 0}
- m_Transition: 1
- m_Colors:
- m_NormalColor: {r: 0.8, g: 0.8, b: 0.8, a: 1}
- m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
- m_PressedColor: {r: 1, g: 1, b: 1, a: 1}
- m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
- m_DisabledColor: {r: 0.8, g: 0.8, b: 0.8, 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: 1786541373}
- m_OnClick:
- m_PersistentCalls:
- m_Calls:
- - m_Target: {fileID: 0}
- m_TargetAssemblyTypeName: UVC.UI.Window.PropertyWindow.PropertyWindow, Assembly-CSharp
- m_MethodName: Hide
- m_Mode: 1
- m_Arguments:
- m_ObjectArgument: {fileID: 0}
- m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
- m_IntArgument: 0
- m_FloatArgument: 0
- m_StringArgument:
- m_BoolArgument: 0
- m_CallState: 2
---- !u!114 &1786541373
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1786541370}
- 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.8, g: 0.8, b: 0.8, a: 1}
- m_RaycastTarget: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_Sprite: {fileID: 21300000, guid: 7bbcdeb4ed6408443852787a94f5c21b, 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!222 &1786541374
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1786541370}
- m_CullTransparentMesh: 1
---- !u!1 &2045629988
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 2045629989}
- - component: {fileID: 2045629991}
- - component: {fileID: 2045629990}
- m_Layer: 5
- m_Name: Text (TMP)
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &2045629989
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2045629988}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 797351289}
- 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, y: 0}
- m_SizeDelta: {x: 184, y: 24}
- m_Pivot: {x: 0, y: 0.5}
---- !u!114 &2045629990
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2045629988}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_text: HIERARCHY
- m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: d1fa8a1da59a4de4485cae7c4f9c196b, type: 2}
- m_sharedMaterial: {fileID: -6974119170906569483, guid: d1fa8a1da59a4de4485cae7c4f9c196b, type: 2}
- m_fontSharedMaterials: []
- m_fontMaterial: {fileID: 0}
- m_fontMaterials: []
- m_fontColor32:
- serializedVersion: 2
- rgba: 4291611852
- m_fontColor: {r: 0.8, g: 0.8, b: 0.8, a: 1}
- m_enableVertexGradient: 0
- m_colorMode: 3
- m_fontColorGradient:
- topLeft: {r: 1, g: 1, b: 1, a: 1}
- topRight: {r: 1, g: 1, b: 1, a: 1}
- bottomLeft: {r: 1, g: 1, b: 1, a: 1}
- bottomRight: {r: 1, g: 1, b: 1, a: 1}
- m_fontColorGradientPreset: {fileID: 0}
- m_spriteAsset: {fileID: 0}
- m_tintAllSprites: 0
- m_StyleSheet: {fileID: 0}
- m_TextStyleHashCode: -1183493901
- m_overrideHtmlColors: 0
- m_faceColor:
- serializedVersion: 2
- rgba: 4294967295
- m_fontSize: 11
- m_fontSizeBase: 11
- m_fontWeight: 400
- m_enableAutoSizing: 0
- m_fontSizeMin: 18
- m_fontSizeMax: 72
- m_fontStyle: 0
- m_HorizontalAlignment: 1
- m_VerticalAlignment: 512
- m_textAlignment: 65535
- m_characterSpacing: 0
- m_wordSpacing: 0
- m_lineSpacing: 0
- m_lineSpacingMax: 0
- m_paragraphSpacing: 0
- m_charWidthMaxAdj: 0
- m_TextWrappingMode: 1
- m_wordWrappingRatios: 0.4
- m_overflowMode: 0
- m_linkedTextComponent: {fileID: 0}
- parentLinkedComponent: {fileID: 0}
- m_enableKerning: 0
- m_ActiveFontFeatures: 6e72656b
- m_enableExtraPadding: 0
- checkPaddingRequired: 0
- m_isRichText: 1
- m_EmojiFallbackSupport: 1
- m_parseCtrlCharacters: 1
- m_isOrthographic: 1
- m_isCullingEnabled: 0
- m_horizontalMapping: 0
- m_verticalMapping: 0
- m_uvLineOffset: 0
- m_geometrySortingOrder: 0
- m_IsTextObjectScaleStatic: 0
- m_VertexBufferAutoSizeReduction: 0
- m_useMaxVisibleDescender: 1
- m_pageToDisplay: 1
- m_margin: {x: 0, y: 0, z: 0, w: 0}
- m_isUsingLegacyAnimationComponent: 0
- m_isVolumetricText: 0
- m_hasFontAssetChanged: 0
- m_baseMaterial: {fileID: 0}
- m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
---- !u!222 &2045629991
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2045629988}
- m_CullTransparentMesh: 1
---- !u!1001 &2079701272
-PrefabInstance:
- m_ObjectHideFlags: 0
- serializedVersion: 2
- m_Modification:
- serializedVersion: 3
- m_TransformParent: {fileID: 651880472}
- m_Modifications:
- - target: {fileID: 1132190849957045457, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: EnableWidth
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 1697446796394887609, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_AnchorMax.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 1697446796394887609, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_AnchorMax.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 2240268413977263779, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_SizeDelta.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 2240268413977263779, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_SizeDelta.y
- value: 2
- objectReference: {fileID: 0}
- - target: {fileID: 2651864206743669424, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_Name
- value: TreeList
- objectReference: {fileID: 0}
- - target: {fileID: 5353790932593107132, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_Size
- value: 0.9375
- objectReference: {fileID: 0}
- - target: {fileID: 5613474474329381979, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_AnchorMax.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 5613474474329381979, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_AnchorMax.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_Pivot.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_Pivot.y
- value: 1
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_AnchorMax.x
- value: 1
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_AnchorMax.y
- value: 1
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_AnchorMin.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_AnchorMin.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_SizeDelta.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_SizeDelta.y
- value: -40
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_LocalPosition.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_LocalPosition.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_LocalPosition.z
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_LocalRotation.w
- value: 1
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_LocalRotation.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_LocalRotation.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_LocalRotation.z
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_AnchoredPosition.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_AnchoredPosition.y
- value: -40
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_LocalEulerAnglesHint.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_LocalEulerAnglesHint.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_LocalEulerAnglesHint.z
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 6986221832819843173, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_SizeDelta.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 6986221832819843173, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- propertyPath: m_SizeDelta.y
- value: 0
- objectReference: {fileID: 0}
- m_RemovedComponents: []
- m_RemovedGameObjects: []
- m_AddedGameObjects: []
- m_AddedComponents: []
- m_SourcePrefab: {fileID: 100100000, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
---- !u!224 &2079701273 stripped
-RectTransform:
- m_CorrespondingSourceObject: {fileID: 6567388883908861155, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- m_PrefabInstance: {fileID: 2079701272}
- m_PrefabAsset: {fileID: 0}
---- !u!114 &2079701274 stripped
-MonoBehaviour:
- m_CorrespondingSourceObject: {fileID: 4160214132252070715, guid: a030935af8c62d748b6fe3d01bd4851f, type: 3}
- m_PrefabInstance: {fileID: 2079701272}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 0}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 7be08eb56899e2042811c8d1da0924a6, type: 3}
- m_Name:
- m_EditorClassIdentifier:
--- !u!1 &2136621999
GameObject:
m_ObjectHideFlags: 0
@@ -1170,6 +574,167 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1001 &2860332021081550125
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 1218340765}
+ m_Modifications:
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_Pivot.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_Pivot.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchorMax.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchorMin.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchorMin.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_SizeDelta.x
+ value: 300
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_SizeDelta.y
+ value: -64
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: -64
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1765160980165362397, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1765160980165362397, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchorMin.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1765160980165362397, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1765160980165362397, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1883121240313448487, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_SizeDelta.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1883121240313448487, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_SizeDelta.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1913501843011813999, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_Name
+ value: HierarchyWindow
+ objectReference: {fileID: 0}
+ - target: {fileID: 4429635802794036160, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_SizeDelta.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4429635802794036160, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_SizeDelta.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4629025237416871861, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchorMax.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4629025237416871861, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4817867488375858252, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchorMax.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4817867488375858252, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7315968355667519403, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchorMax.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7315968355667519403, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7450804729565234258, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchorMax.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7450804729565234258, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 0
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
diff --git a/Assets/Scripts/NHN/ContentSizeSetter.cs b/Assets/Scripts/NHN/ContentSizeSetter.cs
index 38eccc08..13173de0 100644
--- a/Assets/Scripts/NHN/ContentSizeSetter.cs
+++ b/Assets/Scripts/NHN/ContentSizeSetter.cs
@@ -1,26 +1,27 @@
+using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
namespace Gpm.Ui
{
- ///
- /// 이 컴포넌트가 부착된 RectTransform의 크기가 변경될 때, 지정된 'target' RectTransform들의 크기를 동일하게 맞추는 역할을 합니다.
- /// 주로 ContentSizeFitter와 함께 사용되어 동적으로 변하는 콘텐츠의 크기에 맞춰 배경 이미지 등의 크기를 조절할 때 유용합니다.
- ///
- ///
- /// UI 계층 구조 예시:
- ///
- /// - Background (RectTransform)
- /// - Content (RectTransform, VerticalLayoutGroup, ContentSizeFitter, ContentSizeSetter)
- /// - Item1 (Image)
- /// - Item2 (Image)
- /// - ...
- ///
- /// 위와 같은 구조에서 'Content' GameObject에 이 스크립트를 추가하고,
- /// 'target' 배열에 'Background'의 RectTransform을 할당하면,
- /// 'Content'의 크기가 내부 아이템(Item1, Item2)에 의해 변경될 때마다 'Background'의 크기도 함께 조절됩니다.
- ///
+ ///
+ /// 이 컴포넌트가 부착된 RectTransform의 크기가 변경될 때, 지정된 'target' RectTransform들의 크기를 동일하게 맞추는 역할을 합니다.
+ /// 주로 ContentSizeFitter와 함께 사용되어 동적으로 변하는 콘텐츠의 크기에 맞춰 배경 이미지 등의 크기를 조절할 때 유용합니다.
+ ///
+ ///
+ /// UI 계층 구조 예시:
+ ///
+ /// - Background (RectTransform)
+ /// - Content (RectTransform, VerticalLayoutGroup, ContentSizeFitter, ContentSizeSetter)
+ /// - Item1 (Image)
+ /// - Item2 (Image)
+ /// - ...
+ ///
+ /// 위와 같은 구조에서 'Content' GameObject에 이 스크립트를 추가하고,
+ /// 'target' 배열에 'Background'의 RectTransform을 할당하면,
+ /// 'Content'의 크기가 내부 아이템(Item1, Item2)에 의해 변경될 때마다 'Background'의 크기도 함께 조절됩니다.
+ ///
[ExecuteAlways] // 에디터 모드에서도 스크립트가 실행되도록 하여, UI 변경을 실시간으로 확인할 수 있게 합니다.
[RequireComponent(typeof(RectTransform))] // 이 컴포넌트는 RectTransform이 필수적으로 필요함을 명시합니다.
public class ContentSizeSetter : UIBehaviour
@@ -69,13 +70,26 @@ namespace Gpm.Ui
[SerializeField]
public RectTransform[] target;
+ // 중복 마킹을 방지하기 위한 정적 캐시
+ private static HashSet s_MarkedTargets = new HashSet();
+ private static int s_LastFrameMarked = -1;
+ private static Dictionary s_LastMarkedTime = new Dictionary();
+
+ // 예약 플래그
+ private bool m_PendingUpdate = false;
+
+ [SerializeField]
+ [Tooltip("같은 target에 대해 재마킹하기 전 최소 대기 시간(초).0이면 제한 없음.")]
+ private float minMarkInterval = 0f;
+
///
/// 컴포넌트가 활성화될 때 호출되는 Unity 생명주기 함수입니다.
/// 레이아웃을 다시 계산하도록 시스템에 요청합니다.
///
protected override void OnEnable()
{
- SetDirty();
+ // 활성화 시 즉시 반영이 필요할 수 있으므로 예약 대신 즉시 마킹
+ ScheduleUpdate();
}
///
@@ -86,20 +100,94 @@ namespace Gpm.Ui
{
base.OnRectTransformDimensionsChange();
- // 현재 RectTransform의 크기에 margin 값을 더하여 최종 크기를 계산합니다.
- Vector2 sizeDelta = new Vector2(rectTransform.sizeDelta.x + margin.x, rectTransform.sizeDelta.y + margin.y);
- if (target != null)
+ // 변경이 발생하면 즉시 적용하지 않고 다음 프레임에 일괄 처리하도록 예약합니다.
+ ScheduleUpdate();
+ }
+
+ ///
+ /// 예약 처리: 다음 LateUpdate에서 적용
+ ///
+ private void ScheduleUpdate()
+ {
+ if (!IsActive())
+ return;
+
+ m_PendingUpdate = true;
+ }
+
+ ///
+ /// LateUpdate에서 예약된 변경을 한 번에 처리합니다.
+ /// 동일 프레임/짧은 시간 내 중복 레이아웃 마킹을 방지합니다.
+ ///
+ private void LateUpdate()
+ {
+ if (!m_PendingUpdate)
+ return;
+
+ // 프레임이 바뀌면 정적 캐시를 리셋
+ if (s_LastFrameMarked != Time.frameCount)
{
- // target 배열의 모든 RectTransform에 대해 계산된 크기를 적용합니다.
- for (int i = 0; i < target.Length; i++)
+ s_LastFrameMarked = Time.frameCount;
+ s_MarkedTargets.Clear();
+ }
+
+ if (rectTransform == null || target == null || target.Length == 0)
+ {
+ m_PendingUpdate = false;
+ return;
+ }
+
+ // 원본 크기 계산(여기서 sizeDelta는 변경하지 않음)
+ Vector2 desired = new Vector2(rectTransform.sizeDelta.x + margin.x, rectTransform.sizeDelta.y + margin.y);
+
+ for (int i = 0; i < target.Length; i++)
+ {
+ var t = target[i];
+ if (t == null)
+ continue;
+
+ // 계산된 최종 크기
+ float w = EnableWidth ? desired.x : t.sizeDelta.x;
+ float h = EnableHeight ? desired.y : t.sizeDelta.y;
+
+ // 필요할 경우에만 할당하여 변경 횟수 감소
+ if (t.sizeDelta.x != w || t.sizeDelta.y != h)
{
- if (!EnableWidth) sizeDelta.x = target[i].sizeDelta.x;
- if (!EnableHeight) sizeDelta.y = target[i].sizeDelta.y;
- target[i].sizeDelta = sizeDelta;
- // target의 레이아웃을 갱신하도록 표시하여 UI가 올바르게 다시 그려지도록 합니다.
- LayoutRebuilder.MarkLayoutForRebuild(target[i]);
+ t.sizeDelta = new Vector2(w, h);
+ }
+
+ TryMarkTarget(t);
+ }
+
+ m_PendingUpdate = false;
+ }
+
+ ///
+ /// 주어진 target을 마킹(및 시간 제한 검사)합니다.
+ ///
+ /// 마킹 대상
+ private void TryMarkTarget(RectTransform t)
+ {
+ if (t == null)
+ return;
+
+ // 이미 같은 프레임에 마킹했다면 중복 방지
+ if (s_MarkedTargets.Contains(t))
+ return;
+
+ // 최소 재마킹 간격 검사
+ if (minMarkInterval > 0f)
+ {
+ if (s_LastMarkedTime.TryGetValue(t, out float lastTime))
+ {
+ if (Time.unscaledTime - lastTime < minMarkInterval)
+ return;
}
}
+
+ s_MarkedTargets.Add(t);
+ s_LastMarkedTime[t] = Time.unscaledTime;
+ LayoutRebuilder.MarkLayoutForRebuild(t);
}
///
diff --git a/Assets/Scripts/NHN/LayoutUpdater.cs b/Assets/Scripts/NHN/LayoutUpdater.cs
index 5d8c7cb7..5fb6ecb1 100644
--- a/Assets/Scripts/NHN/LayoutUpdater.cs
+++ b/Assets/Scripts/NHN/LayoutUpdater.cs
@@ -1,3 +1,4 @@
+using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
@@ -29,6 +30,28 @@ namespace Gpm.Ui
// 성능 최적화를 위해 부모 RectTransform 컴포넌트를 캐싱하는 변수입니다.
private RectTransform m_Parent;
+ // 프레임 단위로 동일 부모에 대한 중복 마킹을 방지하기 위한 정적 캐시
+ private static HashSet s_MarkedParents = new HashSet();
+ private static int s_LastFrameMarked = -1;
+
+ // 부모별 마지막 마킹 시간을 기록하여 너무 잦은 마킹을 제한할 수 있습니다.
+ private static Dictionary s_LastMarkedTime = new Dictionary();
+
+ // 이 인스턴스가 재빌드를 예약했는지 표시하는 플래그
+ private bool m_PendingRebuild = false;
+
+ [SerializeField]
+ [Tooltip("부모 체인 상위도 함께 마킹할지 여부. true이면 마크 체인을 따라 위로 올라가며 마킹합니다.")]
+ private bool markParentChain = false;
+
+ [SerializeField]
+ [Tooltip("마킹할 부모 체인의 깊이. 0 이하이면 제한 없음(최대16으로 내부 제한).")]
+ private int markChainDepth = 1;
+
+ [SerializeField]
+ [Tooltip("같은 부모에 대해 마킹을 다시 수행하기 전에 최소 대기 시간(초). 0이면 제한 없음.")]
+ private float minMarkInterval = 0f;
+
///
/// 이 컴포넌트가 부착된 GameObject의 부모 RectTransform에 대한 참조입니다.
///
@@ -36,9 +59,9 @@ namespace Gpm.Ui
{
get
{
- if(m_Parent == null)
+ if (m_Parent == null)
{
- if(transform.parent != null)
+ if (transform.parent != null)
{
m_Parent = transform.parent.GetComponentInParent();
}
@@ -56,7 +79,9 @@ namespace Gpm.Ui
{
base.OnRectTransformDimensionsChange();
- SetDirty(true);
+ // 즉시 강제 재빌드를 하지 않고, 동일 프레임 내 중복 호출을 방지하며
+ // 다음 프레임에 일괄 처리하도록 예약합니다.
+ ScheduleRebuild();
}
///
@@ -82,9 +107,101 @@ namespace Gpm.Ui
}
}
+ ///
+ /// 이 인스턴스에서 부모 레이아웃 재빌드를 예약합니다.
+ /// 동일 프레임 내 중복 예약을 방지합니다.
+ /// 실제 마킹은 LateUpdate에서 수행됩니다(프레임 단위 배치).
+ ///
+ private void ScheduleRebuild()
+ {
+ m_PendingRebuild = true;
+ }
+
+ ///
+ /// LateUpdate에서 예약된 재빌드를 일괄 처리합니다.
+ /// 동일 프레임 내 동일 부모에 대해 중복 호출을 방지하기 위해 정적 캐시를 사용합니다.
+ /// 추가 옵션: 부모 체인 마킹, 부모별 최소 재마킹 간격.
+ ///
+ private void LateUpdate()
+ {
+ if (!m_PendingRebuild)
+ return;
+
+ // 프레임이 바뀌면 정적 캐시를 리셋
+ if (s_LastFrameMarked != Time.frameCount)
+ {
+ s_LastFrameMarked = Time.frameCount;
+ s_MarkedParents.Clear();
+ }
+
+ RectTransform parent = rectParent;
+ if (parent == null)
+ {
+ m_PendingRebuild = false;
+ return;
+ }
+
+ // 내부적으로 체인 깊이에 음수나 0이 들어오면 무제한으로 처리하지만 안전을 위해 상한을 둡니다.
+ int maxDepth = markChainDepth <= 0 ? 16 : Mathf.Clamp(markChainDepth, 1, 16);
+
+ if (markParentChain)
+ {
+ // 부모 체인 따라 올라가며 마킹
+ RectTransform current = parent;
+ int depth = 0;
+ while (current != null && depth < maxDepth)
+ {
+ TryMarkParent(current);
+
+ // 다음 상위 부모 검색
+ Transform next = current.parent;
+ current = next != null ? next.GetComponent() : null;
+ depth++;
+ }
+ }
+ else
+ {
+ TryMarkParent(parent);
+ }
+
+ m_PendingRebuild = false;
+ }
+
+ ///
+ /// 주어진 부모 RectTransform을 마킹(및 시간 제한 검사)합니다.
+ ///
+ /// 마킹 대상 부모
+ private void TryMarkParent(RectTransform parent)
+ {
+ if (parent == null)
+ return;
+
+ // 이미 같은 프레임에 같은 부모를 마킹했다면 중복 방지
+ if (s_MarkedParents.Contains(parent))
+ return;
+
+ // 최소 재마킹 간격 검사
+ if (minMarkInterval > 0f)
+ {
+ if (s_LastMarkedTime.TryGetValue(parent, out float lastTime))
+ {
+ if (Time.unscaledTime - lastTime < minMarkInterval)
+ return; // 아직 대기 시간 미만
+ }
+ }
+
+ s_MarkedParents.Add(parent);
+ s_LastMarkedTime[parent] = Time.unscaledTime;
+ LayoutRebuilder.MarkLayoutForRebuild(parent);
+ }
+
protected override void OnTransformParentChanged()
{
- m_Parent = transform.parent.GetComponentInParent();
+ // 부모가 없을 수 있으므로 null 확인
+ if (transform.parent != null)
+ m_Parent = transform.parent.GetComponentInParent();
+ else
+ m_Parent = null;
}
#if UNITY_EDITOR
@@ -94,6 +211,7 @@ namespace Gpm.Ui
///
protected override void OnValidate()
{
+ // 에디터에서는 즉시 반영이 필요할 수 있으므로 기존 동작 유지
SetDirty(false);
}
#endif
diff --git a/Assets/Scripts/UVC/UI/List/Tree/TreeList.cs b/Assets/Scripts/UVC/UI/List/Tree/TreeList.cs
index 8817ed66..478ba0b6 100644
--- a/Assets/Scripts/UVC/UI/List/Tree/TreeList.cs
+++ b/Assets/Scripts/UVC/UI/List/Tree/TreeList.cs
@@ -75,12 +75,12 @@ namespace UVC.UI.List.Tree
///
/// 모든 아이템을 1차원으로 평탄화한 리스트 (범위 선택용)
///
- protected List allItemDatasFlattened = new List();
+ protected List allItemDataFlattened = new List();
///
/// 평탄화된 아이템 데이터 리스트 (읽기 전용)
///
- public List AllItemsFlattened => allItemDatasFlattened;
+ public List AllItemDataFlattened => allItemDataFlattened;
///
/// 루트 레벨 아이템 리스트
@@ -148,6 +148,12 @@ namespace UVC.UI.List.Tree
private void Update()
{
+ // Escape 키 입력 감지 - 선택 해제
+ if (Input.GetKeyDown(KeyCode.Escape))
+ {
+ HandleEscapeKeyPressed();
+ }
+
// Delete 키 입력 감지
if (Input.GetKeyDown(KeyCode.Delete))
{
@@ -177,6 +183,34 @@ namespace UVC.UI.List.Tree
}
}
+ ///
+ /// Escape 키 입력 시 모든 선택 해제
+ ///
+ /// 동작:
+ /// 1. 선택된 아이템이 있는지 확인
+ /// 2. ClearSelection() 호출하여 모든 선택 해제
+ /// 3. lastSelectedItem 초기화
+ ///
+ /// 용도: 사용자가 선택을 취소하고 싶을 때 빠른 해제
+ ///
+ private void HandleEscapeKeyPressed()
+ {
+ // 선택된 아이템이 없으면 아무것도 하지 않음
+ if (selectedItems.Count == 0)
+ {
+ return;
+ }
+
+ // 디버그 로그
+ Debug.Log($"Escape key pressed. Clearing {selectedItems.Count} selected item(s).");
+
+ // 모든 선택 해제
+ ClearSelection();
+
+ // 마지막 선택 아이템 초기화
+ lastSelectedItem = null;
+ }
+
///
/// Delete 키 입력 시 선택된 모든 아이템 삭제
///
@@ -519,7 +553,11 @@ namespace UVC.UI.List.Tree
/// 복제할 원본 아이템 데이터
public void AddCloneItem(TreeListItemData data)
{
- TreeListItemData clone = data.Clone();
+ TreeListItemData clone = data.CloneWithChild();
+
+ //호출 순서 중요
+ //data에 해당하는 TreeListItem 찾기
+ TreeListItem? item = allItemFlattened.FirstOrDefault(x => x.Data == data);
//changedData 부모에게 알림
if (data.Parent != null)
@@ -531,10 +569,9 @@ namespace UVC.UI.List.Tree
RemoveItem(data);
}
- //data에 해당하는 TreeListItem 찾기
- TreeListItem? item = allItemFlattened.FirstOrDefault(x => x.Data == data);
if (item != null) item.Delete(true);
+
AddItem(clone);
}
@@ -546,7 +583,11 @@ namespace UVC.UI.List.Tree
/// 삽입 위치
public void AddCloneItemAt(TreeListItemData data, int index)
{
- TreeListItemData clone = data.Clone();
+ TreeListItemData clone = data.CloneWithChild();
+
+ //호출 순서 중요
+ //data에 해당하는 TreeListItem 찾기
+ TreeListItem? item = allItemFlattened.FirstOrDefault(x => x.Data == data);
//changedData 부모에게 알림
if (data.Parent != null)
@@ -558,8 +599,6 @@ namespace UVC.UI.List.Tree
RemoveItem(data);
}
- //data에 해당하는 TreeListItem 찾기
- TreeListItem? item = allItemFlattened.FirstOrDefault(x => x.Data == data);
if (item != null) item.Delete(true);
AddItemAt(clone, index);
@@ -618,6 +657,25 @@ namespace UVC.UI.List.Tree
}
}
+ ///
+ /// 컬렉션에서 모든 항목을 지우고 관련 리소스를 해제합니다.
+ ///
+ /// 이 메서드는 컬렉션에서 모든 항목을 제거하고, 내부 데이터 구조를 지우고,
+ /// 메서드를 매개변수로 호출하여 각 항목을 삭제합니다.
+ public void ClearItems()
+ {
+ foreach (var item in allItemFlattened)
+ {
+ item.Delete(true);
+ }
+
+ allItemFlattened.Clear();
+ allItemDataFlattened.Clear();
+ items.Clear();
+ selectedItems.Clear();
+ }
+
///
/// 모든 아이템을 1차원 리스트로 평탄화
///
@@ -631,7 +689,7 @@ namespace UVC.UI.List.Tree
internal void UpdateFlattenedItemDataList()
{
// 기존 평탄화 리스트 비우기
- allItemDatasFlattened.Clear();
+ allItemDataFlattened.Clear();
// root의 모든 직접 자식을 순회
// (손자, 증손자는 재귀로 처리됨)
@@ -642,9 +700,9 @@ namespace UVC.UI.List.Tree
}
allItemFlattened.Clear();
- foreach (var data in allItemDatasFlattened)
+ foreach (var data in allItemDataFlattened)
{
- var item = root.GetComponentsInChildren().FirstOrDefault(x => x.Data == data);
+ var item = root.GetComponentsInChildren(true).FirstOrDefault(x => x.Data == data);
if (item != null)
{
allItemFlattened.Add(item);
@@ -666,7 +724,7 @@ namespace UVC.UI.List.Tree
private void AddItemDataToFlattened(TreeListItemData data)
{
// 현재 아이템을 평탄화 리스트에 추가
- allItemDatasFlattened.Add(data);
+ allItemDataFlattened.Add(data);
// 현재 아이템의 모든 자식을 순회
foreach (var child in data.Children)
@@ -768,10 +826,10 @@ namespace UVC.UI.List.Tree
private void SelectRange(TreeListItemData startItem, TreeListItemData endItem)
{
// 평탄화 리스트에서 시작 아이템의 위치(인덱스) 찾기
- int startIndex = allItemDatasFlattened.IndexOf(startItem);
+ int startIndex = allItemDataFlattened.IndexOf(startItem);
// 평탄화 리스트에서 끝 아이템의 위치(인덱스) 찾기
- int endIndex = allItemDatasFlattened.IndexOf(endItem);
+ int endIndex = allItemDataFlattened.IndexOf(endItem);
// 두 아이템 모두 리스트에 없으면 종료
if (startIndex == -1 || endIndex == -1)
@@ -789,7 +847,7 @@ namespace UVC.UI.List.Tree
// i = minIndex부터 i = maxIndex까지 (포함)
for (int i = minIndex; i <= maxIndex; i++)
{
- SelectItem(allItemDatasFlattened[i]);
+ SelectItem(allItemDataFlattened[i]);
}
}
@@ -944,5 +1002,33 @@ namespace UVC.UI.List.Tree
Debug.Log($"Item '{draggedItem.Name}' dropped on '{(targetItem?.Name ?? "Root")}'");
}
+ ///
+ /// 지정한 데이터 항목을 트리에서 찾아 부모 체인을 펼치고 선택합니다.
+ /// 기존 선택이 있으면 해제합니다.
+ ///
+ /// 선택 및 표시할 데이터 (트리의 실제 데이터 참조)
+ /// true면 기존 선택을 모두 해제
+ public void RevealAndSelectItem(TreeListItemData? data, bool clearExisting = true)
+ {
+ if (data == null) return;
+
+ if (clearExisting)
+ {
+ ClearSelection();
+ }
+
+ // 부모 체인 펼치기
+ var parent = data.Parent;
+ while (parent != null)
+ {
+ parent.IsExpanded = true;
+ parent = parent.Parent;
+ }
+
+ // 평탄화 리스트 갱신 및 대상 선택
+ UpdateFlattenedItemDataList();
+ SelectItem(data);
+ }
+
}
}
diff --git a/Assets/Scripts/UVC/UI/List/Tree/TreeListDragDropManager.cs b/Assets/Scripts/UVC/UI/List/Tree/TreeListDragDropManager.cs
index 923bd419..c8cc2944 100644
--- a/Assets/Scripts/UVC/UI/List/Tree/TreeListDragDropManager.cs
+++ b/Assets/Scripts/UVC/UI/List/Tree/TreeListDragDropManager.cs
@@ -5,6 +5,16 @@ using UnityEngine;
namespace UVC.UI.List.Tree
{
+ ///
+ /// 드래그 위치 표현. 위/안쪽/아래.
+ ///
+ public enum TreeDropPosition
+ {
+ Above,
+ InsideAsChild,
+ Below
+ }
+
///
/// 트리 리스트의 드래그 & 드롭 상호작용을 상태와 이벤트로 중재하는 관리자입니다.
///
@@ -19,9 +29,9 @@ namespace UVC.UI.List.Tree
///
/// 이벤트 흐름:
/// - StartDrag → OnDragStarted(once)
- /// - OnDragOver → OnDragEntered(repeat, hover 대상에 따라 여러 번)
- /// - TryDrop 유효 시 → OnDropped → EndDrag → OnDragEnded
- /// - TryDrop 무효/취소 시 → EndDrag → OnDragEnded
+ /// - OnDragOver/OnDragHovered → OnDragEntered(repeat)
+ /// - TryDrop 유효 시 → OnDropped → (caller) EndDrag → OnDragEnded
+ /// - TryDrop 무효/취소 시 → (caller) EndDrag → OnDragEnded
///
public class TreeListDragDropManager
{
@@ -36,39 +46,35 @@ namespace UVC.UI.List.Tree
public bool IsDragging { get; private set; }
///
- /// 드래그 시작 시 1회 발생하는 이벤트입니다.
- ///
- ///
+ /// 드래그 시작 시1회 발생하는 이벤트입니다.
/// 핸들러 시그니처: (TreeListItemData dragged)
- ///
+ ///
public Action? OnDragStarted;
///
/// 드래그 진행 중 마우스가 특정 아이템 위에 있을 때 반복적으로 발생하는 이벤트입니다.
- /// 빈 공간 위라면 targetItem은 null이 될 수 있습니다.
- ///
- ///
+ /// 빈 공간 위라면 targetItem은 null이 될 수 있습니다.
/// 핸들러 시그니처: (TreeListItemData dragged, TreeListItemData? targetItem)
- /// 이벤트 발생 빈도가 높으므로, 처리 로직은 가볍게 유지하세요.
- ///
+ ///
public Action? OnDragEntered;
///
- /// 드래그가 종료될 때 발생하는 이벤트입니다(드롭 성공/실패/취소 포함).
+ /// 드래그 진행 중 hover 대상과 의도된 드롭 위치를 함께 통지합니다.
+ /// 핸들러 시그니처: (TreeListItemData dragged, TreeListItemData? targetItem, TreeDropPosition pos)
+ ///
+ public Action? OnDragHovered;
+
+ ///
+ /// 드래그가 종료될 때 발생하는 이벤트입니다(드롭 성공/실패/취소 포함).
+ /// 핸들러 시그니처: (TreeListItemData dragged)
///
- ///
- /// 핸들러 시그니처: (TreeListItemData dragged)
- /// 드롭 성공 시에는 OnDropped 이후에 호출됩니다.
- ///
public Action? OnDragEnded;
///
/// 유효성 검사를 통과한 드롭이 확정될 때 발생하는 이벤트입니다.
- ///
- ///
- /// 핸들러 시그니처: (TreeListItemData dragged, TreeListItemData? target)
+ /// 핸들러 시그니처: (TreeListItemData dragged, TreeListItemData? target)
/// 이 이벤트에서 실제 데이터 구조 변경(이동/부모 변경/정렬)을 수행하세요.
- ///
+ ///
public Action? OnDropped;
///
@@ -103,6 +109,23 @@ namespace UVC.UI.List.Tree
OnDragEntered?.Invoke(DraggedItem, targetItem);
}
+ ///
+ /// 드래그 중 hover 대상과 드롭 위치를 함께 통지합니다.
+ ///
+ /// 현재 마우스 아래의 아이템(null 가능)
+ /// 의도된 드롭 위치
+ public void OnDragOver(TreeListItemData? targetItem, TreeDropPosition position)
+ {
+ if (!IsDragging || DraggedItem == null)
+ {
+ return;
+ }
+
+ // 하위 호환 이벤트도 호출
+ OnDragEntered?.Invoke(DraggedItem, targetItem);
+ OnDragHovered?.Invoke(DraggedItem, targetItem, position);
+ }
+
///
/// 드래그를 종료합니다. 드래그 중이 아니면 아무 동작도 하지 않습니다.
///
@@ -122,17 +145,11 @@ namespace UVC.UI.List.Tree
///
/// 드래그된 아이템을 대상 아이템에 드롭 시도합니다.
/// 유효성 검사(자기 자신/조상에게 드롭 금지)를 통과한 경우에만 OnDropped를 발생시킵니다.
+ /// EndDrag는 호출 측(뷰/핸들러)에서 호출해야 합니다.
///
/// 드롭 대상 아이템. 루트 레벨로 드롭하려면 null.
- ///
- /// 대상 부모 내 삽입 위치. -1이면 끝에 추가 의도.
- /// 현재 구현에서는 이 값이 내부에서 사용되지 않으며, 필요 시 이벤트 모델 확장이 필요합니다.
- ///
- /// 드롭을 성공적으로 수락하여 이벤트를 발생시켰으면 true, 그 외는 false.
- ///
- /// 성공 시 순서: OnDropped(once) → EndDrag → OnDragEnded.
- /// 실패/무효 시: EndDrag → OnDragEnded.
- ///
+ /// 미사용 예약 필드. -1이면 끝에 추가 의도.
+ /// OnDropped가 발생하면 true, 아니면 false.
public bool TryDrop(TreeListItemData? targetItem, int insertIndex = -1)
{
if (!IsDragging || DraggedItem == null)
@@ -143,33 +160,22 @@ namespace UVC.UI.List.Tree
// 자기 자신에게 드롭하는 경우 무시
if (targetItem != null && targetItem == DraggedItem)
{
- EndDrag();
return false;
}
// 순환 참조 검사 (드래그 아이템이 드롭 대상의 부모인 경우)
if (targetItem != null && IsAncestorOf(DraggedItem, targetItem))
{
- EndDrag();
return false;
}
- // 주의: insertIndex는 현재 이벤트로 전달되지 않습니다(모델 확장 필요).
OnDropped?.Invoke(DraggedItem, targetItem);
-
- EndDrag();
return true;
}
///
/// 첫 번째 아이템이 두 번째 아이템의 조상인지 확인합니다.
///
- /// 조상일 가능성이 있는 아이템.
- /// 후손일 가능성이 있는 아이템.
- /// 조상-후손 관계이면 true, 아니면 false.
- ///
- /// 상향 탐색으로 O(h) 시간 복잡도입니다(h: 트리 높이).
- ///
public static bool IsAncestorOf(TreeListItemData potentialAncestor, TreeListItemData potentialDescendant)
{
var current = potentialDescendant.Parent;
@@ -187,7 +193,6 @@ namespace UVC.UI.List.Tree
return false;
}
-
///
/// 드래그 & 드롭 상태를 초기화합니다.
///
diff --git a/Assets/Scripts/UVC/UI/List/Tree/TreeListItem.cs b/Assets/Scripts/UVC/UI/List/Tree/TreeListItem.cs
index aabe3745..dea3cf0a 100644
--- a/Assets/Scripts/UVC/UI/List/Tree/TreeListItem.cs
+++ b/Assets/Scripts/UVC/UI/List/Tree/TreeListItem.cs
@@ -247,7 +247,11 @@ namespace UVC.UI.List.Tree
else if (changedType == ChangedType.AddCloneChild)
{
//데이터 복사
- TreeListItemData clone = changedData.Clone();
+ TreeListItemData clone = changedData.CloneWithChild();
+
+ //호출 순서 중요
+ // TreeListItem 제거
+ TreeListItem? item = treeList.AllItemFlattened.FirstOrDefault(x => x.Data == changedData);
//changedData 부모에게 알림 - UI 갱신 용
if (changedData.Parent != null)
@@ -259,8 +263,6 @@ namespace UVC.UI.List.Tree
treeList.RemoveItem(changedData);
}
- // TreeListItem 제거
- TreeListItem? item = treeList.AllItemFlattened.FirstOrDefault(x => x.Data == changedData);
if (item != null) item.Delete(true);
data.AddChild(clone);
@@ -268,7 +270,11 @@ namespace UVC.UI.List.Tree
else if (changedType == ChangedType.AddCloneAtChild)
{
//데이터 복사
- TreeListItemData clone = changedData.Clone();
+ TreeListItemData clone = changedData.CloneWithChild();
+
+ //호출 순서 중요
+ // TreeListItem 제거
+ TreeListItem? item = treeList.AllItemFlattened.FirstOrDefault(x => x.Data == changedData);
//changedData 부모에게 알림
if (changedData.Parent != null)
@@ -280,8 +286,6 @@ namespace UVC.UI.List.Tree
treeList.RemoveItem(changedData);
}
- // TreeListItem 제거
- TreeListItem? item = treeList.AllItemFlattened.FirstOrDefault(x => x.Data == changedData);
if (item != null) item.Delete(true);
data.AddChildAt(clone, index);
diff --git a/Assets/Scripts/UVC/UI/List/Tree/TreeListItemData.cs b/Assets/Scripts/UVC/UI/List/Tree/TreeListItemData.cs
index 48a9b300..569e54b7 100644
--- a/Assets/Scripts/UVC/UI/List/Tree/TreeListItemData.cs
+++ b/Assets/Scripts/UVC/UI/List/Tree/TreeListItemData.cs
@@ -29,7 +29,7 @@ namespace UVC.UI.List.Tree
/// 리스트를 비웁니다(연결만 끊는 수준을 넘어 자식도 정리됨).
/// - AddClone계열은 전달된 원본 child를 Dispose한 뒤 복제본을 추가합니다(파괴적).
///
- public class TreeListItemData: IDisposable
+ public class TreeListItemData : IDisposable
{
#region 이벤트 (Events)
@@ -150,7 +150,7 @@ namespace UVC.UI.List.Tree
}
}
-
+
/// 부모 데이터(내부 전용).
internal TreeListItemData? Parent
@@ -236,7 +236,7 @@ namespace UVC.UI.List.Tree
///
/// 복제 및 대체할 원본 자식.
public void AddCloneChild(TreeListItemData child)
- {
+ {
NotifyDataChanged(ChangedType.AddCloneChild, child); // UI에 트리 구조 변경 알림
}
@@ -247,7 +247,7 @@ namespace UVC.UI.List.Tree
/// 복제 및 대체할 원본 자식.
/// 삽입 인덱스(0 기반).
public void AddCloneAtChild(TreeListItemData child, int index)
- {
+ {
NotifyDataChanged(ChangedType.AddCloneAtChild, child, index); // UI에 트리 구조 변경 알림
}
@@ -378,9 +378,9 @@ namespace UVC.UI.List.Tree
if (_parent != null && _parent.Children.Contains(this)) _parent.Children.Remove(this);
_parent = null;
if (OnDataChanged != null) OnDataChanged = null;
- if(OnSelectionChanged != null) OnSelectionChanged = null;
- if(OnClickAction != null) OnClickAction = null;
- if(Children != null)
+ if (OnSelectionChanged != null) OnSelectionChanged = null;
+ if (OnClickAction != null) OnClickAction = null;
+ if (Children != null)
{
Children.Clear();
}
@@ -390,7 +390,7 @@ namespace UVC.UI.List.Tree
/// 깊은 복제본을 생성합니다(자식까지 재귀 복제).
///
/// 복제된 새 인스턴스.
- public TreeListItemData Clone()
+ public TreeListItemData CloneWithChild()
{
TreeListItemData clone = new TreeListItemData();
clone.Name = this.Name;
@@ -399,11 +399,25 @@ namespace UVC.UI.List.Tree
clone.IsSelected = this.IsSelected;
foreach (var child in this.Children)
{
- clone.AddChild(child.Clone());
+ clone.AddChild(child.CloneWithChild());
}
return clone;
}
+ ///
+ /// 현재 인스턴스의 복사본인 의 새 인스턴스를 생성합니다.
+ ///
+ /// 현재 인스턴스와 동일한 속성 값을 가진 새 객체를 생성합니다.
+ public TreeListItemData Clone()
+ {
+ TreeListItemData clone = new TreeListItemData();
+ clone.Name = this.Name;
+ clone.Option = this.Option;
+ clone.IsExpanded = this.IsExpanded;
+ clone.IsSelected = this.IsSelected;
+ return clone;
+ }
+
#endregion
}
diff --git a/Assets/Scripts/UVC/UI/Window/HierarchyWindow.cs b/Assets/Scripts/UVC/UI/Window/HierarchyWindow.cs
index 100c3b7a..23e08aff 100644
--- a/Assets/Scripts/UVC/UI/Window/HierarchyWindow.cs
+++ b/Assets/Scripts/UVC/UI/Window/HierarchyWindow.cs
@@ -1,18 +1,299 @@
-using System;
-using System.Collections.Generic;
+#nullable enable
+using Cysharp.Threading.Tasks;
+using DG.Tweening;
using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using System.Threading;
+using TMPro;
using UnityEngine;
+using UnityEngine.UI;
using UVC.UI.List.Tree;
namespace UVC.UI.Window
{
- public class HierarchyWindow: MonoBehaviour
+ public class HierarchyWindow : MonoBehaviour
{
[SerializeField]
protected TreeList treeList;
+ ///
+ /// 검색 결과 용 목록
+ ///
+ [SerializeField]
+ protected TreeList treeListSearch;
+
+ [SerializeField]
+ protected TMP_InputField inputField;
+
+ [SerializeField]
+ protected Button clearTextButton;
+
+ [SerializeField]
+ protected Image loadingImage;
+
+ // 검색 목록에서 선택된 항목(클론된 데이터)
+ private TreeListItemData? selectedSearchItem;
+
+ // 검색 작업 상태
+ private CancellationTokenSource? searchCts;
+ private bool isSearching = false;
+ private float searchProgress = 0f; //unused for visual progress now but kept for future
+
+ [SerializeField]
+ [Tooltip("로딩 아이콘 회전 속도(도/초)")]
+ private float loadingRotateSpeed = 360f;
+
+ [SerializeField]
+ [Tooltip("로딩 이미지의 채우기 애니메이션 속도(사이클/초)")]
+ private float loadingFillCycle = 0.5f; // cycles per second (full0->1->0 cycle per second)
+ //loadingRotateSpeed 360 일때, loadingFillCycle를 0.5 보다 높게 설정하면 이상해 보임
+
+ // DOTween tweens
+ private Tween? loadingRotationTween;
+ private Tween? loadingFillTween;
+
+ private void Awake()
+ {
+ loadingImage.gameObject.SetActive(false);
+
+ treeListSearch.gameObject.SetActive(false);
+ inputField.onSubmit.AddListener(OnInputFieldSubmit);
+
+ // 검색 리스트의 선택 변경을 감지
+ if (treeListSearch != null)
+ {
+ treeListSearch.OnItemSelectionChanged += OnSearchSelectionChanged;
+ }
+
+ clearTextButton.onClick.AddListener(() =>
+ {
+ inputField.text = string.Empty;
+ // 취소
+ CancelSearch();
+
+ treeListSearch.gameObject.SetActive(false);
+ treeList.gameObject.SetActive(true);
+
+ // 검색에서 선택한 항목이 있으면 원본 트리에서 동일 항목을 선택하고 펼침
+ if (selectedSearchItem != null && treeList != null)
+ {
+ // 원본 데이터 찾기 (이 프로젝트의 Equals는 Name 기반이므로 Name으로 검색)
+ var target = treeList.AllItemDataFlattened.FirstOrDefault(i => i.Name == selectedSearchItem.Name);
+ if (target != null)
+ {
+ // TreeList에 새로 추가된 유틸리티를 이용해 부모 체인을 펼치고 선택 처리
+ treeList.RevealAndSelectItem(target, true);
+ }
+
+ selectedSearchItem = null;
+ }
+ });
+ }
+
+ private void Update()
+ {
+ // DOTween handles the animations; no per-frame logic needed here
+ }
+
+ private void StartLoadingAnimation()
+ {
+ if (loadingImage == null) return;
+
+ // Ensure any previous tweens are killed
+ StopLoadingAnimation();
+
+ loadingImage.fillAmount = 0f;
+ loadingImage.transform.localRotation = Quaternion.identity;
+ loadingImage.gameObject.SetActive(true);
+
+ // Rotation: rotate360 degrees repeatedly. Duration for one360 rotation (seconds)
+ float rotDuration = (loadingRotateSpeed != 0f) ? (360f / Mathf.Abs(loadingRotateSpeed)) : 1f;
+ // Use LocalAxisAdd to rotate continuously
+ loadingRotationTween = loadingImage.transform.DOLocalRotate(new Vector3(0f, 0f, -360f), rotDuration, RotateMode.LocalAxisAdd)
+ .SetEase(Ease.Linear)
+ .SetLoops(-1, LoopType.Restart);
+
+ // Fill animation:0 ->1 ->0 in one cycle. Forward duration = half cycle
+ // For a0->1 then jump-to-0 repeat, use Restart loop and full cycle duration
+ float fullDuration = (loadingFillCycle > 0f) ? (1f / loadingFillCycle) :1f;
+ loadingFillTween = DOTween.To(() => loadingImage.fillAmount, x => loadingImage.fillAmount = x, 1f, fullDuration)
+ .SetEase(Ease.InOutSine)
+ .SetLoops(-1, LoopType.Yoyo);
+ }
+
+ private void StopLoadingAnimation()
+ {
+ if (loadingRotationTween != null)
+ {
+ loadingRotationTween.Kill();
+ loadingRotationTween = null;
+ }
+
+ if (loadingFillTween != null)
+ {
+ loadingFillTween.Kill();
+ loadingFillTween = null;
+ }
+
+ if (loadingImage != null)
+ {
+ loadingImage.gameObject.SetActive(false);
+ // reset transform / fill
+ loadingImage.transform.localRotation = Quaternion.identity;
+ loadingImage.fillAmount = 0f;
+ }
+ }
+
+ private void CancelSearch()
+ {
+ if (searchCts != null)
+ {
+ try { searchCts.Cancel(); } catch { }
+ searchCts.Dispose();
+ searchCts = null;
+ }
+ isSearching = false;
+ searchProgress = 0f;
+
+ // stop DOTween animations
+ StopLoadingAnimation();
+ }
+
+ private async void OnSearchSelectionChanged(TreeListItemData data, bool isSelected)
+ {
+ if (isSelected)
+ {
+ selectedSearchItem = data;
+ }
+ else if (selectedSearchItem == data)
+ {
+ selectedSearchItem = null;
+ }
+ }
+
+ private void OnInputFieldSubmit(string text)
+ {
+ // 기존 검색 취소
+ CancelSearch();
+
+ // 검색어가 있으면 검색 결과 목록 표시
+ if (!string.IsNullOrEmpty(text))
+ {
+ treeListSearch.gameObject.SetActive(true);
+ treeList.gameObject.SetActive(false);
+
+ // 시작 애니메이션
+ StartLoadingAnimation();
+
+ searchCts = new CancellationTokenSource();
+ // 비동기 검색 실행(UITask 스타일: 메인스레드에서 작업을 분할하여 UI가 멈추지 않게 함)
+ _ = PerformSearchAsync(text, searchCts.Token);
+ }
+ else
+ {
+ treeListSearch.gameObject.SetActive(false);
+ treeList.gameObject.SetActive(true);
+ }
+
+ }
+
+ ///
+ /// 검색을 메인 스레드에서 분할 처리하여 UI 업데이트(로딩 애니메이션)가 가능하도록 구현합니다.
+ ///
+ private async UniTaskVoid PerformSearchAsync(string text, CancellationToken token)
+ {
+ isSearching = true;
+ searchProgress = 0f;
+
+ var results = new System.Collections.Generic.List();
+
+ var sourceList = treeList?.AllItemDataFlattened;
+ if (sourceList == null)
+ {
+ isSearching = false;
+ StopLoadingAnimation();
+ return;
+ }
+
+ int total = sourceList.Count;
+ if (total == 0)
+ {
+ isSearching = false;
+ StopLoadingAnimation();
+ return;
+ }
+
+ // 소문자 비교 준비
+ string lower = text.ToLowerInvariant();
+
+ // 분할 처리: 일정 갯수마다 await으로 제어권을 반환
+ const int chunk = 100; // 한 번에 처리할 항목 수 (조절 가능)
+ for (int i = 0; i < total; i++)
+ {
+ token.ThrowIfCancellationRequested();
+
+ var item = sourceList[i];
+ if (!string.IsNullOrEmpty(item.Name) && item.Name.ToLowerInvariant().Contains(lower))
+ {
+ results.Add(item);
+ }
+
+ // 진행도 업데이트 (내부 사용)
+ if ((i % chunk) == 0)
+ {
+ searchProgress = (float)i / (float)total;
+ await UniTask.Yield(PlayerLoopTiming.Update);
+ }
+ }
+
+ // 최종 진행도
+ searchProgress = 1f;
+
+ // UI 반영은 메인 스레드에서
+ await UniTask.SwitchToMainThread();
+
+ try
+ {
+ if (token.IsCancellationRequested) return;
+
+ treeListSearch.ClearItems();
+ foreach (var r in results)
+ {
+ treeListSearch.AddItem(r.Clone());
+ }
+
+ // 로딩 종료
+ isSearching = false;
+ searchProgress = 0f;
+ StopLoadingAnimation();
+ }
+ catch (System.Exception ex)
+ {
+ Debug.LogError($"PerformSearchAsync error: {ex}");
+ }
+ finally
+ {
+ if (searchCts != null)
+ {
+ searchCts.Dispose();
+ searchCts = null;
+ }
+ }
+ }
+
+
+ private void OnDestroy()
+ {
+ inputField.onSubmit.RemoveListener(OnInputFieldSubmit);
+ clearTextButton.onClick.RemoveAllListeners();
+
+ if (treeListSearch != null)
+ {
+ treeListSearch.OnItemSelectionChanged -= OnSearchSelectionChanged;
+ }
+
+ CancelSearch();
+ }
+
public void AddItem(TreeListItemData data)
{
treeList.AddItem(data);
diff --git a/instruction.md b/instruction.md
new file mode 100644
index 00000000..a7eb9d59
--- /dev/null
+++ b/instruction.md
@@ -0,0 +1,633 @@
+# Unity 개발 지침(MVVM/MVC · 성능 · 주석 · 직렬화 · Nullable)
+
+본 지침은 Unity에서 디자인(View)과 로직(Model/Service/ViewModel)을 분리하고, 성능과 주석 품질을 일관되게 유지하기 위한 실전 규칙과 샘플 코드를 제공합니다. 현 프로젝트 스타일(#nullable enable, UniTask, DOTween, 한국어 주석)에 맞춰 작성되었습니다.
+
+## 1) 권장 아키텍처(요약)
+- View(UI): 데이터 바인딩/이벤트 라우팅만 담당. 연산/상태 보유 금지.
+- Model/Service/ViewModel: 상태, 연산, 데이터 흐름을 담당. MonoBehaviour 비의존(테스트 용이).
+- 느슨한 결합: 인터페이스/이벤트/메시지로 연결해 교체·테스트 쉬움.
+- Prefab 경로 직렬화: GameObject 직접 참조 대신 문자열 경로 보관, 런타임 로드.
+- C# Nullable: 파일 선두에 `#nullable enable`, 모든 참조형에 `?`를 명시하고 널 처리.
+- 비동기: 전역적으로 `Cysharp.Threading.Tasks.UniTask` 사용. `Task`/코루틴 대신 UniTask 우선, `CancellationToken` 전달.
+- 패턴 선택:
+ - MVVM: UI 상태/양방향 동기화가 많을 때 권장.
+ - MVC: 입력 → 도메인 액션 → UI 반영 흐름이 단순할 때 권장.
+
+## 2) 폴더 구조(예시)
+- `Assets/Scripts/Architecture`
+ - `Model`, `View`, `ViewModel(or Controller)`, `Services(Loader/Repository)`, `Serialization`
+- `Assets/Prefabs`, `Assets/Resources`(또는 Addressables)
+- Scene 수와 무관하게 ViewModel은 Scene에 종속되지 않게 유지.
+
+## 3) 주석·문서화 원칙(C# XML 스타일)
+- 클래스 주석: 역할/책임/사용 예를 자세히.
+- 메서드 주석: 요약 + 파라미터/반환/예외. 복잡 로직만 상세, 단순 로직은 한 줄.
+- 속성 주석: 한 줄 요약.
+- 코드와 불일치한 주석은 즉시 수정(“왜 변경했는지”를 남김).
+- 인텔리센스 문서 출력:
+ - 프로젝트 속성 > Build > __XML documentation file__
+ - 솔루션 전체 분석: __Tools > Options > Text Editor > C# > Advanced > Enable full solution analysis__
+ - 정적 분석: __Analyze > Run Code Analysis__
+ - 경고 엄격: 프로젝트 속성 > Build > __Treat warnings as errors__
+
+## 4) 성능 체크리스트(UI/게임 루프)
+- Update에서 GC 할당 금지: LINQ/문자열 연결/클로저 생성 지양, 캐시·풀 사용.
+- DOTween: 트윈 핸들 보관, 수명 종료 시 `Kill()`, `SetUpdate(true)` 사용 여부 명확화.
+- RectTransform 픽셀 정렬: 비정수 스케일/서브픽셀로 인한 블러 방지.
+- 텍스처 Import:
+ - 과도 축소/회전 시 `MipMaps` + `Trilinear`, 압축 품질 조정.
+ - 초소형 아이콘은 전용 해상도 제작(예: 10/16/24px).
+- 비동기 처리: UniTask + `CancellationToken` 지원.
+- 대량 목록: 가상화(Recycler), 청크 처리(예: 100개 처리마다 `await UniTask.Yield()`).
+- Canvas Rebuild 최소화: 대량 활성/비활성 시 부모를 잠시 비활성 후 일괄 적용, 마지막에 활성.
+- Layout 강제 재빌드 사용 절제: `LayoutRebuilder.ForceRebuildLayoutImmediate`는 배치/프레임 단위 최소 호출.
+- TextMeshPro: 기본은 오토 사이즈 비활성, 필요한 화면만 전용 폰트/사이즈 프리셋 사용.
+
+## 5) 직렬화 가이드(Prefab 경로 기반)
+- ScriptableObject/MonoBehaviour에는 GameObject 참조 대신 “경로 문자열”을 직렬화.
+- 로더 레이어는 Addressables(권장) 또는 `Resources.Load`로 추상화.
+- 경로 변환/검증 유틸은 한 곳에서 관리하고, 런타임 Null을 안전하게 처리.
+
+## 6) MVVM/MVC 선택 가이드
+- MVVM:
+ - ViewModel은 순수 C#(MonoBehaviour 비의존).
+ - 다수의 UI 상태/양방향 바인딩, 테스트·모킹 용이.
+- MVC:
+ - 입력 흐름 단순, 컨트롤러가 명령을 조정하고 View는 표시만 수행.
+
+---
+
+## 7) 샘플 코드
+
+### 7.1 Prefab 경로 직렬화 유틸(Nullable, 예제 포함)
+```c#
+#nullable enable
+using System;
+using System.Threading;
+using Cysharp.Threading.Tasks;
+using UnityEngine;
+
+namespace Architecture.Serialization
+{
+ ///
+ /// 프리팹 참조를 직렬화 친화적인 문자열 경로로 보관합니다.
+ ///
+ /// 사용 예:
+ ///
+ /// CreateSpinnerAsync(CancellationToken ct)
+ /// {
+ /// var prefab = await spinnerPrefab.LoadAsync(ct);
+ /// return prefab != null ? GameObject.Instantiate(prefab) : null;
+ /// }
+ /// ]]>
+ ///
+ ///
+ [Serializable]
+ public struct PrefabRef
+ {
+ [SerializeField] private string _path; // "UI/Spinner" (Resources) 또는 Addressables 키
+
+ /// 프리팹 경로(읽기 전용).
+ public string Path => _path ?? string.Empty;
+
+ /// 비어있는지 여부.
+ public bool IsEmpty => string.IsNullOrWhiteSpace(_path);
+
+ ///
+ /// 프리팹을 동기 로드(Resources). Addressables는 LoadAsync 사용 권장.
+ ///
+ public GameObject? Load()
+ {
+#if USE_ADDRESSABLES
+ Debug.LogWarning("Addressables 사용 시 LoadAsync를 사용하세요.");
+ return null;
+#else
+ return string.IsNullOrEmpty(_path) ? null : Resources.Load(_path);
+#endif
+ }
+
+ ///
+ /// 프리팹을 비동기 로드합니다.
+ ///
+ /// 취소 토큰.
+ public async UniTask LoadAsync(CancellationToken ct = default)
+ {
+#if USE_ADDRESSABLES
+ if (string.IsNullOrEmpty(_path)) return null;
+ var handle = UnityEngine.AddressableAssets.Addressables.LoadAssetAsync(_path);
+ try
+ {
+ await handle.Task.AsUniTask().AttachExternalCancellation(ct);
+ return handle.Status == UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationStatus.Succeeded
+ ? handle.Result
+ : null;
+ }
+ finally
+ {
+ // 필요 시 Release는 Instantiate 후에 호출합니다.
+ // Addressables.Release(handle);
+ }
+#else
+ if (string.IsNullOrEmpty(_path)) return null;
+ var request = Resources.LoadAsync(_path);
+ await request.AsUniTask(cancellationToken: ct);
+ return request.asset as GameObject;
+#endif
+ }
+
+ /// 경로를 명시적으로 설정합니다.
+ public PrefabRef(string path) => _path = path;
+ }
+}
+```
+
+
+### 7.2 Model + ViewModel(초보자용 주석 포함, 단순 로직은 간단히)
+```c#
+#nullable enable
+using System;
+using Architecture.Serialization;
+using UnityEngine;
+
+namespace Architecture.Model
+{
+ ///
+ /// 할 일 아이템 모델.
+ ///
+ /// 책임:
+ /// - 데이터 보유(Name/완료 여부/아이콘 프리팹)
+ /// - 변경 통지 이벤트 제공
+ ///
+ /// 사용 예:
+ ///
+ /// Debug.Log($"Changed: {i.Name}");
+ /// ]]>
+ ///
+ ///
+ [Serializable]
+ public sealed class TodoItem
+ {
+ /// 표시 이름.
+ public string Name { get; private set; }
+
+ /// 완료 여부.
+ public bool IsCompleted { get; private set; }
+
+ /// 아이콘 프리팹 경로.
+ public PrefabRef IconPrefab { get; private set; }
+
+ /// 모델 변경 이벤트.
+ public event Action? OnChanged;
+
+ public TodoItem(string name, bool isCompleted = false, PrefabRef iconPrefab = default)
+ {
+ Name = name;
+ IsCompleted = isCompleted;
+ IconPrefab = iconPrefab;
+ }
+
+ ///
+ /// 이름을 변경합니다.
+ ///
+ /// 새 이름.
+ public void Rename(string name)
+ {
+ if (Name == name) return; // 단순 가드
+ Name = name;
+ OnChanged?.Invoke(this);
+ }
+
+ /// 완료/미완료 토글.
+ public void ToggleCompleted()
+ {
+ IsCompleted = !IsCompleted;
+ OnChanged?.Invoke(this);
+ }
+ }
+}
+```
+```c#
+#nullable enable
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Architecture.Model;
+
+namespace Architecture.ViewModel
+{
+ ///
+ /// Todo 목록의 프레젠테이션 상태를 관리하는 ViewModel.
+ ///
+ /// 책임:
+ /// - 모델 컬렉션 보유/필터/정렬
+ /// - View에 필요한 이벤트(추가/제거/갱신) 제공
+ /// - MonoBehaviour에 의존하지 않음(테스트 용이)
+ ///
+ /// 사용 예:
+ ///
+ /// Debug.Log(item.Name);
+ /// vm.Add(new TodoItem("씬 로딩 최적화"));
+ /// ]]>
+ ///
+ ///
+ public sealed class TodoListViewModel
+ {
+ private readonly List _items = new();
+
+ /// 현재 아이템 스냅샷.
+ public IReadOnlyList Items => _items;
+
+ public event Action? OnItemAdded;
+ public event Action? OnItemRemoved;
+ public event Action? OnItemChanged;
+
+ ///
+ /// 아이템을 추가합니다.
+ ///
+ /// 추가할 모델.
+ public void Add(TodoItem item)
+ {
+ _items.Add(item);
+ item.OnChanged += HandleItemChanged;
+ OnItemAdded?.Invoke(item);
+ }
+
+ ///
+ /// 아이템을 제거합니다.
+ ///
+ /// 제거할 모델.
+ public void Remove(TodoItem item)
+ {
+ if (_items.Remove(item))
+ {
+ item.OnChanged -= HandleItemChanged;
+ OnItemRemoved?.Invoke(item);
+ }
+ }
+
+ ///
+ /// 간단한 텍스트 필터를 적용한 결과를 반환합니다.
+ ///
+ /// 포함할 텍스트(대소문자 무시).
+ public IEnumerable Filter(string keyword)
+ {
+ if (string.IsNullOrWhiteSpace(keyword)) return _items;
+ var lower = keyword.ToLowerInvariant();
+ return _items.Where(i => i.Name.ToLowerInvariant().Contains(lower));
+ }
+
+ private void HandleItemChanged(TodoItem item) => OnItemChanged?.Invoke(item);
+ }
+}
+```
+
+
+### 7.3 View(MVVM 바인딩 예, 간단·상세 주석 구분)
+```c#
+#nullable enable
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using Architecture.Model;
+using Architecture.Serialization;
+using Architecture.ViewModel;
+using Cysharp.Threading.Tasks;
+using TMPro;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace Architecture.View
+{
+ ///
+ /// TodoList의 View.
+ ///
+ /// 책임:
+ /// - ViewModel 이벤트를 구독해 UI 생성/갱신
+ /// - 사용자 입력을 ViewModel에 전달
+ /// - PrefabRef를 사용해 아이템 프리팹을 런타임 로드/생성
+ ///
+ /// 개선 사항:
+ /// - Model-View 매핑을 위해 Dictionary를 사용, O(1) 검색으로 성능 향상.
+ /// - 명시적 핸들러 메서드로 이벤트 구독/해제 대칭성 확보.
+ /// - async void 대신 UniTask 반환 및 .Forget() 패턴으로 예외 처리 강화.
+ ///
+ /// 주의:
+ /// - 모든 구독/비동기 작업은 OnDestroy에서 해제/취소합니다.
+ ///
+ public sealed class TodoListView : MonoBehaviour
+ {
+ [Header("UI")]
+ [SerializeField] private RectTransform _content = null!;
+ [SerializeField] private TMP_InputField _filterInput = null!;
+ [SerializeField] private Button _addButton = null!;
+ [SerializeField] private PrefabRef _itemPrefab; // "UI/TodoItem" 등
+
+ private readonly CancellationTokenSource _cts = new();
+ private readonly Dictionary _rowViews = new();
+ private TodoListViewModel _vm = null!;
+
+ private void Awake()
+ {
+ // Composition Root에서 주입받는 것을 권장. 여기서는 예시로 직접 생성.
+ Init(new TodoListViewModel());
+ }
+
+ ///
+ /// ViewModel을 주입하고 UI를 초기화합니다.
+ ///
+ public void Init(TodoListViewModel viewModel)
+ {
+ _vm = viewModel;
+
+ // 이벤트 구독 (명시적 핸들러 메서드 사용)
+ _vm.OnItemAdded += OnItemAddedHandler;
+ _vm.OnItemRemoved += HandleItemRemoved;
+ _vm.OnItemChanged += HandleItemChanged;
+
+ // 입력 이벤트
+ _addButton.onClick.AddListener(OnAddButtonClicked);
+ _filterInput.onValueChanged.AddListener(OnFilterInputChanged);
+ }
+
+ /// ViewModel의 OnItemAdded 이벤트 핸들러.
+ private void OnItemAddedHandler(TodoItem item)
+ {
+ HandleItemAdded(item).Forget(ex => Debug.LogError($"[TodoListView] Failed to add item: {ex}"));
+ }
+
+ /// Add 버튼 클릭 핸들러.
+ private void OnAddButtonClicked()
+ {
+ _vm.Add(new TodoItem("New Task"));
+ }
+
+ /// 필터 입력 변경 핸들러.
+ private void OnFilterInputChanged(string value)
+ {
+ RebuildFiltered();
+ }
+
+ private async UniTask HandleItemAdded(TodoItem item)
+ {
+ var prefab = await _itemPrefab.LoadAsync(_cts.Token);
+ if (prefab == null || _cts.IsCancellationRequested) return;
+
+ var go = Instantiate(prefab, _content);
+ var row = go.GetComponent();
+ if (row != null)
+ {
+ row.Bind(item);
+ _rowViews[item] = row; // 딕셔너리에 추가
+ }
+ }
+
+ private void HandleItemRemoved(TodoItem item)
+ {
+ if (_rowViews.TryGetValue(item, out var row))
+ {
+ Destroy(row.gameObject);
+ _rowViews.Remove(item); // 딕셔너리에서 제거
+ }
+ }
+
+ private void HandleItemChanged(TodoItem item)
+ {
+ if (_rowViews.TryGetValue(item, out var row))
+ {
+ row.Refresh();
+ }
+ }
+
+ private void RebuildFiltered()
+ {
+ var keyword = _filterInput.text.ToLowerInvariant();
+ var hasKeyword = !string.IsNullOrWhiteSpace(keyword);
+
+ foreach (var (item, row) in _rowViews)
+ {
+ var visible = !hasKeyword || item.Name.ToLowerInvariant().Contains(keyword);
+ row.gameObject.SetActive(visible);
+ }
+ }
+
+ private void OnDestroy()
+ {
+ _cts.Cancel();
+ _cts.Dispose();
+
+ // ViewModel 이벤트 구독 해제 (등록과 대칭)
+ if (_vm != null)
+ {
+ _vm.OnItemAdded -= OnItemAddedHandler;
+ _vm.OnItemRemoved -= HandleItemRemoved;
+ _vm.OnItemChanged -= HandleItemChanged;
+ }
+
+ // UI 이벤트 구독 해제
+ _addButton.onClick.RemoveListener(OnAddButtonClicked);
+ _filterInput.onValueChanged.RemoveListener(OnFilterInputChanged);
+ }
+ }
+
+ ///
+ /// 개별 Row(View) 컴포넌트.
+ /// - 간단 로직: 바인딩/리프레시만 담당
+ ///
+ public sealed class TodoRowView : MonoBehaviour
+ {
+ [SerializeField] private TMP_Text _nameText = null!;
+ [SerializeField] private Toggle _completedToggle = null!;
+
+ /// 현재 바인딩된 모델(읽기 전용).
+ public TodoItem? BoundItem { get; private set; }
+
+ ///
+ /// Row를 모델에 바인딩합니다.
+ ///
+ /// 바인딩할 모델.
+ public void Bind(TodoItem item)
+ {
+ BoundItem = item;
+ _completedToggle.onValueChanged.AddListener(OnToggleChanged);
+ Refresh();
+ }
+
+ /// UI를 현재 모델 값으로 갱신합니다.
+ public void Refresh()
+ {
+ if (BoundItem == null) return;
+ _nameText.text = BoundItem.Name;
+ _completedToggle.SetIsOnWithoutNotify(BoundItem.IsCompleted);
+ }
+
+ private void OnToggleChanged(bool value)
+ {
+ // 단순 전달: 모델 토글
+ BoundItem?.ToggleCompleted();
+ }
+
+ private void OnDestroy()
+ {
+ _completedToggle.onValueChanged.RemoveListener(OnToggleChanged);
+ }
+ }
+}
+```
+
+---
+
+## 8) 현 코드베이스(HierarchyWindow 등) 적용 팁
+- 긴 작업(검색 등)은 현재처럼 청크 처리 + `await UniTask.Yield()`로 UI 프리즈 방지.
+- 로딩 아이콘/초소형 UI:
+ - 과도 축소 시 MipMap + Trilinear를 켜거나, 전용 해상도 스프라이트 사용.
+ - 회전보다는 Image `Filled` + `fillAmount` 애니메이션이 초소형에서 더 깔끔.
+- DOTween 트윈: 멤버로 보관, `OnDestroy`/취소 시 `Kill()` 처리(현재 코드가 모범 사례).
+- `#nullable enable` 유지, `UnityEngine.Object` 계열도 `?` 표기 후 Null 체크.
+- 입력/검색 UI는 View, 검색 로직/필터는 ViewModel로 추출하면 테스트·교체 용이.
+
+## 9) 품질 자동화(선택)
+- StyleCop.Analyzers, Roslynator로 XML 주석/네이밍 규칙 검사.
+- `.editorconfig`에 문서 주석 필수 규칙 설정.
+- VS에서 정기 점검: __Analyze > Run Code Analysis__, 빌드에서 __Treat warnings as errors__.
+- CI에서 XML 문서 누락/nullable 경고를 실패로 처리해 조기 차단.
+- 권장 `.editorconfig` 요약:
+ - `dotnet_diagnostic.CS1591.severity = error` (공개 멤버 문서 주석 필수)
+ - `dotnet_analyzer_diagnostic.category-Style.severity = warning`
+ - `dotnet_analyzer_diagnostic.category-Nullable.severity = error`
+ - `dotnet_diagnostic.IDE0060.severity = warning` (사용 안 하는 매개변수)
+ - `dotnet_style_qualification_for_field = true:suggestion`
+
+---
+
+## 10) 권장 디자인 패턴
+- DI/Composition Root
+ - 언제: 서비스/로더/뷰모델 주입이 필요할 때 초기화 지점을 일원화합니다.
+ - 팁: 경량 수동 DI 권장(프레임워크 미사용). 씬 부팅 지점에 구성 루트를 두고 팩토리/인터페이스를 통해 의존성을 명시적으로 연결합니다.
+- Event Aggregator/Mediator
+ - 언제: 윈도우/패널/리스트 간 통신을 느슨하게 연결하고 싶을 때.
+ - 팁: 강타입 메시지 구조체를 사용하고 구독 해제를 일원화합니다. 남용 시 디버깅이 어려울 수 있습니다.
+- Command (+ Undo/Memento)
+ - 언제: UI 액션(삭제/이동/이름 변경 등)에 되돌리기가 필요할 때.
+ - 팁: `ExecuteAsync(CancellationToken)`/`UndoAsync(...)`는 `UniTask`를 반환하고, 스택으로 관리합니다.
+- Strategy
+ - 언제: 정렬/필터/드롭 배치 규칙을 교체 가능하게 설계할 때.
+ - 팁: `ISortStrategy`/`IFilterStrategy` 등 인터페이스를 정의하고 Update 중 할당을 피합니다.
+- State/Finite State Machine
+ - 언제: 편집/선택/드래그 등 모드 전환이 분명할 때.
+ - 팁: `EnterAsync/ExitAsync`는 `UniTask`를 사용하고 `CancellationToken`을 전파합니다.
+- Factory/Abstract Factory
+ - 언제: 프리팹/뷰 생성 경로와 정책을 캡슐화할 때.
+ - 팁: `PrefabRef`(+Addressables)를 `IViewFactory`로 감싸고 토큰을 전달합니다.
+- Object Pool
+ - 언제: 다량의 리스트 아이템/툴팁/이펙트를 재사용할 때.
+ - 팁: `IPoolable.OnRent/OnReturn` 훅을 제공하고 `DOTween.Kill()` 등 수명 종료 처리를 확실히 합니다.
+- Repository + Unit of Work
+ - 언제: 데이터 소스(파일/원격/메모리)를 교체 가능하게 할 때.
+ - 팁: VM은 `ITodoRepository`에 의존하고 배치 저장은 UoW로 묶습니다.
+- Facade/Adapter
+ - 언제: 서드파티/플랫폼 API를 감싸서 단순화할 때.
+ - 팁: 테스트 더블을 쉽게 주입할 수 있습니다.
+- Composite
+ - 언제: 트리 구조를 모델링할 때.
+ - 팁: 노드 공통 인터페이스와 자식 컬렉션만 노출하고 뷰는 Composite만 알도록 합니다.
+- Visitor
+ - 언제: 트리 순회 작업(검색/선택 동기화/통계)을 추가할 때.
+ - 팁: 순회 로직을 방문자로 분리해 재사용성을 높입니다.
+- Template Method
+ - 언제: 리스트 아이템 바인딩/갱신 단계를 표준화할 때.
+ - 팁: 공통 베이스 `ListItemView`에 훅 메서드를 제공합니다.
+- Builder
+ - 언제: 복잡한 UI 구성이나 `DOTween` 시퀀스 생성을 읽기 쉽게 만들 때.
+ - 팁: 체이닝으로 가독성을 높이고 재사용 가능한 빌더를 제공합니다.
+- Flyweight/Prototype (ScriptableObject)
+ - 언제: 공유 불변 데이터/기본 설정을 여러 객체에서 공용으로 사용할 때.
+ - 팁: ScriptableObject로 메모리를 공유하고 런타임 인스턴스는 얕은 복제를 사용합니다.
+- Null Object
+ - 언제: 선택 없음/루트 노드 등에서 null 분기를 제거하고 싶을 때.
+ - 팁: `INode`의 빈 구현을 제공해 분기 삭제와 안정성을 높입니다.
+
+## 11) 비동기(UniTask) 규약
+- 공개 비동기 API는 `UniTask`/`UniTask`를 반환합니다. `async void`는 지양합니다.
+- 모든 비동기 메서드에 `CancellationToken` 인자를 제공하고 `AttachExternalCancellation`로 연결합니다.
+- Fire-and-forget은 예외 로깅 후 `.Forget()`을 제한적으로 사용합니다.
+- 메인 스레드가 필요한 경우 `UniTask.SwitchToMainThread()`를 명시적으로 호출합니다.
+
+## 12) Addressables/Resources 규약
+- 전처리기 기호: Addressables 사용 시 `Player Settings > Scripting Define Symbols`에 `USE_ADDRESSABLES`를 설정합니다.
+- 로드/수명: `LoadAssetAsync`로 얻은 핸들은 참조 수명 관리 후 `Addressables.Release(handle)`로 해제합니다. 인스턴스 생성 후에는 에셋 참조를 유지할 필요가 없으면 해제합니다.
+- Instantiate 정책: 다중 인스턴스가 필요하면 `Addressables.InstantiateAsync` 사용을 우선 고려합니다(완료 후 `Addressables.ReleaseInstance`).
+- Resources 경로 규약: 경로는 `Resources/` 하위 루트 기준 상대 경로를 사용합니다. Addressables 전환 시 키/그룹/레이블 매핑 표를 준비합니다.
+- 전환 체크리스트: 키 네임 규칙, 그룹 빌드/로드 모드, 레이블 기반 로드, Release 누락 검토, 메모리 프로파일 확인.
+
+## 13) UniTask 취소/예외 처리 상세
+- `CancellationTokenSource` 소유권은 생성한 컴포넌트가 갖습니다. `MonoBehaviour`는 `OnDestroy`에서 `Cancel/Dispose`를 호출합니다.
+- 토큰 결합: `CancellationTokenSource.CreateLinkedTokenSource(parent, this._cts.Token)`를 사용해 상위/로컬 토큰을 결합합니다.
+- 타임아웃: `using var timeout = new CancellationTokenSource(); timeout.CancelAfter(TimeSpan.FromSeconds(5));`
+- 예외 정책: 공개 API는 예외를 전파하고, fire-and-forget은 로깅 후 `.Forget()`을 사용합니다.
+
+## 14) 스레딩 모델
+- CPU 바운드 작업은 `UniTask.Run`으로 워커 스레드에서 처리하고, Unity API 접근 전 `UniTask.SwitchToMainThread`를 호출합니다.
+- IO 바운드는 가능한 비동기 API를 우선 사용합니다(파일/네트워크/주소가능).
+
+## 15) 이벤트/구독 수명 주기
+- 모든 구독은 등록 지점과 해제 지점을 명시합니다. 컬렉션/모델 이벤트는 명시적으로 해제합니다.
+- UI 이벤트(`Button.onClick`, `Toggle.onValueChanged`)는 `OnDestroy`에서 일괄 해제합니다.
+- `Bind/Unbind` 패턴을 사용해 View의 수명과 구독 수명을 일치시킵니다.
+
+## 16) 오브젝트 풀 정책
+- 대량 생성/파괴 대상은 풀을 사용합니다. 항목은 `IPoolable.OnRent/OnReturn` 훅을 구현합니다.
+- 트윈/코루틴 등 외부 작업은 반환 시 `DOTween.Kill()` 또는 `DOKill()`로 종료합니다.
+- 부모 재설정 최적화: 반환 시 풀 컨테이너로 재부모, 좌표/스케일 초기화 최소화.
+- 풀 용량 정책: 최대치/증가 단위 정의, 초과 시 로그 경고 옵션 제공.
+
+## 17) 수동 DI(Composition Root) 예시
+- 씬 부팅 스크립트에서 인터페이스 구현체를 생성하고 주입합니다. 프레임워크 없이 팩토리/생성자 주입을 사용합니다.
+```c#
+public sealed class AppBootstrap : MonoBehaviour
+{
+ private void Awake()
+ {
+ // ILogger logger = new UnityLogger();
+ // ITodoRepository repo = new FileTodoRepository(logger);
+ // IViewFactory viewFactory = new AddressablesViewFactory(logger);
+
+ // 1. ViewModel 생성
+ var vm = new Architecture.ViewModel.TodoListViewModel();
+
+ // 2. View 인스턴스 찾기
+ var window = FindObjectOfType();
+
+ // 3. 의존성 주입
+ if (window != null)
+ {
+ // window.Init(vm, viewFactory, logger); // 더 많은 의존성이 있다면 Init 메서드를 확장
+ window.Init(vm);
+ }
+ }
+}
+```
+- 네이밍 컨벤션: 인터페이스 `I*`, 팩토리 `*Factory`, 리포지토리 `*Repository`.
+
+## 18) 테스트 가이드
+- ViewModel 단위 테스트(NUnit) 권장: MonoBehaviour에 의존하지 않게 유지합니다.
+- 에디트 모드/플레이 모드 테스트를 분리하고 CI에서 두 모드를 실행합니다.
+- 기본 템플릿(요약): 생성/추가/삭제/이벤트 발행 검증, 필터 로직 검증.
+
+## 19) 대규모 리스트 가상화
+- `ScrollRect` + Recycler 패턴을 권장합니다.
+- 핵심 인터페이스 예시: `IItemProvider`(데이터 크기/아이템 생성), `IItemRenderer`(Bind/Unbind/Refresh).
+- 스크롤 오프셋 ↔ 인덱스 매핑 규약을 문서화하고, 배치 업데이트 시 `await UniTask.Yield()`로 프리즈를 방지합니다.
+
+## 20) UnityEngine.Object와 Nullable 주의
+- Unity는 `== null` 연산자를 오버로드하므로 순수 참조 null 확인 시 `ReferenceEquals(obj, null)` 사용을 고려합니다.
+- `UnityEngine.Object` 파괴된 인스턴스는 `null`처럼 동작할 수 있으므로 사용 전 유효성 검사를 수행합니다.
+- 직렬화 필드에 `?`를 표기하고, 런타임 Null/파괴 상태를 방어적으로 처리합니다.
+
+---
+본 문서는 템플릿으로 재사용 가능하며, 신규 컴포넌트(클래스/메서드/속성)마다 동일한 주석·패턴을 유지하면 초보자도 구조와 의도를 빠르게 파악할 수 있습니다.
\ No newline at end of file