From 5853c5bd83433ab089bc90fa1951bef7e0fbe329 Mon Sep 17 00:00:00 2001 From: ud18010 Date: Thu, 30 Jul 2026 11:14:56 +0800 Subject: [PATCH] feat: add reusable virtual hud input --- .../Art/UI/Prefab/UI_VirtualActionPad.prefab | 3459 +++++++++++++++++ .../UI/Prefab/UI_VirtualActionPad.prefab.meta | 7 + .../Art/UI/Prefab/UI_VirtualJoystick.prefab | 327 ++ .../UI/Prefab/UI_VirtualJoystick.prefab.meta | 7 + .../Script/Editor/JsonUIPrefabBuilder.cs | 53 +- ...obbyWorldControllerVirtualJoystickTests.cs | 83 + ...orldControllerVirtualJoystickTests.cs.meta | 11 + .../EditMode/VirtualActionButtonTests.cs | 210 + .../EditMode/VirtualActionButtonTests.cs.meta | 11 + .../Tests/EditMode/VirtualActionPadTests.cs | 117 + .../EditMode/VirtualActionPadTests.cs.meta | 11 + .../EditMode/VirtualInputPrefabLayoutTests.cs | 46 + .../VirtualInputPrefabLayoutTests.cs.meta | 11 + .../Tests/EditMode/VirtualJoystickTests.cs | 112 + .../EditMode/VirtualJoystickTests.cs.meta | 11 + .../xmain/Client/LobbyWorldController.cs | 122 +- Client/Assets/Script/xmain/Input.meta | 8 + .../Script/xmain/Input/VirtualActionButton.cs | 498 +++ .../xmain/Input/VirtualActionButton.cs.meta | 11 + .../Script/xmain/Input/VirtualActionPad.cs | 122 + .../xmain/Input/VirtualActionPad.cs.meta | 11 + .../Script/xmain/Input/VirtualJoystick.cs | 273 ++ .../xmain/Input/VirtualJoystick.cs.meta | 11 + Doc/UIPrefabCreater/UI_VirtualActionPad.json | 443 +++ Doc/UIPrefabCreater/UI_VirtualJoystick.json | 125 + .../plans/2026-07-30-virtual-hud-input.md | 334 ++ 26 files changed, 6403 insertions(+), 31 deletions(-) create mode 100644 Client/Assets/Game/Art/UI/Prefab/UI_VirtualActionPad.prefab create mode 100644 Client/Assets/Game/Art/UI/Prefab/UI_VirtualActionPad.prefab.meta create mode 100644 Client/Assets/Game/Art/UI/Prefab/UI_VirtualJoystick.prefab create mode 100644 Client/Assets/Game/Art/UI/Prefab/UI_VirtualJoystick.prefab.meta create mode 100644 Client/Assets/Script/Tests/EditMode/LobbyWorldControllerVirtualJoystickTests.cs create mode 100644 Client/Assets/Script/Tests/EditMode/LobbyWorldControllerVirtualJoystickTests.cs.meta create mode 100644 Client/Assets/Script/Tests/EditMode/VirtualActionButtonTests.cs create mode 100644 Client/Assets/Script/Tests/EditMode/VirtualActionButtonTests.cs.meta create mode 100644 Client/Assets/Script/Tests/EditMode/VirtualActionPadTests.cs create mode 100644 Client/Assets/Script/Tests/EditMode/VirtualActionPadTests.cs.meta create mode 100644 Client/Assets/Script/Tests/EditMode/VirtualInputPrefabLayoutTests.cs create mode 100644 Client/Assets/Script/Tests/EditMode/VirtualInputPrefabLayoutTests.cs.meta create mode 100644 Client/Assets/Script/Tests/EditMode/VirtualJoystickTests.cs create mode 100644 Client/Assets/Script/Tests/EditMode/VirtualJoystickTests.cs.meta create mode 100644 Client/Assets/Script/xmain/Input.meta create mode 100644 Client/Assets/Script/xmain/Input/VirtualActionButton.cs create mode 100644 Client/Assets/Script/xmain/Input/VirtualActionButton.cs.meta create mode 100644 Client/Assets/Script/xmain/Input/VirtualActionPad.cs create mode 100644 Client/Assets/Script/xmain/Input/VirtualActionPad.cs.meta create mode 100644 Client/Assets/Script/xmain/Input/VirtualJoystick.cs create mode 100644 Client/Assets/Script/xmain/Input/VirtualJoystick.cs.meta create mode 100644 Doc/UIPrefabCreater/UI_VirtualActionPad.json create mode 100644 Doc/UIPrefabCreater/UI_VirtualJoystick.json create mode 100644 docs/superpowers/plans/2026-07-30-virtual-hud-input.md diff --git a/Client/Assets/Game/Art/UI/Prefab/UI_VirtualActionPad.prefab b/Client/Assets/Game/Art/UI/Prefab/UI_VirtualActionPad.prefab new file mode 100644 index 00000000..cff13618 --- /dev/null +++ b/Client/Assets/Game/Art/UI/Prefab/UI_VirtualActionPad.prefab @@ -0,0 +1,3459 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &301454783331196175 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3963404170859025711} + - component: {fileID: 6547003779632409393} + - component: {fileID: 3830457418687876317} + m_Layer: 5 + m_Name: Skill1_Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3963404170859025711 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 301454783331196175} + 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: 4697960396770867711} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 4} + m_SizeDelta: {x: 56, y: 56} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6547003779632409393 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 301454783331196175} + m_CullTransparentMesh: 1 +--- !u!114 &3830457418687876317 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 301454783331196175} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 230f75728a724cb0bd4a71b2e3ff3fed, type: 3} + m_Type: 0 + 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 &322283768981565530 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5659459439798619145} + - component: {fileID: 6525117342081131341} + - component: {fileID: 3560324009584267314} + - component: {fileID: 8094120720750851173} + - component: {fileID: 5664115216372986406} + m_Layer: 5 + m_Name: Btn_Primary + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5659459439798619145 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 322283768981565530} + 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: 2565223516426341797} + - {fileID: 7394726615371730031} + - {fileID: 8109828712546491158} + - {fileID: 8574579856403002670} + - {fileID: 2681627113791256564} + m_Father: {fileID: 3798553185789621362} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -96, y: 96} + m_SizeDelta: {x: 132, y: 132} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6525117342081131341 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 322283768981565530} + m_CullTransparentMesh: 1 +--- !u!114 &3560324009584267314 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 322283768981565530} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 072186a6a7ca30e4f8a81bf5bc777322, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8094120720750851173 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 322283768981565530} + 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: 2 + 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: 21300000, guid: 7b39f56c5126ec34ab147fdf41431946, type: 3} + m_PressedSprite: {fileID: 21300000, guid: fb9e6e1b376bcbb43b9e69d127ce9af3, type: 3} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 21300000, guid: 78e2e2b0c47979148b85ad997dc87357, type: 3} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 3560324009584267314} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &5664115216372986406 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 322283768981565530} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5e719656ace242789c22b78b47abcc66, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonId: 0 + holdThresholdSeconds: 0.35 + holdTickIntervalSeconds: 0.1 + releaseDistanceThreshold01: 0.25 + maxDragRadiusMultiplier: 1.5 +--- !u!1 &378731750787788940 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7200120243736843654} + - component: {fileID: 3887830426157405518} + - component: {fileID: 3926946998714058385} + m_Layer: 5 + m_Name: Skill3_CooldownMask + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &7200120243736843654 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 378731750787788940} + 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: 2203992350207310278} + 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.5, y: 0.5} +--- !u!222 &3887830426157405518 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 378731750787788940} + m_CullTransparentMesh: 1 +--- !u!114 &3926946998714058385 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 378731750787788940} + 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.043137256, g: 0.09019608, b: 0.14117648, a: 0.6666667} + 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: 02081aa4c98a98f4fa1972b7e5039626, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &526423173299257032 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8849858870126415863} + - component: {fileID: 925926425014902016} + - component: {fileID: 8148350545726586436} + m_Layer: 5 + m_Name: Skill4_Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8849858870126415863 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 526423173299257032} + 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: 6151365266658888375} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 3} + m_SizeDelta: {x: 48, y: 48} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &925926425014902016 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 526423173299257032} + m_CullTransparentMesh: 1 +--- !u!114 &8148350545726586436 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 526423173299257032} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3556aa9c18e045dfb20b7b7531662b3d, type: 3} + m_Type: 0 + 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 &546311459707961231 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1968299860719617531} + - component: {fileID: 6452433740325230773} + - component: {fileID: 8749140517687634233} + m_Layer: 5 + m_Name: Skill4_CooldownMask + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1968299860719617531 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 546311459707961231} + 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: 6151365266658888375} + 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.5, y: 0.5} +--- !u!222 &6452433740325230773 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 546311459707961231} + m_CullTransparentMesh: 1 +--- !u!114 &8749140517687634233 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 546311459707961231} + 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.043137256, g: 0.09019608, b: 0.14117648, a: 0.6666667} + 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: 02081aa4c98a98f4fa1972b7e5039626, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &779830895764571494 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6151365266658888375} + - component: {fileID: 8975103372064199988} + - component: {fileID: 6874743292336661360} + - component: {fileID: 2765482273424778036} + - component: {fileID: 6659716744400395142} + m_Layer: 5 + m_Name: Btn_Skill4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6151365266658888375 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779830895764571494} + 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: 8849858870126415863} + - {fileID: 1968299860719617531} + - {fileID: 4764728936400828578} + - {fileID: 2724695387954605374} + - {fileID: 6470812355923873780} + m_Father: {fileID: 3798553185789621362} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -328, y: 210} + m_SizeDelta: {x: 88, y: 88} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8975103372064199988 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779830895764571494} + m_CullTransparentMesh: 1 +--- !u!114 &6874743292336661360 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779830895764571494} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 61d35c2b3364adb4cada611b125df1a9, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &2765482273424778036 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779830895764571494} + 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: 2 + 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: 21300000, guid: 0f5f173cd3dbe6546b1c27c4e56a8189, type: 3} + m_PressedSprite: {fileID: 21300000, guid: 7239f352565647f46b627ff278f73c79, type: 3} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 21300000, guid: 4990a0f7102abc54b9769d4c0db4cc55, type: 3} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 6874743292336661360} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &6659716744400395142 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779830895764571494} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5e719656ace242789c22b78b47abcc66, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonId: 0 + holdThresholdSeconds: 0.35 + holdTickIntervalSeconds: 0.1 + releaseDistanceThreshold01: 0.25 + maxDragRadiusMultiplier: 1.5 +--- !u!1 &1794905727377857852 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 515931943611751663} + - component: {fileID: 6719050178523801647} + - component: {fileID: 1021532790077957543} + m_Layer: 5 + m_Name: Skill1_AimIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &515931943611751663 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1794905727377857852} + 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: 4697960396770867711} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 98} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &6719050178523801647 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1794905727377857852} + m_CullTransparentMesh: 1 +--- !u!114 &1021532790077957543 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1794905727377857852} + 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.2627451, g: 0.7176471, b: 0.9607843, a: 0.6666667} + 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: 02081aa4c98a98f4fa1972b7e5039626, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1836316137391236764 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2681627113791256564} + - component: {fileID: 4005577543392578213} + - component: {fileID: 4572624188065829813} + m_Layer: 5 + m_Name: Primary_AimIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &2681627113791256564 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836316137391236764} + 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: 5659459439798619145} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 12, y: 118} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &4005577543392578213 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836316137391236764} + m_CullTransparentMesh: 1 +--- !u!114 &4572624188065829813 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836316137391236764} + 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.2627451, g: 0.7176471, b: 0.9607843, a: 0.6666667} + 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: 02081aa4c98a98f4fa1972b7e5039626, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &2486781275006035889 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4764728936400828578} + - component: {fileID: 3285332028501019774} + - component: {fileID: 8041612233780120001} + m_Layer: 5 + m_Name: Skill4_CooldownText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &4764728936400828578 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2486781275006035889} + 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: 6151365266658888375} + 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.5, y: 0.5} +--- !u!222 &3285332028501019774 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2486781275006035889} + m_CullTransparentMesh: 1 +--- !u!114 &8041612233780120001 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2486781275006035889} + 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: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_sharedMaterial: {fileID: 1803920224224718538, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + 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_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 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 &2980192057688211902 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8043405376109341049} + - component: {fileID: 1476429883236157864} + - component: {fileID: 1606580563830027795} + m_Layer: 5 + m_Name: Skill2_ChargeText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &8043405376109341049 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2980192057688211902} + 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: 8651807486773086249} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -6, y: 6} + m_SizeDelta: {x: 36, y: 26} + m_Pivot: {x: 1, y: 0} +--- !u!222 &1476429883236157864 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2980192057688211902} + m_CullTransparentMesh: 1 +--- !u!114 &1606580563830027795 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2980192057688211902} + 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: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_sharedMaterial: {fileID: 1803920224224718538, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 0.8862745, b: 0.47843137, 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: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 20 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + 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_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 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 &3036054063258041132 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2203992350207310278} + - component: {fileID: 4218043785579603231} + - component: {fileID: 2415995785931365474} + - component: {fileID: 1277688291268239694} + - component: {fileID: 2710784878187743270} + m_Layer: 5 + m_Name: Btn_Skill3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2203992350207310278 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3036054063258041132} + 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: 1883804449126127088} + - {fileID: 7200120243736843654} + - {fileID: 1552221215753065238} + - {fileID: 7657102931967603523} + - {fileID: 8860179598648203114} + m_Father: {fileID: 3798553185789621362} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -78, y: 242} + m_SizeDelta: {x: 104, y: 104} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4218043785579603231 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3036054063258041132} + m_CullTransparentMesh: 1 +--- !u!114 &2415995785931365474 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3036054063258041132} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 61d35c2b3364adb4cada611b125df1a9, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &1277688291268239694 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3036054063258041132} + 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: 2 + 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: 21300000, guid: 0f5f173cd3dbe6546b1c27c4e56a8189, type: 3} + m_PressedSprite: {fileID: 21300000, guid: 7239f352565647f46b627ff278f73c79, type: 3} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 21300000, guid: 4990a0f7102abc54b9769d4c0db4cc55, type: 3} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2415995785931365474} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &2710784878187743270 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3036054063258041132} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5e719656ace242789c22b78b47abcc66, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonId: 0 + holdThresholdSeconds: 0.35 + holdTickIntervalSeconds: 0.1 + releaseDistanceThreshold01: 0.25 + maxDragRadiusMultiplier: 1.5 +--- !u!1 &3203162532297474091 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8651807486773086249} + - component: {fileID: 6428544379756112856} + - component: {fileID: 4717706849344380132} + - component: {fileID: 2520033324680165337} + - component: {fileID: 541203213307330332} + m_Layer: 5 + m_Name: Btn_Skill2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8651807486773086249 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3203162532297474091} + 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: 6709019435711462977} + - {fileID: 4326678892010326101} + - {fileID: 707129185371483887} + - {fileID: 8043405376109341049} + - {fileID: 8149066138262892133} + m_Father: {fileID: 3798553185789621362} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -202, y: 220} + m_SizeDelta: {x: 104, y: 104} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6428544379756112856 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3203162532297474091} + m_CullTransparentMesh: 1 +--- !u!114 &4717706849344380132 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3203162532297474091} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 61d35c2b3364adb4cada611b125df1a9, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &2520033324680165337 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3203162532297474091} + 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: 2 + 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: 21300000, guid: 0f5f173cd3dbe6546b1c27c4e56a8189, type: 3} + m_PressedSprite: {fileID: 21300000, guid: 7239f352565647f46b627ff278f73c79, type: 3} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 21300000, guid: 4990a0f7102abc54b9769d4c0db4cc55, type: 3} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 4717706849344380132} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &541203213307330332 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3203162532297474091} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5e719656ace242789c22b78b47abcc66, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonId: 0 + holdThresholdSeconds: 0.35 + holdTickIntervalSeconds: 0.1 + releaseDistanceThreshold01: 0.25 + maxDragRadiusMultiplier: 1.5 +--- !u!1 &3221708070256085848 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5060651787230964735} + - component: {fileID: 8042486349049898329} + - component: {fileID: 2663506511960681853} + m_Layer: 5 + m_Name: CancelArea_Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5060651787230964735 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3221708070256085848} + 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: 6303803090080842790} + 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.5, y: 0.5} +--- !u!222 &8042486349049898329 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3221708070256085848} + m_CullTransparentMesh: 1 +--- !u!114 &2663506511960681853 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3221708070256085848} + 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: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Cancel + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_sharedMaterial: {fileID: 1803920224224718538, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 26 + m_fontSizeBase: 26 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 0 + m_fontSizeMax: 0 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + 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_enableWordWrapping: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 0 + 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 &3410310046350426657 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4326678892010326101} + - component: {fileID: 9097772429548301041} + - component: {fileID: 8205950976259931366} + m_Layer: 5 + m_Name: Skill2_CooldownMask + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &4326678892010326101 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3410310046350426657} + 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: 8651807486773086249} + 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.5, y: 0.5} +--- !u!222 &9097772429548301041 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3410310046350426657} + m_CullTransparentMesh: 1 +--- !u!114 &8205950976259931366 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3410310046350426657} + 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.043137256, g: 0.09019608, b: 0.14117648, a: 0.6666667} + 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: 02081aa4c98a98f4fa1972b7e5039626, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &3820358546156508772 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1883804449126127088} + - component: {fileID: 8718117164965849683} + - component: {fileID: 5074834089965038239} + m_Layer: 5 + m_Name: Skill3_Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1883804449126127088 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3820358546156508772} + 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: 2203992350207310278} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 4} + m_SizeDelta: {x: 56, y: 56} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8718117164965849683 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3820358546156508772} + m_CullTransparentMesh: 1 +--- !u!114 &5074834089965038239 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3820358546156508772} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d70ef02c876e4d1cba2c6d4384a4172b, type: 3} + m_Type: 0 + 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 &4231664644947971279 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4397240605349388518} + - component: {fileID: 301406037231954191} + - component: {fileID: 3047811803381613584} + m_Layer: 5 + m_Name: Skill1_ChargeText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &4397240605349388518 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4231664644947971279} + 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: 4697960396770867711} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -6, y: 6} + m_SizeDelta: {x: 36, y: 26} + m_Pivot: {x: 1, y: 0} +--- !u!222 &301406037231954191 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4231664644947971279} + m_CullTransparentMesh: 1 +--- !u!114 &3047811803381613584 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4231664644947971279} + 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: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_sharedMaterial: {fileID: 1803920224224718538, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 0.8862745, b: 0.47843137, 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: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 20 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + 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_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 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 &4361858741144087578 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8149066138262892133} + - component: {fileID: 6439627374396748407} + - component: {fileID: 3743429760066499669} + m_Layer: 5 + m_Name: Skill2_AimIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &8149066138262892133 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4361858741144087578} + 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: 8651807486773086249} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 98} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &6439627374396748407 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4361858741144087578} + m_CullTransparentMesh: 1 +--- !u!114 &3743429760066499669 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4361858741144087578} + 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.2627451, g: 0.7176471, b: 0.9607843, a: 0.6666667} + 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: 02081aa4c98a98f4fa1972b7e5039626, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &4511472893839280371 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8860179598648203114} + - component: {fileID: 3902900524642806527} + - component: {fileID: 1356773878618690064} + m_Layer: 5 + m_Name: Skill3_AimIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &8860179598648203114 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4511472893839280371} + 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: 2203992350207310278} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 98} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &3902900524642806527 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4511472893839280371} + m_CullTransparentMesh: 1 +--- !u!114 &1356773878618690064 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4511472893839280371} + 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.2627451, g: 0.7176471, b: 0.9607843, a: 0.6666667} + 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: 02081aa4c98a98f4fa1972b7e5039626, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &5467039237063342143 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7657102931967603523} + - component: {fileID: 1260342659466508648} + - component: {fileID: 5873543708846979194} + m_Layer: 5 + m_Name: Skill3_ChargeText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &7657102931967603523 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5467039237063342143} + 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: 2203992350207310278} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -6, y: 6} + m_SizeDelta: {x: 36, y: 26} + m_Pivot: {x: 1, y: 0} +--- !u!222 &1260342659466508648 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5467039237063342143} + m_CullTransparentMesh: 1 +--- !u!114 &5873543708846979194 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5467039237063342143} + 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: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_sharedMaterial: {fileID: 1803920224224718538, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 0.8862745, b: 0.47843137, 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: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 20 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + 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_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 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 &5724344750509995844 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3745155313868035116} + - component: {fileID: 528242605834639712} + - component: {fileID: 1492499264662093474} + m_Layer: 5 + m_Name: Skill1_CooldownMask + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &3745155313868035116 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5724344750509995844} + 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: 4697960396770867711} + 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.5, y: 0.5} +--- !u!222 &528242605834639712 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5724344750509995844} + m_CullTransparentMesh: 1 +--- !u!114 &1492499264662093474 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5724344750509995844} + 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.043137256, g: 0.09019608, b: 0.14117648, a: 0.6666667} + 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: 02081aa4c98a98f4fa1972b7e5039626, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6039207477946899252 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1772315889510840438} + - component: {fileID: 9217627584712884801} + - component: {fileID: 6799373528564676806} + m_Layer: 5 + m_Name: Skill1_CooldownText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1772315889510840438 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6039207477946899252} + 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: 4697960396770867711} + 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.5, y: 0.5} +--- !u!222 &9217627584712884801 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6039207477946899252} + m_CullTransparentMesh: 1 +--- !u!114 &6799373528564676806 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6039207477946899252} + 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: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_sharedMaterial: {fileID: 1803920224224718538, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 28 + m_fontSizeBase: 28 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + 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_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 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 &6312550811579971195 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6470812355923873780} + - component: {fileID: 5289899555382900966} + - component: {fileID: 7414872158481361782} + m_Layer: 5 + m_Name: Skill4_AimIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &6470812355923873780 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6312550811579971195} + 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: 6151365266658888375} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 8, y: 84} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &5289899555382900966 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6312550811579971195} + m_CullTransparentMesh: 1 +--- !u!114 &7414872158481361782 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6312550811579971195} + 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.2627451, g: 0.7176471, b: 0.9607843, a: 0.6666667} + 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: 02081aa4c98a98f4fa1972b7e5039626, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6451770683078921754 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1552221215753065238} + - component: {fileID: 5947516934986958193} + - component: {fileID: 6631712497597561365} + m_Layer: 5 + m_Name: Skill3_CooldownText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1552221215753065238 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6451770683078921754} + 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: 2203992350207310278} + 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.5, y: 0.5} +--- !u!222 &5947516934986958193 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6451770683078921754} + m_CullTransparentMesh: 1 +--- !u!114 &6631712497597561365 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6451770683078921754} + 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: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_sharedMaterial: {fileID: 1803920224224718538, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 28 + m_fontSizeBase: 28 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + 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_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 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 &6841063808153950318 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2565223516426341797} + - component: {fileID: 3351899342831166567} + - component: {fileID: 1994720590404252219} + m_Layer: 5 + m_Name: Primary_Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2565223516426341797 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6841063808153950318} + 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: 5659459439798619145} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 4} + m_SizeDelta: {x: 72, y: 72} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3351899342831166567 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6841063808153950318} + m_CullTransparentMesh: 1 +--- !u!114 &1994720590404252219 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6841063808153950318} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d21344e14bad488c9d08f9179b6afa85, type: 3} + m_Type: 0 + 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 &6895068279185381252 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8109828712546491158} + - component: {fileID: 5680857346280824641} + - component: {fileID: 6893099490039760383} + m_Layer: 5 + m_Name: Primary_CooldownText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &8109828712546491158 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6895068279185381252} + 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: 5659459439798619145} + 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.5, y: 0.5} +--- !u!222 &5680857346280824641 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6895068279185381252} + m_CullTransparentMesh: 1 +--- !u!114 &6893099490039760383 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6895068279185381252} + 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: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_sharedMaterial: {fileID: 1803920224224718538, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 34 + m_fontSizeBase: 34 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + 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_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 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 &7332331586678969380 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6709019435711462977} + - component: {fileID: 7496583111883726542} + - component: {fileID: 2438556255507167347} + m_Layer: 5 + m_Name: Skill2_Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6709019435711462977 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7332331586678969380} + 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: 8651807486773086249} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 4} + m_SizeDelta: {x: 56, y: 56} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7496583111883726542 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7332331586678969380} + m_CullTransparentMesh: 1 +--- !u!114 &2438556255507167347 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7332331586678969380} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: c7e689f5b89e4096ad72a94d863da3ad, type: 3} + m_Type: 0 + 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 &7479852653893836645 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4697960396770867711} + - component: {fileID: 222815990607978246} + - component: {fileID: 6269036407460668155} + - component: {fileID: 7586535612786504945} + - component: {fileID: 329302446906452039} + m_Layer: 5 + m_Name: Btn_Skill1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4697960396770867711 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7479852653893836645} + 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: 3963404170859025711} + - {fileID: 3745155313868035116} + - {fileID: 1772315889510840438} + - {fileID: 4397240605349388518} + - {fileID: 515931943611751663} + m_Father: {fileID: 3798553185789621362} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -244, y: 94} + m_SizeDelta: {x: 104, y: 104} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222815990607978246 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7479852653893836645} + m_CullTransparentMesh: 1 +--- !u!114 &6269036407460668155 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7479852653893836645} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 61d35c2b3364adb4cada611b125df1a9, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &7586535612786504945 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7479852653893836645} + 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: 2 + 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: 21300000, guid: 0f5f173cd3dbe6546b1c27c4e56a8189, type: 3} + m_PressedSprite: {fileID: 21300000, guid: 7239f352565647f46b627ff278f73c79, type: 3} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 21300000, guid: 4990a0f7102abc54b9769d4c0db4cc55, type: 3} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 6269036407460668155} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &329302446906452039 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7479852653893836645} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5e719656ace242789c22b78b47abcc66, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonId: 0 + holdThresholdSeconds: 0.35 + holdTickIntervalSeconds: 0.1 + releaseDistanceThreshold01: 0.25 + maxDragRadiusMultiplier: 1.5 +--- !u!1 &7543818978836934305 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 707129185371483887} + - component: {fileID: 2902300863996134} + - component: {fileID: 2057706992369070963} + m_Layer: 5 + m_Name: Skill2_CooldownText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &707129185371483887 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7543818978836934305} + 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: 8651807486773086249} + 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.5, y: 0.5} +--- !u!222 &2902300863996134 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7543818978836934305} + m_CullTransparentMesh: 1 +--- !u!114 &2057706992369070963 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7543818978836934305} + 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: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_sharedMaterial: {fileID: 1803920224224718538, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 28 + m_fontSizeBase: 28 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + 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_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 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 &7743162532294923222 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3798553185789621362} + - component: {fileID: 8194000516351971021} + - component: {fileID: 6873618592873683083} + m_Layer: 5 + m_Name: UI_VirtualActionPad + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3798553185789621362 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7743162532294923222} + 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: 6303803090080842790} + - {fileID: 5659459439798619145} + - {fileID: 4697960396770867711} + - {fileID: 8651807486773086249} + - {fileID: 2203992350207310278} + - {fileID: 6151365266658888375} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -68, y: 72} + m_SizeDelta: {x: 500, y: 380} + m_Pivot: {x: 1, y: 0} +--- !u!225 &8194000516351971021 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7743162532294923222} + m_Enabled: 1 + m_Alpha: 0.98 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &6873618592873683083 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7743162532294923222} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7c5500d410634275b54631c131475f3d, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &8300460382978662576 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6303803090080842790} + - component: {fileID: 1461960770351120202} + - component: {fileID: 2592268304954130532} + m_Layer: 5 + m_Name: CancelArea + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &6303803090080842790 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8300460382978662576} + 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: 5060651787230964735} + m_Father: {fileID: 3798553185789621362} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: -110, y: -42} + m_SizeDelta: {x: 172, y: 82} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1461960770351120202 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8300460382978662576} + m_CullTransparentMesh: 1 +--- !u!114 &2592268304954130532 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8300460382978662576} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.35686275, b: 0.35686275, a: 0.8} + 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: 02081aa4c98a98f4fa1972b7e5039626, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &8404379255306686257 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2724695387954605374} + - component: {fileID: 1601839177267067855} + - component: {fileID: 665352359372686966} + m_Layer: 5 + m_Name: Skill4_ChargeText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &2724695387954605374 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8404379255306686257} + 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: 6151365266658888375} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -5, y: 5} + m_SizeDelta: {x: 32, y: 24} + m_Pivot: {x: 1, y: 0} +--- !u!222 &1601839177267067855 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8404379255306686257} + m_CullTransparentMesh: 1 +--- !u!114 &665352359372686966 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8404379255306686257} + 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: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_sharedMaterial: {fileID: 1803920224224718538, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 0.8862745, b: 0.47843137, 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: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 18 + m_fontSizeBase: 18 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + 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_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 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 &8410835440921969924 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8574579856403002670} + - component: {fileID: 4164559624994069874} + - component: {fileID: 824945612686751852} + m_Layer: 5 + m_Name: Primary_ChargeText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &8574579856403002670 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8410835440921969924} + 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: 5659459439798619145} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -8, y: 8} + m_SizeDelta: {x: 42, y: 30} + m_Pivot: {x: 1, y: 0} +--- !u!222 &4164559624994069874 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8410835440921969924} + m_CullTransparentMesh: 1 +--- !u!114 &824945612686751852 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8410835440921969924} + 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: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_sharedMaterial: {fileID: 1803920224224718538, guid: 023543f7caff42979bf03529f9868d06, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 0.8862745, b: 0.47843137, 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: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + 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_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 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 &8470710640061801144 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7394726615371730031} + - component: {fileID: 415408154643559718} + - component: {fileID: 1878598565907173608} + m_Layer: 5 + m_Name: Primary_CooldownMask + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &7394726615371730031 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8470710640061801144} + 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: 5659459439798619145} + 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.5, y: 0.5} +--- !u!222 &415408154643559718 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8470710640061801144} + m_CullTransparentMesh: 1 +--- !u!114 &1878598565907173608 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8470710640061801144} + 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.043137256, g: 0.09019608, b: 0.14117648, a: 0.6666667} + 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: 02081aa4c98a98f4fa1972b7e5039626, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 diff --git a/Client/Assets/Game/Art/UI/Prefab/UI_VirtualActionPad.prefab.meta b/Client/Assets/Game/Art/UI/Prefab/UI_VirtualActionPad.prefab.meta new file mode 100644 index 00000000..9d6cc9ce --- /dev/null +++ b/Client/Assets/Game/Art/UI/Prefab/UI_VirtualActionPad.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3f121035b068a0b49b64bffefd98ff4d +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Game/Art/UI/Prefab/UI_VirtualJoystick.prefab b/Client/Assets/Game/Art/UI/Prefab/UI_VirtualJoystick.prefab new file mode 100644 index 00000000..228e16ea --- /dev/null +++ b/Client/Assets/Game/Art/UI/Prefab/UI_VirtualJoystick.prefab @@ -0,0 +1,327 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3334026408209144342 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6000670627774682308} + - component: {fileID: 1609964632374445563} + - component: {fileID: 8894200138088445755} + m_Layer: 5 + m_Name: UI_VirtualJoystick + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6000670627774682308 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3334026408209144342} + 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: 3357559548068760665} + - {fileID: 7096593815826968038} + - {fileID: 184437504964314081} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 260, y: 220} + m_SizeDelta: {x: 148, y: 148} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &1609964632374445563 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3334026408209144342} + m_Enabled: 1 + m_Alpha: 0.96 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &8894200138088445755 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3334026408209144342} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 014f26c5eef24321b81f131f41a05a1d, type: 3} + m_Name: + m_EditorClassIdentifier: + joystickRoot: {fileID: 0} + knob: {fileID: 0} + deadZone: 0.18 + acquireRadiusMultiplier: 1.6 +--- !u!1 &4234464803126095867 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7096593815826968038} + - component: {fileID: 5171389559328169491} + - component: {fileID: 3262724154744367238} + m_Layer: 5 + m_Name: Ring + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7096593815826968038 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4234464803126095867} + 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: 6000670627774682308} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 148, y: 148} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5171389559328169491 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4234464803126095867} + m_CullTransparentMesh: 1 +--- !u!114 &3262724154744367238 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4234464803126095867} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 1f9d86c7b2a247e0aa3d23c6ab2f5d64, type: 3} + m_Type: 0 + 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 &4932454652913839351 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3357559548068760665} + - component: {fileID: 8520179084870437592} + - component: {fileID: 940065713991431157} + - component: {fileID: 6616819295074457407} + m_Layer: 5 + m_Name: Base + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3357559548068760665 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4932454652913839351} + 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: 6000670627774682308} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 148, y: 148} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8520179084870437592 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4932454652913839351} + m_CullTransparentMesh: 1 +--- !u!114 &940065713991431157 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4932454652913839351} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 8d1b2e6b1a634e3c8d65e9f4a0a6f211, type: 3} + m_Type: 0 + 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!114 &6616819295074457407 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4932454652913839351} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0.023529412, g: 0.0627451, b: 0.12156863, a: 0.41960785} + m_EffectDistance: {x: 0, y: -7} + m_UseGraphicAlpha: 1 +--- !u!1 &7423296529846966760 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 184437504964314081} + - component: {fileID: 4587952894397174941} + - component: {fileID: 879436522938408951} + - component: {fileID: 5944806825172038846} + m_Layer: 5 + m_Name: Knob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &184437504964314081 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7423296529846966760} + 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: 6000670627774682308} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 56, y: 56} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4587952894397174941 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7423296529846966760} + m_CullTransparentMesh: 1 +--- !u!114 &879436522938408951 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7423296529846966760} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 35c648732e8a41a39a40930f784f18a2, type: 3} + m_Type: 0 + 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!114 &5944806825172038846 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7423296529846966760} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0.023529412, g: 0.0627451, b: 0.12156863, a: 0.36078432} + m_EffectDistance: {x: 0, y: -5} + m_UseGraphicAlpha: 1 diff --git a/Client/Assets/Game/Art/UI/Prefab/UI_VirtualJoystick.prefab.meta b/Client/Assets/Game/Art/UI/Prefab/UI_VirtualJoystick.prefab.meta new file mode 100644 index 00000000..efa50362 --- /dev/null +++ b/Client/Assets/Game/Art/UI/Prefab/UI_VirtualJoystick.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dab6990f4dac1fd4a81a818319ac4209 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Script/Editor/JsonUIPrefabBuilder.cs b/Client/Assets/Script/Editor/JsonUIPrefabBuilder.cs index 49e345d8..29dcfbd7 100644 --- a/Client/Assets/Script/Editor/JsonUIPrefabBuilder.cs +++ b/Client/Assets/Script/Editor/JsonUIPrefabBuilder.cs @@ -95,20 +95,31 @@ namespace XGame.EditorTools } } + public static void BuildVirtualInputFromCommandLine() + { + string jsonRoot = ResolveCommandLineJsonRoot(); + string[] files = + { + "UI_VirtualJoystick.json", + "UI_VirtualActionPad.json" + }; + + int built = 0; + foreach (string file in files) + { + string output = BuildFromJsonFile(Path.Combine(jsonRoot, file)); + if (string.IsNullOrEmpty(output)) + { + throw new Exception("[UIGen] " + file + " build failed."); + } + built++; + } + Debug.Log("[UIGen] virtual input prefabs built: " + built); + } + public static void BuildAllFromCommandLine() { - string jsonRoot = GetCommandLineValue("-uiJsonRoot"); - if (string.IsNullOrEmpty(jsonRoot)) - { - jsonRoot = ResolveJsonRoot(); - } - else if (!Path.IsPathRooted(jsonRoot)) - { - string projectDir = Directory.GetParent(Application.dataPath).FullName; - string repoDir = Directory.GetParent(projectDir)?.FullName ?? projectDir; - jsonRoot = Path.Combine(repoDir, jsonRoot); - } - + string jsonRoot = ResolveCommandLineJsonRoot(); IReadOnlyList outputs = BuildAll(jsonRoot); if (outputs.Count == 0) { @@ -116,6 +127,24 @@ namespace XGame.EditorTools } } + private static string ResolveCommandLineJsonRoot() + { + string jsonRoot = GetCommandLineValue("-uiJsonRoot"); + if (string.IsNullOrEmpty(jsonRoot)) + { + return ResolveJsonRoot(); + } + + if (Path.IsPathRooted(jsonRoot)) + { + return jsonRoot; + } + + string projectDir = Directory.GetParent(Application.dataPath).FullName; + string repoDir = Directory.GetParent(projectDir)?.FullName ?? projectDir; + return Path.Combine(repoDir, jsonRoot); + } + public static ValidationResult Validate(string jsonPath) { ValidationResult vr = new ValidationResult(); diff --git a/Client/Assets/Script/Tests/EditMode/LobbyWorldControllerVirtualJoystickTests.cs b/Client/Assets/Script/Tests/EditMode/LobbyWorldControllerVirtualJoystickTests.cs new file mode 100644 index 00000000..1551fd79 --- /dev/null +++ b/Client/Assets/Script/Tests/EditMode/LobbyWorldControllerVirtualJoystickTests.cs @@ -0,0 +1,83 @@ +using NUnit.Framework; +using System.Reflection; +using UnityEngine; +using XGame; +using XGame.VirtualInput; + +public sealed class LobbyWorldControllerVirtualJoystickTests +{ + [Test] + public void MapMoveInputForTest_UsesJoystickVectorWithCameraAxes() + { + Vector3 dir = LobbyWorldController.MapMoveInputForTest( + new Vector2(1f, 0f), + Vector3.forward, + Vector3.right, + false, + false, + false, + false); + + Assert.That(dir, Is.EqualTo(Vector3.right)); + } + + [Test] + public void MapMoveInputForTest_CombinesKeyboardAndJoystick() + { + Vector3 dir = LobbyWorldController.MapMoveInputForTest( + new Vector2(0f, 1f), + Vector3.forward, + Vector3.right, + true, + false, + false, + false); + + Assert.That(dir, Is.EqualTo(Vector3.forward * 2f)); + } + + [Test] + public void ReleaseJoystickUIForTest_ClearsVirtualJoystickReferences() + { + GameObject controllerObj = new GameObject("LobbyWorldControllerTest"); + GameObject joystickObj = new GameObject("UI_VirtualJoystick", typeof(RectTransform)); + try + { + LobbyWorldController controller = controllerObj.AddComponent(); + VirtualJoystick joystick = joystickObj.AddComponent(); + SetPrivateField(controller, "joystickRoot", joystickObj.GetComponent()); + SetPrivateField(controller, "virtualJoystick", joystick); + + InvokePrivate(controller, "ReleaseJoystickUI", false); + + Assert.That(GetPrivateField(controller, "joystickRoot"), Is.Null); + Assert.That(GetPrivateField(controller, "virtualJoystick"), Is.Null); + } + finally + { + Object.DestroyImmediate(joystickObj); + Object.DestroyImmediate(controllerObj); + } + } + + private static void SetPrivateField(object target, string name, object value) + { + FieldInfo field = target.GetType().GetField(name, BindingFlags.Instance | BindingFlags.NonPublic); + Assert.That(field, Is.Not.Null); + field.SetValue(target, value); + } + + private static object GetPrivateField(object target, string name) + { + FieldInfo field = target.GetType().GetField(name, BindingFlags.Instance | BindingFlags.NonPublic); + Assert.That(field, Is.Not.Null); + return field.GetValue(target); + } + + private static void InvokePrivate(object target, string name, params object[] args) + { + MethodInfo method = target.GetType().GetMethod(name, BindingFlags.Instance | BindingFlags.NonPublic); + Assert.That(method, Is.Not.Null); + method.Invoke(target, args); + } +} diff --git a/Client/Assets/Script/Tests/EditMode/LobbyWorldControllerVirtualJoystickTests.cs.meta b/Client/Assets/Script/Tests/EditMode/LobbyWorldControllerVirtualJoystickTests.cs.meta new file mode 100644 index 00000000..e07dbe25 --- /dev/null +++ b/Client/Assets/Script/Tests/EditMode/LobbyWorldControllerVirtualJoystickTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a2bd7fd1fc87460095c485b27dcc0e2c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Script/Tests/EditMode/VirtualActionButtonTests.cs b/Client/Assets/Script/Tests/EditMode/VirtualActionButtonTests.cs new file mode 100644 index 00000000..858d9b6a --- /dev/null +++ b/Client/Assets/Script/Tests/EditMode/VirtualActionButtonTests.cs @@ -0,0 +1,210 @@ +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using NUnit.Framework; +using TMPro; +using UnityEngine; +using UnityEngine.UI; +using XGame.VirtualInput; + +public sealed class VirtualActionButtonTests +{ + private readonly List _roots = new List(); + + [TearDown] + public void TearDown() + { + foreach (GameObject root in _roots) + { + if (root != null) + { + Object.DestroyImmediate(root); + } + } + _roots.Clear(); + } + + [Test] + public void PointerTap_EmitsDownThenTap() + { + VirtualActionButton button = CreateButton(ActionButtonId.Primary); + List events = Capture(button); + + button.HandlePointerDownForTest(new Vector2(100f, 100f), 1, Time.unscaledTime); + button.HandlePointerUpForTest(new Vector2(102f, 100f), 1, 0.1f); + + Assert.That(events.Select(e => e.Phase), Is.EqualTo(new[] { ActionButtonPhase.Down, ActionButtonPhase.Tap })); + Assert.That(events.Last().ButtonId, Is.EqualTo(ActionButtonId.Primary)); + } + + [Test] + public void PointerDragPastThreshold_EmitsReleaseWithDirection() + { + VirtualActionButton button = CreateButton(ActionButtonId.Skill1); + List events = Capture(button); + + button.HandlePointerDownForTest(new Vector2(100f, 100f), 1, 0f); + button.HandleDragForTest(new Vector2(160f, 100f), 1, 0.1f); + button.HandlePointerUpForTest(new Vector2(160f, 100f), 1, 0.2f); + + ActionButtonEvent release = events.Last(); + Assert.That(release.Phase, Is.EqualTo(ActionButtonPhase.Release)); + Assert.That(release.Direction.x, Is.EqualTo(1f).Within(0.001f)); + Assert.That(release.Direction.y, Is.EqualTo(0f).Within(0.001f)); + Assert.That(release.Distance01, Is.GreaterThan(0.7f)); + } + + [Test] + public void PointerUpInsideCancelArea_EmitsCancel() + { + VirtualActionButton button = CreateButton(ActionButtonId.Skill2); + RectTransform cancelArea = CreateRect("CancelArea", new Vector2(200f, 100f), new Vector2(80f, 80f)); + button.SetCancelArea(cancelArea); + List events = Capture(button); + + button.HandlePointerDownForTest(new Vector2(100f, 100f), 1, 0f); + button.HandleDragForTest(new Vector2(200f, 100f), 1, 0.1f); + button.HandlePointerUpForTest(new Vector2(200f, 100f), 1, 0.2f); + + Assert.That(events.Last().Phase, Is.EqualTo(ActionButtonPhase.Cancel)); + Assert.That(events.Last().IsCanceled, Is.True); + } + + [Test] + public void Cooldown_EmitsBlockedOnly() + { + VirtualActionButton button = CreateButton(ActionButtonId.Skill3); + List events = Capture(button); + + button.SetCooldown(3f, 5f); + button.HandlePointerDownForTest(new Vector2(100f, 100f), 1, 0f); + + Assert.That(events.Select(e => e.Phase), Is.EqualTo(new[] { ActionButtonPhase.Blocked })); + } + + [Test] + public void ChargesZero_EmitsBlockedAndShowsChargeText() + { + VirtualActionButton button = CreateButton(ActionButtonId.Skill4, out _, out TMP_Text chargeText); + List events = Capture(button); + + button.SetCharges(0); + button.HandlePointerDownForTest(new Vector2(100f, 100f), 1, 0f); + + Assert.That(events.Single().Phase, Is.EqualTo(ActionButtonPhase.Blocked)); + Assert.That(chargeText.text, Is.EqualTo("0")); + } + + [Test] + public void BindNodes_FindsPrefabChildrenWithButtonPrefix() + { + VirtualActionButton button = CreateButton(ActionButtonId.Skill1, "Skill1", out _, out TMP_Text chargeText); + + button.SetCharges(2); + + Assert.That(chargeText.text, Is.EqualTo("2")); + Assert.That(chargeText.gameObject.activeSelf, Is.True); + } + + [Test] + public void Hold_EmitsHoldStartTickAndEnd() + { + VirtualActionButton button = CreateButton(ActionButtonId.Primary); + List events = Capture(button); + + button.HandlePointerDownForTest(new Vector2(100f, 100f), 1, 0f); + button.HandleDragForTest(new Vector2(102f, 100f), 1, 0.4f); + button.HandleDragForTest(new Vector2(102f, 100f), 1, 0.51f); + button.HandlePointerUpForTest(new Vector2(102f, 100f), 1, 0.6f); + + Assert.That(events.Select(e => e.Phase), Does.Contain(ActionButtonPhase.HoldStart)); + Assert.That(events.Select(e => e.Phase), Does.Contain(ActionButtonPhase.HoldTick)); + Assert.That(events.Select(e => e.Phase), Does.Contain(ActionButtonPhase.HoldEnd)); + } + + [Test] + public void Update_EmitsHoldWhilePointerIsStationary() + { + VirtualActionButton button = CreateButton(ActionButtonId.Primary); + List events = Capture(button); + float startedAt = Time.unscaledTime - 0.4f; + + button.HandlePointerDownForTest(new Vector2(100f, 100f), 1, startedAt); + InvokePrivate(button, "Update"); + + Assert.That(events.Select(e => e.Phase), Does.Contain(ActionButtonPhase.HoldStart)); + } + + [Test] + public void OnDisable_CancelsActivePointer() + { + VirtualActionButton button = CreateButton(ActionButtonId.Skill2); + List events = Capture(button); + + button.HandlePointerDownForTest(new Vector2(100f, 100f), 1, 0f); + InvokePrivate(button, "OnDisable"); + + Assert.That(events.Select(e => e.Phase), Is.EqualTo(new[] { ActionButtonPhase.Down, ActionButtonPhase.Cancel })); + } + + private VirtualActionButton CreateButton(ActionButtonId id) + { + return CreateButton(id, out _, out _); + } + + private VirtualActionButton CreateButton(ActionButtonId id, out Image cooldownMask, out TMP_Text chargeText) + { + return CreateButton(id, null, out cooldownMask, out chargeText); + } + + private VirtualActionButton CreateButton(ActionButtonId id, string childPrefix, out Image cooldownMask, out TMP_Text chargeText) + { + RectTransform rect = CreateRect("Btn_" + id, new Vector2(100f, 100f), new Vector2(100f, 100f)); + string prefix = string.IsNullOrEmpty(childPrefix) ? string.Empty : childPrefix + "_"; + new GameObject(prefix + "Icon", typeof(RectTransform), typeof(Image)).transform.SetParent(rect, false); + cooldownMask = new GameObject(prefix + "CooldownMask", typeof(RectTransform), typeof(Image)).GetComponent(); + cooldownMask.transform.SetParent(rect, false); + chargeText = new GameObject(prefix + "ChargeText", typeof(RectTransform), typeof(TextMeshProUGUI)).GetComponent(); + chargeText.transform.SetParent(rect, false); + new GameObject(prefix + "CooldownText", typeof(RectTransform), typeof(TextMeshProUGUI)).transform.SetParent(rect, false); + new GameObject(prefix + "AimIndicator", typeof(RectTransform)).transform.SetParent(rect, false); + + VirtualActionButton button = rect.gameObject.AddComponent(); + button.ButtonId = id; + SetPrivateField(button, "screenCenterOverride", new Vector2(100f, 100f)); + SetPrivateField(button, "screenRadiusOverride", 50f); + InvokePrivate(button, "Awake"); + return button; + } + + private RectTransform CreateRect(string name, Vector2 position, Vector2 size) + { + GameObject go = new GameObject(name, typeof(RectTransform)); + _roots.Add(go); + RectTransform rect = go.GetComponent(); + rect.position = position; + rect.sizeDelta = size; + return rect; + } + + private static List Capture(VirtualActionButton button) + { + var events = new List(); + button.ButtonEvent += events.Add; + return events; + } + + private static void SetPrivateField(object target, string name, object value) + { + FieldInfo field = target.GetType().GetField(name, BindingFlags.Instance | BindingFlags.NonPublic); + Assert.That(field, Is.Not.Null); + field.SetValue(target, value); + } + + private static void InvokePrivate(object target, string name, params object[] args) + { + MethodInfo method = target.GetType().GetMethod(name, BindingFlags.Instance | BindingFlags.NonPublic); + Assert.That(method, Is.Not.Null); + method.Invoke(target, args); + } +} diff --git a/Client/Assets/Script/Tests/EditMode/VirtualActionButtonTests.cs.meta b/Client/Assets/Script/Tests/EditMode/VirtualActionButtonTests.cs.meta new file mode 100644 index 00000000..80427c94 --- /dev/null +++ b/Client/Assets/Script/Tests/EditMode/VirtualActionButtonTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2742fc0e43284790950df7a4a8b5cc6e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Script/Tests/EditMode/VirtualActionPadTests.cs b/Client/Assets/Script/Tests/EditMode/VirtualActionPadTests.cs new file mode 100644 index 00000000..8b8d1fae --- /dev/null +++ b/Client/Assets/Script/Tests/EditMode/VirtualActionPadTests.cs @@ -0,0 +1,117 @@ +using System.Collections.Generic; +using System.Reflection; +using NUnit.Framework; +using UnityEngine; +using XGame.VirtualInput; + +public sealed class VirtualActionPadTests +{ + private GameObject _root; + + [TearDown] + public void TearDown() + { + if (_root != null) + { + Object.DestroyImmediate(_root); + _root = null; + } + } + + [Test] + public void Awake_FindsFiveButtonsByNameAndAssignsIds() + { + VirtualActionPad pad = CreatePadWithButtons(); + + Assert.That(pad.GetButton(ActionButtonId.Primary), Is.Not.Null); + Assert.That(pad.GetButton(ActionButtonId.Skill1), Is.Not.Null); + Assert.That(pad.GetButton(ActionButtonId.Skill2), Is.Not.Null); + Assert.That(pad.GetButton(ActionButtonId.Skill3), Is.Not.Null); + Assert.That(pad.GetButton(ActionButtonId.Skill4), Is.Not.Null); + Assert.That(pad.GetButton(ActionButtonId.Skill4).ButtonId, Is.EqualTo(ActionButtonId.Skill4)); + } + + [Test] + public void ChildButtonEvent_IsForwardedByPad() + { + VirtualActionPad pad = CreatePadWithButtons(); + var events = new List(); + pad.ButtonEvent += events.Add; + + pad.GetButton(ActionButtonId.Primary).HandlePointerDownForTest(new Vector2(100f, 100f), 1, 0f); + + Assert.That(events.Count, Is.EqualTo(1)); + Assert.That(events[0].ButtonId, Is.EqualTo(ActionButtonId.Primary)); + Assert.That(events[0].Phase, Is.EqualTo(ActionButtonPhase.Down)); + } + + [Test] + public void PadStateApi_ForwardsToChildButton() + { + VirtualActionPad pad = CreatePadWithButtons(); + var events = new List(); + pad.ButtonEvent += events.Add; + + pad.SetCharges(ActionButtonId.Skill1, 0); + pad.GetButton(ActionButtonId.Skill1).HandlePointerDownForTest(new Vector2(100f, 100f), 1, 0f); + + Assert.That(events.Count, Is.EqualTo(1)); + Assert.That(events[0].Phase, Is.EqualTo(ActionButtonPhase.Blocked)); + } + + [Test] + public void SetCancelAreaVisible_TogglesCancelArea() + { + VirtualActionPad pad = CreatePadWithButtons(); + Transform cancel = _root.transform.Find("CancelArea"); + Assert.That(cancel, Is.Not.Null); + + pad.SetCancelAreaVisible(true); + Assert.That(cancel.gameObject.activeSelf, Is.True); + + pad.SetCancelAreaVisible(false); + Assert.That(cancel.gameObject.activeSelf, Is.False); + } + + private VirtualActionPad CreatePadWithButtons() + { + _root = new GameObject("UI_VirtualActionPad", typeof(RectTransform)); + CreateButtonChild("Btn_Primary", ActionButtonId.Primary); + CreateButtonChild("Btn_Skill1", ActionButtonId.Skill1); + CreateButtonChild("Btn_Skill2", ActionButtonId.Skill2); + CreateButtonChild("Btn_Skill3", ActionButtonId.Skill3); + CreateButtonChild("Btn_Skill4", ActionButtonId.Skill4); + GameObject cancel = new GameObject("CancelArea", typeof(RectTransform)); + cancel.transform.SetParent(_root.transform, false); + cancel.SetActive(false); + + VirtualActionPad pad = _root.AddComponent(); + InvokePrivate(pad, "Awake"); + return pad; + } + + private void CreateButtonChild(string name, ActionButtonId id) + { + GameObject child = new GameObject(name, typeof(RectTransform)); + child.transform.SetParent(_root.transform, false); + VirtualActionButton button = child.AddComponent(); + button.ButtonId = id; + SetPrivateField(button, "screenCenterOverride", new Vector2(100f, 100f)); + SetPrivateField(button, "screenRadiusOverride", 50f); + InvokePrivate(button, "Awake"); + } + + private static void SetPrivateField(object target, string name, object value) + { + FieldInfo field = target.GetType().GetField(name, BindingFlags.Instance | BindingFlags.NonPublic); + Assert.That(field, Is.Not.Null); + field.SetValue(target, value); + } + + private static void InvokePrivate(object target, string name, params object[] args) + { + MethodInfo method = target.GetType().GetMethod(name, BindingFlags.Instance | BindingFlags.NonPublic); + Assert.That(method, Is.Not.Null); + method.Invoke(target, args); + } +} diff --git a/Client/Assets/Script/Tests/EditMode/VirtualActionPadTests.cs.meta b/Client/Assets/Script/Tests/EditMode/VirtualActionPadTests.cs.meta new file mode 100644 index 00000000..6213e8c6 --- /dev/null +++ b/Client/Assets/Script/Tests/EditMode/VirtualActionPadTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c66bc2b2fc0c435aa305004fd1d560e7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Script/Tests/EditMode/VirtualInputPrefabLayoutTests.cs b/Client/Assets/Script/Tests/EditMode/VirtualInputPrefabLayoutTests.cs new file mode 100644 index 00000000..0ec6f27f --- /dev/null +++ b/Client/Assets/Script/Tests/EditMode/VirtualInputPrefabLayoutTests.cs @@ -0,0 +1,46 @@ +using System.IO; +using NUnit.Framework; +#if UNITY_EDITOR +using XGame.EditorTools; +#endif + +public sealed class VirtualInputPrefabLayoutTests +{ + [Test] + public void VirtualJoystickJson_DefinesReusableJoystickPrefab() + { + string json = File.ReadAllText("../Doc/UIPrefabCreater/UI_VirtualJoystick.json"); + + Assert.That(json, Does.Contain("\"prefabName\": \"UI_VirtualJoystick\"")); + Assert.That(json, Does.Contain("\"prefabPath\": \"Assets/Game/Art/UI/Prefab/UI_VirtualJoystick.prefab\"")); + Assert.That(json, Does.Contain("\"name\": \"Knob\"")); + Assert.That(json, Does.Contain("\"typeName\": \"XGame.VirtualInput.VirtualJoystick\"")); + } + + [Test] + public void VirtualActionPadJson_DefinesFiveButtonsAndCancelArea() + { + string json = File.ReadAllText("../Doc/UIPrefabCreater/UI_VirtualActionPad.json"); + + Assert.That(json, Does.Contain("\"prefabName\": \"UI_VirtualActionPad\"")); + Assert.That(json, Does.Contain("\"prefabPath\": \"Assets/Game/Art/UI/Prefab/UI_VirtualActionPad.prefab\"")); + Assert.That(json, Does.Contain("\"typeName\": \"XGame.VirtualInput.VirtualActionPad\"")); + Assert.That(json, Does.Contain("\"Btn_Primary\"")); + Assert.That(json, Does.Contain("\"Btn_Skill1\"")); + Assert.That(json, Does.Contain("\"Btn_Skill2\"")); + Assert.That(json, Does.Contain("\"Btn_Skill3\"")); + Assert.That(json, Does.Contain("\"Btn_Skill4\"")); + Assert.That(json, Does.Contain("\"CancelArea\"")); + Assert.That(json, Does.Contain("\"Primary_CooldownMask\"")); + Assert.That(json, Does.Contain("\"Skill1_ChargeText\"")); + } + +#if UNITY_EDITOR + [Test] + public void VirtualInputJsonFiles_PassPrefabBuilderValidation() + { + Assert.That(JsonUIPrefabBuilder.Validate("../Doc/UIPrefabCreater/UI_VirtualJoystick.json").Ok, Is.True); + Assert.That(JsonUIPrefabBuilder.Validate("../Doc/UIPrefabCreater/UI_VirtualActionPad.json").Ok, Is.True); + } +#endif +} diff --git a/Client/Assets/Script/Tests/EditMode/VirtualInputPrefabLayoutTests.cs.meta b/Client/Assets/Script/Tests/EditMode/VirtualInputPrefabLayoutTests.cs.meta new file mode 100644 index 00000000..d9f3bd2c --- /dev/null +++ b/Client/Assets/Script/Tests/EditMode/VirtualInputPrefabLayoutTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e9cad9d7487d498986dca6b134d5a90b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Script/Tests/EditMode/VirtualJoystickTests.cs b/Client/Assets/Script/Tests/EditMode/VirtualJoystickTests.cs new file mode 100644 index 00000000..cd338314 --- /dev/null +++ b/Client/Assets/Script/Tests/EditMode/VirtualJoystickTests.cs @@ -0,0 +1,112 @@ +using System; +using System.Reflection; +using NUnit.Framework; +using UnityEngine; +using XGame.VirtualInput; + +public sealed class VirtualJoystickTests +{ + private GameObject _root; + + [TearDown] + public void TearDown() + { + if (_root != null) + { + UnityEngine.Object.DestroyImmediate(_root); + _root = null; + } + } + + [Test] + public void ApplyPointerInsideDeadZone_ReportsInactiveAndZero() + { + VirtualJoystick joystick = CreateJoystick(out _); + + ApplyPointer(joystick, new Vector2(106f, 100f)); + + Assert.That(joystick.IsActive, Is.False); + Assert.That(joystick.Value, Is.EqualTo(Vector2.zero)); + } + + [Test] + public void ApplyPointerBeyondRadius_ClampsValueAndKnobTravel() + { + VirtualJoystick joystick = CreateJoystick(out RectTransform knob); + + ApplyPointer(joystick, new Vector2(300f, 100f)); + + Assert.That(joystick.IsActive, Is.True); + Assert.That(joystick.Value.x, Is.EqualTo(1f).Within(0.001f)); + Assert.That(joystick.Value.y, Is.EqualTo(0f).Within(0.001f)); + Assert.That(knob.anchoredPosition.x, Is.EqualTo(24f).Within(0.001f)); + Assert.That(knob.anchoredPosition.y, Is.EqualTo(0f).Within(0.001f)); + } + + [Test] + public void ReleasePointer_ResetsValueAndRaisesEnded() + { + VirtualJoystick joystick = CreateJoystick(out RectTransform knob); + int ended = 0; + joystick.Ended += () => ended++; + + ApplyPointer(joystick, new Vector2(300f, 100f)); + ReleasePointer(joystick); + + Assert.That(joystick.IsActive, Is.False); + Assert.That(joystick.Value, Is.EqualTo(Vector2.zero)); + Assert.That(knob.anchoredPosition, Is.EqualTo(Vector2.zero)); + Assert.That(ended, Is.EqualTo(1)); + } + + [Test] + public void IsScreenPositionInAcquireArea_UsesAcquireRadiusMultiplier() + { + VirtualJoystick joystick = CreateJoystick(out _); + + Assert.That(joystick.IsScreenPositionInAcquireArea(new Vector2(179f, 100f)), Is.True); + Assert.That(joystick.IsScreenPositionInAcquireArea(new Vector2(181f, 100f)), Is.False); + } + + private VirtualJoystick CreateJoystick(out RectTransform knob) + { + _root = new GameObject("UI_VirtualJoystick", typeof(RectTransform)); + RectTransform rootRect = _root.GetComponent(); + rootRect.sizeDelta = new Vector2(100f, 100f); + + GameObject knobObject = new GameObject("Knob", typeof(RectTransform)); + knobObject.transform.SetParent(_root.transform, false); + knob = knobObject.GetComponent(); + knob.sizeDelta = new Vector2(52f, 52f); + + VirtualJoystick joystick = _root.AddComponent(); + SetPrivateField(joystick, "screenCenterOverride", new Vector2(100f, 100f)); + SetPrivateField(joystick, "screenRadiusOverride", 50f); + InvokePrivate(joystick, "Awake"); + return joystick; + } + + private static void ApplyPointer(VirtualJoystick joystick, Vector2 screenPosition) + { + InvokePrivate(joystick, "ApplyPointer", screenPosition); + } + + private static void ReleasePointer(VirtualJoystick joystick) + { + InvokePrivate(joystick, "ReleasePointer"); + } + + private static void SetPrivateField(object target, string name, object value) + { + FieldInfo field = target.GetType().GetField(name, BindingFlags.Instance | BindingFlags.NonPublic); + Assert.That(field, Is.Not.Null); + field.SetValue(target, value); + } + + private static void InvokePrivate(object target, string name, params object[] args) + { + MethodInfo method = target.GetType().GetMethod(name, BindingFlags.Instance | BindingFlags.NonPublic); + Assert.That(method, Is.Not.Null); + method.Invoke(target, args); + } +} diff --git a/Client/Assets/Script/Tests/EditMode/VirtualJoystickTests.cs.meta b/Client/Assets/Script/Tests/EditMode/VirtualJoystickTests.cs.meta new file mode 100644 index 00000000..a5ed36c0 --- /dev/null +++ b/Client/Assets/Script/Tests/EditMode/VirtualJoystickTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 801fbb81f7954a04a5673c91a4d1a8a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Script/xmain/Client/LobbyWorldController.cs b/Client/Assets/Script/xmain/Client/LobbyWorldController.cs index be57aea8..5a1849ee 100644 --- a/Client/Assets/Script/xmain/Client/LobbyWorldController.cs +++ b/Client/Assets/Script/xmain/Client/LobbyWorldController.cs @@ -5,6 +5,7 @@ using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Rendering; using UnityEngine.UI; +using XGame.VirtualInput; using XWorld.Framework.Protocol; using UObject = UnityEngine.Object; @@ -29,7 +30,7 @@ namespace XGame public bool IsPlaceholder; // Obj 当前是胶囊占位(真实角色预设还在异步加载),加载完成后会原地升级 } - private const string JoystickPrefabPath = "Assets/Game/Art/UI/Prefab/UI_LobbyJoystick.prefab"; + private const string JoystickPrefabPath = "Assets/Game/Art/UI/Prefab/UI_VirtualJoystick.prefab"; private const string CharacterConfigResourcePath = "Config/CharacterConfig"; private const string SelectedCharacterKey = "CharacterSwitch.SelectedCharacterId"; private const float MoveSpeed = 1f; @@ -39,7 +40,6 @@ namespace XGame private const float DirectionChangeMinInterval = 0.1f; private const float DirectionChangeDot = 0.98f; private const float JoystickRadius = 74f; - private const float JoystickKnobRadius = 28f; private const float JoystickPadding = 100.0f; private const float JoystickDeadZone = 0.18f; private const float JoystickAcquireRadiusMultiplier = 1.6f; @@ -83,6 +83,7 @@ namespace XGame private float lastPinchDistance; private RectTransform joystickRoot; private RectTransform joystickWidget; // 视觉容器:新预设里的 "Joystick" 子节点(自带定位);找不到则回退为 joystickRoot + private VirtualJoystick virtualJoystick; private RectTransform joystickKnob; private bool joystickMouseCaptured; private int joystickTouchFingerId = -1; @@ -151,6 +152,7 @@ namespace XGame { joystickRoot.gameObject.SetActive(false); } + OnVirtualJoystickEnded(); } public void RefreshSelectedFigure() @@ -218,6 +220,11 @@ namespace XGame UpdateCamera(); } + private void OnDestroy() + { + ReleaseJoystickUI(true); + } + private void ApplyState(LobbyStateMsg state) { ReconcileSelfPlayerId(state); @@ -382,7 +389,6 @@ namespace XGame return; } - UpdateJoystick(); Vector3 dir = GetMoveDirection(); bool moving = dir.sqrMagnitude > 0.001f; if (moving) @@ -418,17 +424,36 @@ namespace XGame Camera cam = Camera.main; Vector3 forward = cam != null ? cam.transform.forward : Vector3.forward; Vector3 right = cam != null ? cam.transform.right : Vector3.right; - forward.y = 0f; - right.y = 0f; - forward = forward.sqrMagnitude > 0.001f ? forward.normalized : Vector3.forward; - right = right.sqrMagnitude > 0.001f ? right.normalized : Vector3.right; + return MapMoveInputForTest( + joystickActive ? joystick : Vector2.zero, + forward, + right, + Input.GetKey(KeyCode.W), + Input.GetKey(KeyCode.S), + Input.GetKey(KeyCode.A), + Input.GetKey(KeyCode.D)); + } + + public static Vector3 MapMoveInputForTest( + Vector2 joystickInput, + Vector3 cameraForward, + Vector3 cameraRight, + bool keyW, + bool keyS, + bool keyA, + bool keyD) + { + cameraForward.y = 0f; + cameraRight.y = 0f; + Vector3 forward = cameraForward.sqrMagnitude > 0.001f ? cameraForward.normalized : Vector3.forward; + Vector3 right = cameraRight.sqrMagnitude > 0.001f ? cameraRight.normalized : Vector3.right; Vector3 dir = Vector3.zero; - if (Input.GetKey(KeyCode.W)) dir += forward; - if (Input.GetKey(KeyCode.S)) dir -= forward; - if (Input.GetKey(KeyCode.A)) dir -= right; - if (Input.GetKey(KeyCode.D)) dir += right; - if (joystickActive) dir += right * joystick.x + forward * joystick.y; + if (keyW) dir += forward; + if (keyS) dir -= forward; + if (keyA) dir -= right; + if (keyD) dir += right; + if (joystickInput.sqrMagnitude > 0.001f) dir += right * joystickInput.x + forward * joystickInput.y; return dir; } @@ -917,7 +942,7 @@ namespace XGame rootObj = Instantiate(prefabObj); UIManager.AttachTo(UILayer.HUD, rootObj); - rootObj.name = "UI_LobbyJoystick"; + rootObj.name = "UI_VirtualJoystick"; joystickRoot = rootObj.GetComponent(); if (joystickRoot == null) { @@ -926,6 +951,16 @@ namespace XGame joystickRoot.localScale = Vector3.one; // 兜底:设备包 prefab 根缩放异常时仍可见 // 视觉容器:新预设里是 "Joystick" 子节点(预设自带定位);找不到则用根并由 ApplyJoystickLayout 代码定位 + virtualJoystick = rootObj.GetComponent(); + if (virtualJoystick == null) + { + virtualJoystick = rootObj.AddComponent(); + } + virtualJoystick.Changed -= OnVirtualJoystickChanged; + virtualJoystick.Changed += OnVirtualJoystickChanged; + virtualJoystick.Ended -= OnVirtualJoystickEnded; + virtualJoystick.Ended += OnVirtualJoystickEnded; + Transform widget = joystickRoot.FindTransform("Joystick"); joystickWidget = (widget as RectTransform) ?? joystickRoot; if (joystickWidget == joystickRoot) @@ -939,9 +974,7 @@ namespace XGame if (joystickKnob == null) { Debug.LogError("[LobbyWorldController] joystick prefab missing Knob node: " + JoystickPrefabPath); - Destroy(rootObj); - joystickRoot = null; - joystickWidget = null; + ReleaseJoystickUI(true); yield break; } @@ -949,6 +982,59 @@ namespace XGame UpdateJoystickVisual(); } + private void ReleaseJoystickUI(bool destroyObject) + { + if (virtualJoystick != null) + { + virtualJoystick.Changed -= OnVirtualJoystickChanged; + virtualJoystick.Ended -= OnVirtualJoystickEnded; + } + + GameObject rootObj = joystickRoot != null ? joystickRoot.gameObject : null; + virtualJoystick = null; + joystickRoot = null; + joystickWidget = null; + joystickKnob = null; + joystickMouseCaptured = false; + joystickTouchFingerId = -1; + joystickLoading = false; + OnVirtualJoystickEnded(); + + if (destroyObject && rootObj != null) + { + DestroyUnityObject(rootObj); + } + } + + private static void DestroyUnityObject(UObject obj) + { + if (obj == null) + { + return; + } + + if (Application.isPlaying) + { + Destroy(obj); + } + else + { + DestroyImmediate(obj); + } + } + + private void OnVirtualJoystickChanged(Vector2 value, bool active) + { + joystick = active ? value : Vector2.zero; + joystickActive = active; + } + + private void OnVirtualJoystickEnded() + { + joystick = Vector2.zero; + joystickActive = false; + } + private Transform GetHudParent() { RectTransform hud = UIManager.GetLayer(UILayer.HUD); @@ -1229,9 +1315,7 @@ namespace XGame private bool IsInJoystickArea(Vector2 screenPosition) { - Vector2 center = GetJoystickScreenCenter(); - float radius = GetJoystickScreenRadius(); - return Vector2.Distance(screenPosition, center) <= radius * JoystickAcquireRadiusMultiplier; + return virtualJoystick != null && virtualJoystick.IsScreenPositionInAcquireArea(screenPosition); } private bool EnsureCharacterConfig() diff --git a/Client/Assets/Script/xmain/Input.meta b/Client/Assets/Script/xmain/Input.meta new file mode 100644 index 00000000..bb7e7667 --- /dev/null +++ b/Client/Assets/Script/xmain/Input.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0d025722ff61490e967ec8bb7e4d68dd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Script/xmain/Input/VirtualActionButton.cs b/Client/Assets/Script/xmain/Input/VirtualActionButton.cs new file mode 100644 index 00000000..3d4db4d0 --- /dev/null +++ b/Client/Assets/Script/xmain/Input/VirtualActionButton.cs @@ -0,0 +1,498 @@ +using System; +using TMPro; +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.UI; + +namespace XGame.VirtualInput +{ + public enum ActionButtonId + { + Primary, + Skill1, + Skill2, + Skill3, + Skill4 + } + + public enum ActionButtonPhase + { + Down, + Drag, + HoldStart, + HoldTick, + HoldEnd, + Tap, + Release, + Cancel, + Blocked + } + + public readonly struct ActionButtonEvent + { + public ActionButtonEvent( + ActionButtonId buttonId, + ActionButtonPhase phase, + Vector2 screenPosition, + Vector2 localVector, + Vector2 direction, + float distance01, + float heldSeconds, + bool isCanceled, + int pointerId) + { + ButtonId = buttonId; + Phase = phase; + ScreenPosition = screenPosition; + LocalVector = localVector; + Direction = direction; + Distance01 = distance01; + HeldSeconds = heldSeconds; + IsCanceled = isCanceled; + PointerId = pointerId; + } + + public ActionButtonId ButtonId { get; } + public ActionButtonPhase Phase { get; } + public Vector2 ScreenPosition { get; } + public Vector2 LocalVector { get; } + public Vector2 Direction { get; } + public float Distance01 { get; } + public float HeldSeconds { get; } + public bool IsCanceled { get; } + public int PointerId { get; } + } + + public sealed class VirtualActionButton : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler + { + [SerializeField] public ActionButtonId ButtonId; + [SerializeField] private float holdThresholdSeconds = 0.35f; + [SerializeField] private float holdTickIntervalSeconds = 0.1f; + [SerializeField] private float releaseDistanceThreshold01 = 0.25f; + [SerializeField] private float maxDragRadiusMultiplier = 1.5f; + + private Image icon; + private Image cooldownMask; + private TMP_Text cooldownText; + private TMP_Text chargeText; + private GameObject aimIndicator; + private RectTransform cancelArea; + private RectTransform rectTransform; + private Button unityButton; + private CanvasGroup canvasGroup; + + private bool enabledByState = true; + private int charges = -1; + private float cooldownRemaining; + private float cooldownDuration; + private bool pointerDown; + private int activePointerId = int.MinValue; + private float pointerDownTime; + private bool holdStarted; + private float nextHoldTickTime; + private Vector2 lastScreenPosition; + private ActionButtonEvent lastDragEvent; + + private Vector2? screenCenterOverride; + private float? screenRadiusOverride; + + public bool IsInteractable => enabledByState && cooldownRemaining <= 0f && charges != 0; + public event Action ButtonEvent; + + private void Awake() + { + BindNodes(); + RefreshVisuals(); + } + + private void OnDisable() + { + CancelActivePointer(Time.unscaledTime); + SetAimVisible(false); + } + + private void Update() + { + if (cooldownRemaining > 0f) + { + cooldownRemaining = Mathf.Max(0f, cooldownRemaining - Time.unscaledDeltaTime); + RefreshVisuals(); + } + + if (pointerDown) + { + MaybeEmitHold(Time.unscaledTime, activePointerId, lastScreenPosition); + } + } + + public void OnPointerDown(PointerEventData eventData) + { + HandlePointerDown(eventData.position, eventData.pointerId, Time.unscaledTime); + } + + public void OnDrag(PointerEventData eventData) + { + HandleDrag(eventData.position, eventData.pointerId, Time.unscaledTime); + } + + public void OnPointerUp(PointerEventData eventData) + { + HandlePointerUp(eventData.position, eventData.pointerId, Time.unscaledTime); + } + + public void HandlePointerDownForTest(Vector2 screenPosition, int pointerId, float now) + { + HandlePointerDown(screenPosition, pointerId, now); + } + + public void HandleDragForTest(Vector2 screenPosition, int pointerId, float now) + { + HandleDrag(screenPosition, pointerId, now); + } + + public void HandlePointerUpForTest(Vector2 screenPosition, int pointerId, float now) + { + HandlePointerUp(screenPosition, pointerId, now); + } + + public void SetCooldown(float remainingSeconds, float durationSeconds) + { + cooldownRemaining = Mathf.Max(0f, remainingSeconds); + cooldownDuration = Mathf.Max(0f, durationSeconds); + RefreshVisuals(); + } + + public void SetCharges(int count) + { + charges = count; + RefreshVisuals(); + } + + public void SetButtonEnabled(bool enabled) + { + enabledByState = enabled; + RefreshVisuals(); + } + + public void SetCancelArea(RectTransform area) + { + cancelArea = area; + } + + public void SetIcon(Sprite sprite) + { + if (icon == null) + { + BindNodes(); + } + + if (icon != null) + { + icon.sprite = sprite; + icon.enabled = sprite != null; + } + } + + private void BindNodes() + { + rectTransform = transform as RectTransform; + unityButton = GetComponent