Compare commits
4 Commits
8182258102
...
829ff77e4b
| Author | SHA1 | Date | |
|---|---|---|---|
| 829ff77e4b | |||
| fe53d90929 | |||
| 543b83e707 | |||
| 0889bb0f25 |
@@ -11,7 +11,10 @@ Multiplayer arena game built with **Unity 6000.3.10f1** and **Unity Netcode for
|
||||
|
||||
## Game Design Documentation
|
||||
|
||||
Design docs are maintained in Obsidian Vault: `C:\Users\dal4s\OneDrive\문서\Obsidian Vault\Colosseum`
|
||||
Design docs are maintained in Obsidian Vault: `\\Truenas\smb\Obsidian Vault\Colosseum`
|
||||
|
||||
- Always use the shared Obsidian Vault at `\\Truenas\smb\Obsidian Vault\Colosseum` for project documentation updates.
|
||||
- Do not write Colosseum design notes to `C:\Users\dal4s\OneDrive\문서\Obsidian Vault\Colosseum`; that path is not the active vault for this project.
|
||||
|
||||
### Game Concept
|
||||
- **Genre**: Online multiplayer co-op action RPG (3rd person)
|
||||
@@ -327,6 +330,7 @@ public class NetworkedComponent : NetworkBehaviour
|
||||
- After Unity-related edits, refresh or compile as needed and check the Unity console before proceeding.
|
||||
- For networked play tests, prefer a temporary non-conflicting test port when needed and restore the default port after validation.
|
||||
- The user has a strong project preference that play mode must be stopped before edits because network ports can remain occupied otherwise.
|
||||
- Commit messages should follow the recent project history style: use a type prefix such as `feat:` or `fix:` and describe the actual gameplay/UI/system change in Korean with enough detail to understand the scope from the log alone.
|
||||
- All code comments and documentation should be in Korean
|
||||
- Use `[Min()]` attribute for numeric minimums in Inspector
|
||||
- Use `[TextArea]` for multi-line string fields
|
||||
|
||||
@@ -178,11 +178,13 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: Host IP (127.0.0.1)
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontAsset: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_sharedMaterial: {fileID: 782602759}
|
||||
m_fontSharedMaterials:
|
||||
- {fileID: 782602759}
|
||||
m_fontMaterial: {fileID: 782602759}
|
||||
m_fontMaterials:
|
||||
- {fileID: 782602759}
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4286611584
|
||||
@@ -298,7 +300,7 @@ MonoBehaviour:
|
||||
ConnectionData:
|
||||
Address: 127.0.0.1
|
||||
Port: 7777
|
||||
ServerListenAddress:
|
||||
ServerListenAddress: 127.0.0.1
|
||||
ClientBindPort: 0
|
||||
DebugSimulator:
|
||||
PacketDelayMS: 0
|
||||
@@ -609,8 +611,8 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: Host
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontAsset: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_sharedMaterial: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
@@ -1148,8 +1150,8 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: Waiting Room
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 328598426}
|
||||
m_fontAsset: {fileID: 11400000, guid: 7e0884bf8d117154792024b547287f9d, type: 2}
|
||||
m_sharedMaterial: {fileID: -8395004629330540845, guid: 7e0884bf8d117154792024b547287f9d, type: 2}
|
||||
m_fontSharedMaterials:
|
||||
- {fileID: 328598426}
|
||||
m_fontMaterial: {fileID: 328598426}
|
||||
@@ -1185,7 +1187,7 @@ MonoBehaviour:
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_characterSpacing: 4
|
||||
m_characterHorizontalScale: 1
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
@@ -1287,11 +1289,13 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: Port (7777)
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontAsset: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_sharedMaterial: {fileID: 797016364}
|
||||
m_fontSharedMaterials:
|
||||
- {fileID: 797016364}
|
||||
m_fontMaterial: {fileID: 797016364}
|
||||
m_fontMaterials:
|
||||
- {fileID: 797016364}
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4286611584
|
||||
@@ -1486,6 +1490,207 @@ MonoBehaviour:
|
||||
m_OnClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!21 &782602759
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: MaruBuri - Regular Material (Instance)
|
||||
m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: -6190233401105062148, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _ColorMask: 15
|
||||
- _CullMode: 0
|
||||
- _FaceDilate: 0
|
||||
- _GradientScale: 10
|
||||
- _MaskSoftnessX: 0
|
||||
- _MaskSoftnessY: 0
|
||||
- _OutlineSoftness: 0
|
||||
- _OutlineWidth: 0
|
||||
- _PerspectiveFilter: 0.875
|
||||
- _ScaleRatioA: 0.9
|
||||
- _ScaleRatioB: 1
|
||||
- _ScaleRatioC: 0.73125
|
||||
- _ScaleX: 1
|
||||
- _ScaleY: 1
|
||||
- _ShaderFlags: 0
|
||||
- _Sharpness: 0
|
||||
- _Stencil: 0
|
||||
- _StencilComp: 8
|
||||
- _StencilOp: 0
|
||||
- _StencilReadMask: 255
|
||||
- _StencilWriteMask: 255
|
||||
- _TextureHeight: 1024
|
||||
- _TextureWidth: 1024
|
||||
- _UnderlayDilate: 0
|
||||
- _UnderlayOffsetX: 0
|
||||
- _UnderlayOffsetY: 0
|
||||
- _UnderlaySoftness: 0
|
||||
- _VertexOffsetX: 0
|
||||
- _VertexOffsetY: 0
|
||||
- _WeightBold: 0.75
|
||||
- _WeightNormal: 0
|
||||
m_Colors:
|
||||
- _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767}
|
||||
- _FaceColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _OutlineColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
--- !u!21 &797016364
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: MaruBuri - Regular Material (Instance)
|
||||
m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: -6190233401105062148, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _ColorMask: 15
|
||||
- _CullMode: 0
|
||||
- _FaceDilate: 0
|
||||
- _GradientScale: 10
|
||||
- _MaskSoftnessX: 0
|
||||
- _MaskSoftnessY: 0
|
||||
- _OutlineSoftness: 0
|
||||
- _OutlineWidth: 0
|
||||
- _PerspectiveFilter: 0.875
|
||||
- _ScaleRatioA: 0.9
|
||||
- _ScaleRatioB: 1
|
||||
- _ScaleRatioC: 0.73125
|
||||
- _ScaleX: 1
|
||||
- _ScaleY: 1
|
||||
- _ShaderFlags: 0
|
||||
- _Sharpness: 0
|
||||
- _Stencil: 0
|
||||
- _StencilComp: 8
|
||||
- _StencilOp: 0
|
||||
- _StencilReadMask: 255
|
||||
- _StencilWriteMask: 255
|
||||
- _TextureHeight: 1024
|
||||
- _TextureWidth: 1024
|
||||
- _UnderlayDilate: 0
|
||||
- _UnderlayOffsetX: 0
|
||||
- _UnderlayOffsetY: 0
|
||||
- _UnderlaySoftness: 0
|
||||
- _VertexOffsetX: 0
|
||||
- _VertexOffsetY: 0
|
||||
- _WeightBold: 0.75
|
||||
- _WeightNormal: 0
|
||||
m_Colors:
|
||||
- _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767}
|
||||
- _FaceColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _OutlineColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
--- !u!21 &904460488
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: MaruBuri - Regular Material (Instance)
|
||||
m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: -6190233401105062148, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _ColorMask: 15
|
||||
- _CullMode: 0
|
||||
- _FaceDilate: 0
|
||||
- _GradientScale: 10
|
||||
- _MaskSoftnessX: 0
|
||||
- _MaskSoftnessY: 0
|
||||
- _OutlineSoftness: 0
|
||||
- _OutlineWidth: 0
|
||||
- _PerspectiveFilter: 0.875
|
||||
- _ScaleRatioA: 0.9
|
||||
- _ScaleRatioB: 1
|
||||
- _ScaleRatioC: 0.73125
|
||||
- _ScaleX: 1
|
||||
- _ScaleY: 1
|
||||
- _ShaderFlags: 0
|
||||
- _Sharpness: 0
|
||||
- _Stencil: 0
|
||||
- _StencilComp: 8
|
||||
- _StencilOp: 0
|
||||
- _StencilReadMask: 255
|
||||
- _StencilWriteMask: 255
|
||||
- _TextureHeight: 1024
|
||||
- _TextureWidth: 1024
|
||||
- _UnderlayDilate: 0
|
||||
- _UnderlayOffsetX: 0
|
||||
- _UnderlayOffsetY: 0
|
||||
- _UnderlaySoftness: 0
|
||||
- _VertexOffsetX: 0
|
||||
- _VertexOffsetY: 0
|
||||
- _WeightBold: 0.75
|
||||
- _WeightNormal: 0
|
||||
m_Colors:
|
||||
- _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767}
|
||||
- _FaceColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _OutlineColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
--- !u!1 &1106669273
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -2028,11 +2233,13 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: Colosseum Lobby
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontAsset: {fileID: 11400000, guid: 7e0884bf8d117154792024b547287f9d, type: 2}
|
||||
m_sharedMaterial: {fileID: 1977247534}
|
||||
m_fontSharedMaterials:
|
||||
- {fileID: 1977247534}
|
||||
m_fontMaterial: {fileID: 1977247534}
|
||||
m_fontMaterials:
|
||||
- {fileID: 1977247534}
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
@@ -2063,7 +2270,7 @@ MonoBehaviour:
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_characterSpacing: 4
|
||||
m_characterHorizontalScale: 1
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
@@ -2173,8 +2380,8 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text:
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontAsset: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_sharedMaterial: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
@@ -2302,8 +2509,8 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: "\u200B"
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontAsset: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_sharedMaterial: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
@@ -2439,11 +2646,13 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: "\u200B"
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontAsset: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_sharedMaterial: {fileID: 904460488}
|
||||
m_fontSharedMaterials:
|
||||
- {fileID: 904460488}
|
||||
m_fontMaterial: {fileID: 904460488}
|
||||
m_fontMaterials:
|
||||
- {fileID: 904460488}
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
@@ -2576,8 +2785,8 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: Ready
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontAsset: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_sharedMaterial: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
@@ -2713,8 +2922,8 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: Join
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontAsset: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_sharedMaterial: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
@@ -3028,8 +3237,8 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: Leave
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontAsset: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_sharedMaterial: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
@@ -3213,6 +3422,73 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1890856429}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!21 &1977247534
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Suseong Batang - Regular Material (Instance)
|
||||
m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: -4826028298590070284, guid: 7e0884bf8d117154792024b547287f9d, type: 2}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _ColorMask: 15
|
||||
- _CullMode: 0
|
||||
- _FaceDilate: 0
|
||||
- _GradientScale: 10
|
||||
- _MaskSoftnessX: 0
|
||||
- _MaskSoftnessY: 0
|
||||
- _OutlineSoftness: 0
|
||||
- _OutlineWidth: 0
|
||||
- _PerspectiveFilter: 0.875
|
||||
- _ScaleRatioA: 0.9
|
||||
- _ScaleRatioB: 1
|
||||
- _ScaleRatioC: 0.73125
|
||||
- _ScaleX: 1
|
||||
- _ScaleY: 1
|
||||
- _ShaderFlags: 0
|
||||
- _Sharpness: 0
|
||||
- _Stencil: 0
|
||||
- _StencilComp: 8
|
||||
- _StencilOp: 0
|
||||
- _StencilReadMask: 255
|
||||
- _StencilWriteMask: 255
|
||||
- _TextureHeight: 1024
|
||||
- _TextureWidth: 1024
|
||||
- _UnderlayDilate: 0
|
||||
- _UnderlayOffsetX: 0
|
||||
- _UnderlayOffsetY: 0
|
||||
- _UnderlaySoftness: 0
|
||||
- _VertexOffsetX: 0
|
||||
- _VertexOffsetY: 0
|
||||
- _WeightBold: 0.75
|
||||
- _WeightNormal: 0
|
||||
m_Colors:
|
||||
- _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767}
|
||||
- _FaceColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _OutlineColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
--- !u!1 &2038582761
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -3344,8 +3620,8 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: Start Game
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontAsset: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_sharedMaterial: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,25 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b08cc671f858a3b409170a5356e960a0, type: 3}
|
||||
m_Name: "Data_Abnormality_Player_\uC9D1\uD589\uC790\uC758\uB099\uC778"
|
||||
m_EditorClassIdentifier: Colosseum.Game::Colosseum.Abnormalities.AbnormalityData
|
||||
abnormalityName: "\uC9D1\uD589\uC790\uC758 \uB099\uC778"
|
||||
icon: {fileID: 0}
|
||||
duration: 0
|
||||
level: 1
|
||||
isDebuff: 1
|
||||
statModifiers: []
|
||||
periodicInterval: 0
|
||||
periodicValue: 0
|
||||
controlType: 0
|
||||
slowMultiplier: 0.5
|
||||
incomingDamageMultiplier: 1.1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bc74f1485ad140c28cc14b821e22c127
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
23
Assets/_Game/Data/Patterns/Data_Pattern_Drog_집행개시.asset
Normal file
23
Assets/_Game/Data/Patterns/Data_Pattern_Drog_집행개시.asset
Normal file
@@ -0,0 +1,23 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0ce956e0878565343974c31b8111c0c6, type: 3}
|
||||
m_Name: "Data_Pattern_Drog_\uC9D1\uD589\uAC1C\uC2DC"
|
||||
m_EditorClassIdentifier: Colosseum.Game::Colosseum.AI.BossPatternData
|
||||
patternName: "\uC9D1\uD589\uAC1C\uC2DC"
|
||||
steps:
|
||||
- Type: 0
|
||||
Skill: {fileID: 11400000, guid: 99de24df2cb0464d9d4f633efde8dbdb, type: 2}
|
||||
Duration: 0
|
||||
- Type: 1
|
||||
Skill: {fileID: 0}
|
||||
Duration: 6.5
|
||||
cooldown: 45
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5e732b41722c45288bb6234f3e3fa638
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
29
Assets/_Game/Data/Skills/Data_Skill_Drog_집행개시.asset
Normal file
29
Assets/_Game/Data/Skills/Data_Skill_Drog_집행개시.asset
Normal file
@@ -0,0 +1,29 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 94f0a76cebcac2f4fb5daf1b675fd79f, type: 3}
|
||||
m_Name: "Data_Skill_Drog_\uC9D1\uD589\uAC1C\uC2DC"
|
||||
m_EditorClassIdentifier: Colosseum.Game::Colosseum.Skills.SkillData
|
||||
skillName: "\uC9D1\uD589\uAC1C\uC2DC"
|
||||
description: "\uB4DC\uB85C\uADF8\uAC00 \uD798\uC744 \uB04C\uC5B4\uBAA8\uC73C\uBA70 \uC9D1\uD589\uC744 \uC900\uBE44\uD569\uB2C8\uB2E4."
|
||||
icon: {fileID: 0}
|
||||
skillClip: {fileID: -5764696784021583549, guid: 5eaeca917bbeb494eb14ad0e0552c42f, type: 3}
|
||||
endClip: {fileID: 0}
|
||||
animationSpeed: 1
|
||||
useRootMotion: 0
|
||||
ignoreRootMotionY: 0
|
||||
jumpToTarget: 0
|
||||
blockMovementWhileCasting: 1
|
||||
blockJumpWhileCasting: 1
|
||||
blockOtherSkillsWhileCasting: 1
|
||||
cooldown: 0
|
||||
manaCost: 0
|
||||
effects: []
|
||||
8
Assets/_Game/Data/Skills/Data_Skill_Drog_집행개시.asset.meta
Normal file
8
Assets/_Game/Data/Skills/Data_Skill_Drog_집행개시.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 99de24df2cb0464d9d4f633efde8dbdb
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/_Game/Fonts.meta
Normal file
8
Assets/_Game/Fonts.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: abd35c080e8e3164897384131636d30f
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/_Game/Fonts/MaruBuri-Regular.ttf
Normal file
BIN
Assets/_Game/Fonts/MaruBuri-Regular.ttf
Normal file
Binary file not shown.
21
Assets/_Game/Fonts/MaruBuri-Regular.ttf.meta
Normal file
21
Assets/_Game/Fonts/MaruBuri-Regular.ttf.meta
Normal file
@@ -0,0 +1,21 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c8ef714edc9c1ca49b7c466860417030
|
||||
TrueTypeFontImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
fontSize: 16
|
||||
forceTextureCase: -2
|
||||
characterSpacing: 0
|
||||
characterPadding: 1
|
||||
includeFontData: 1
|
||||
fontNames:
|
||||
- MaruBuri
|
||||
fallbackFontReferences: []
|
||||
customCharacters:
|
||||
fontRenderingMode: 0
|
||||
ascentCalculationMode: 1
|
||||
useLegacyBoundsCalculation: 0
|
||||
shouldRoundAdvanceValue: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/_Game/Fonts/NEXON Lv2 Gothic.ttf
Normal file
BIN
Assets/_Game/Fonts/NEXON Lv2 Gothic.ttf
Normal file
Binary file not shown.
21
Assets/_Game/Fonts/NEXON Lv2 Gothic.ttf.meta
Normal file
21
Assets/_Game/Fonts/NEXON Lv2 Gothic.ttf.meta
Normal file
@@ -0,0 +1,21 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 92b87ffcb3e77ee4e960086335ac337a
|
||||
TrueTypeFontImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
fontSize: 16
|
||||
forceTextureCase: -2
|
||||
characterSpacing: 0
|
||||
characterPadding: 1
|
||||
includeFontData: 1
|
||||
fontNames:
|
||||
- NEXON Lv2 Gothic
|
||||
fallbackFontReferences: []
|
||||
customCharacters:
|
||||
fontRenderingMode: 0
|
||||
ascentCalculationMode: 1
|
||||
useLegacyBoundsCalculation: 0
|
||||
shouldRoundAdvanceValue: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/_Game/Fonts/SuseongBatang.ttf
Normal file
BIN
Assets/_Game/Fonts/SuseongBatang.ttf
Normal file
Binary file not shown.
21
Assets/_Game/Fonts/SuseongBatang.ttf.meta
Normal file
21
Assets/_Game/Fonts/SuseongBatang.ttf.meta
Normal file
@@ -0,0 +1,21 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b2ea135d82c7dc842bb41c7434349179
|
||||
TrueTypeFontImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
fontSize: 16
|
||||
forceTextureCase: -2
|
||||
characterSpacing: 0
|
||||
characterPadding: 1
|
||||
includeFontData: 1
|
||||
fontNames:
|
||||
- Suseong Batang
|
||||
fallbackFontReferences: []
|
||||
customCharacters:
|
||||
fontRenderingMode: 0
|
||||
ascentCalculationMode: 1
|
||||
useLegacyBoundsCalculation: 0
|
||||
shouldRoundAdvanceValue: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/_Game/Fonts/TMP.meta
Normal file
8
Assets/_Game/Fonts/TMP.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cc5c1382ed1ed0b42b5c601f747a40af
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
24662
Assets/_Game/Fonts/TMP/TMP_MaruBuri.asset
Normal file
24662
Assets/_Game/Fonts/TMP/TMP_MaruBuri.asset
Normal file
File diff suppressed because one or more lines are too long
8
Assets/_Game/Fonts/TMP/TMP_MaruBuri.asset.meta
Normal file
8
Assets/_Game/Fonts/TMP/TMP_MaruBuri.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ef44cbe516f6f9f418375e5b2b73ad8d
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
25547
Assets/_Game/Fonts/TMP/TMP_SuseongBatang.asset
Normal file
25547
Assets/_Game/Fonts/TMP/TMP_SuseongBatang.asset
Normal file
File diff suppressed because one or more lines are too long
8
Assets/_Game/Fonts/TMP/TMP_SuseongBatang.asset.meta
Normal file
8
Assets/_Game/Fonts/TMP/TMP_SuseongBatang.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7e0884bf8d117154792024b547287f9d
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -2190,6 +2190,7 @@ MonoBehaviour:
|
||||
slamPattern: {fileID: 11400000, guid: 4a52d59d590b4eaa9ef92b7984eb08c7, type: 2}
|
||||
leapPattern: {fileID: 11400000, guid: 88e6cc7cab28baf4c8f8a742247000ec, type: 2}
|
||||
downPunishPattern: {fileID: 11400000, guid: fe5100f855d14c0faac44b6d4f2c771e, type: 2}
|
||||
signaturePattern: {fileID: 11400000, guid: 5e732b41722c45288bb6234f3e3fa638, type: 2}
|
||||
phase2HealthThreshold: 0.75
|
||||
phase3HealthThreshold: 0.4
|
||||
targetRefreshInterval: 0.2
|
||||
@@ -2198,6 +2199,16 @@ MonoBehaviour:
|
||||
phase1SlamInterval: 3
|
||||
phase2SlamInterval: 2
|
||||
phase3SlamInterval: 2
|
||||
signatureMinPhase: 2
|
||||
signatureRequiredDamageRatio: 0.1
|
||||
signatureSuccessStaggerDuration: 2
|
||||
signatureFailureAbnormality: {fileID: 11400000, guid: bc74f1485ad140c28cc14b821e22c127, type: 2}
|
||||
signatureFailureDamage: 40
|
||||
signatureFailureKnockbackRadius: 8
|
||||
signatureFailureDownRadius: 3
|
||||
signatureFailureKnockbackSpeed: 12
|
||||
signatureFailureKnockbackDuration: 0.35
|
||||
signatureFailureDownDuration: 2
|
||||
disableBehaviorGraph: 0
|
||||
debugMode: 1
|
||||
--- !u!114 &7544406269366897481
|
||||
|
||||
@@ -474,10 +474,22 @@ PrefabInstance:
|
||||
propertyPath: m_margin.z
|
||||
value: -4.115387
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1316615260321933421, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_fontAsset
|
||||
value:
|
||||
objectReference: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 1316615260321933421, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_fontSizeBase
|
||||
value: 16
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1316615260321933421, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 1316615260321933421, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_characterSpacing
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1316615260321933421, guid: 76cc919941c27814fa50c37e4df08f89, type: 3}
|
||||
propertyPath: m_VerticalAlignment
|
||||
value: 256
|
||||
|
||||
1160
Assets/_Game/Prefabs/UI/UI_ActionBar.prefab
Normal file
1160
Assets/_Game/Prefabs/UI/UI_ActionBar.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/_Game/Prefabs/UI/UI_ActionBar.prefab.meta
Normal file
7
Assets/_Game/Prefabs/UI/UI_ActionBar.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 49cc51b51d25b2e4f85ceec039fb545c
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
1396
Assets/_Game/Prefabs/UI/UI_ActionBar_EvadeItem.prefab
Normal file
1396
Assets/_Game/Prefabs/UI/UI_ActionBar_EvadeItem.prefab
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 57e5d30f9d5f9724eba1a18f03be3889
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -88,81 +88,6 @@ MonoBehaviour:
|
||||
rawImage: {fileID: 8524252734736764718}
|
||||
speed: {x: -0.1, y: 0}
|
||||
size: {x: 256, y: 64}
|
||||
--- !u!1 &887616750182392209
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 9180799155483852847}
|
||||
- component: {fileID: 2815095170849506622}
|
||||
- component: {fileID: 3077997186489176163}
|
||||
m_Layer: 5
|
||||
m_Name: SPR_Greeble_Demon
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &9180799155483852847
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 887616750182392209}
|
||||
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: 7303605616070184167}
|
||||
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: 39.1}
|
||||
m_SizeDelta: {x: 180, y: 90}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2815095170849506622
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 887616750182392209}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &3077997186489176163
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 887616750182392209}
|
||||
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: 0
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: 238e31403ddb5f04c92a6a6edcda17f5, 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 &1833205063244138202
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -172,7 +97,7 @@ GameObject:
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1384280946776679044}
|
||||
- component: {fileID: 7123456789012345678}
|
||||
- component: {fileID: 2655491180900726042}
|
||||
m_Layer: 5
|
||||
m_Name: UI_BossHealthBar
|
||||
m_TagString: Untagged
|
||||
@@ -187,9 +112,9 @@ RectTransform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1833205063244138202}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.8, y: 0.8, z: 0.8}
|
||||
m_LocalScale: {x: 0.72, y: 0.72, z: 0.72}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 7303605616070184167}
|
||||
@@ -198,8 +123,26 @@ RectTransform:
|
||||
m_AnchorMin: {x: 0.5, y: 1}
|
||||
m_AnchorMax: {x: 0.5, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: -200}
|
||||
m_SizeDelta: {x: 1000, y: 40}
|
||||
m_SizeDelta: {x: 920, y: 36}
|
||||
m_Pivot: {x: 0.5, y: 1}
|
||||
--- !u!114 &2655491180900726042
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1833205063244138202}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 892f9842e85256b47b24e0aab016820b, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Colosseum.Game::Colosseum.UI.BossHealthBarUI
|
||||
healthSlider: {fileID: 1229044099469274636}
|
||||
healthText: {fileID: 6434164023740824016}
|
||||
bossNameText: {fileID: 7053117599274393893}
|
||||
targetBoss: {fileID: 0}
|
||||
hideOnDeath: 1
|
||||
lerpSpeed: 15
|
||||
--- !u!1 &5163086717113548400
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -378,7 +321,6 @@ RectTransform:
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 9180799155483852847}
|
||||
- {fileID: 5303515918785520477}
|
||||
- {fileID: 7061785310460012807}
|
||||
- {fileID: 822400900121516796}
|
||||
@@ -409,19 +351,35 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_fontSize
|
||||
value: 43.9
|
||||
value: 30
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_fontAsset
|
||||
value:
|
||||
objectReference: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_fontStyle
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_fontSizeMax
|
||||
value: 56
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_fontSizeBase
|
||||
value: 30
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: a3063f2d22ae4ba44828c3885272eaf2, type: 2}
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_characterSpacing
|
||||
value: -1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_enableAutoSizing
|
||||
value: 1
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_VerticalAlignment
|
||||
@@ -568,6 +526,17 @@ PrefabInstance:
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
--- !u!114 &6434164023740824016 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
m_PrefabInstance: {fileID: 4821873919640174508}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!224 &8872377597972643978 stripped
|
||||
RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 4164625289371221798, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
@@ -581,6 +550,102 @@ PrefabInstance:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 7303605616070184167}
|
||||
m_Modifications:
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_RootOrder
|
||||
value: 5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: -50
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 100
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: -20
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 43
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_text
|
||||
value: John the Impaler
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_fontSize
|
||||
value: 34
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_fontAsset
|
||||
value:
|
||||
objectReference: {fileID: 11400000, guid: 7e0884bf8d117154792024b547287f9d, type: 2}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_fontSizeMax
|
||||
value: 56
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_fontSizeBase
|
||||
value: 34
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: -8395004629330540845, guid: 7e0884bf8d117154792024b547287f9d, type: 2}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_characterSpacing
|
||||
value: 3
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_enableAutoSizing
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_HorizontalAlignment
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: 'm_ActiveFontFeatures.Array.data[0]'
|
||||
value: 1801810542
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4546473359128379108, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: Label_BossName
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 378538600947842191, guid: 289e34102b96a4515a667a4f636007c0, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: Label_BossName
|
||||
@@ -669,99 +734,22 @@ PrefabInstance:
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_RootOrder
|
||||
value: 5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: -50
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 100
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: -0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: -20
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 43
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_text
|
||||
value: John the Impaler
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_fontSize
|
||||
value: 56
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_fontSizeMax
|
||||
value: 56
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_fontSizeBase
|
||||
value: 56
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2100000, guid: a3063f2d22ae4ba44828c3885272eaf2, type: 2}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_enableAutoSizing
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_HorizontalAlignment
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: 'm_ActiveFontFeatures.Array.data[0]'
|
||||
value: 1801810542
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4546473359128379108, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: Label_BossName
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
--- !u!114 &7053117599274393893 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 3420556218193743673, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
m_PrefabInstance: {fileID: 5663827212940307996}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!224 &7543839057773374457 stripped
|
||||
RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 2749708641982727653, guid: 0ed0a70e5a4682c4c9e105178800133f, type: 3}
|
||||
@@ -963,6 +951,17 @@ PrefabInstance:
|
||||
insertIndex: -1
|
||||
addedObject: {fileID: 1310706873006053288}
|
||||
m_SourcePrefab: {fileID: 100100000, guid: f7b3a50e852da2c40b98f9d4cf10e289, type: 3}
|
||||
--- !u!114 &1229044099469274636 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 7156924125190553902, guid: f7b3a50e852da2c40b98f9d4cf10e289, type: 3}
|
||||
m_PrefabInstance: {fileID: 8240726994871906082}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3264878362326918023}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!1 &1416821347091459177 stripped
|
||||
GameObject:
|
||||
m_CorrespondingSourceObject: {fileID: 7058686565070685003, guid: f7b3a50e852da2c40b98f9d4cf10e289, type: 3}
|
||||
|
||||
@@ -142,8 +142,8 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: 10
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontAsset: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_sharedMaterial: {fileID: 0}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
@@ -335,8 +335,8 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: Game Over
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontAsset: {fileID: 11400000, guid: 7e0884bf8d117154792024b547287f9d, type: 2}
|
||||
m_sharedMaterial: {fileID: 0}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
@@ -370,7 +370,7 @@ MonoBehaviour:
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 256
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_characterSpacing: 5
|
||||
m_characterHorizontalScale: 1
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
|
||||
@@ -350,8 +350,8 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: Health Point
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: fcfcd7da3c44c554db6791d28dd79a59, type: 2}
|
||||
m_sharedMaterial: {fileID: -6627135030329028012, guid: fcfcd7da3c44c554db6791d28dd79a59, type: 2}
|
||||
m_fontAsset: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_sharedMaterial: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
@@ -375,17 +375,17 @@ MonoBehaviour:
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 32
|
||||
m_fontSizeBase: 32
|
||||
m_fontSize: 30
|
||||
m_fontSizeBase: 30
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_fontStyle: 1
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 1024
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_characterSpacing: -1
|
||||
m_characterHorizontalScale: 1
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
|
||||
@@ -420,8 +420,8 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: Mana Point
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: fcfcd7da3c44c554db6791d28dd79a59, type: 2}
|
||||
m_sharedMaterial: {fileID: -6627135030329028012, guid: fcfcd7da3c44c554db6791d28dd79a59, type: 2}
|
||||
m_fontAsset: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_sharedMaterial: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
@@ -445,17 +445,17 @@ MonoBehaviour:
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 32
|
||||
m_fontSizeBase: 32
|
||||
m_fontSize: 30
|
||||
m_fontSizeBase: 30
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_fontStyle: 1
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 1024
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_characterSpacing: -1
|
||||
m_characterHorizontalScale: 1
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
|
||||
2133
Assets/_Game/Prefabs/UI/UI_PlayerResources.prefab
Normal file
2133
Assets/_Game/Prefabs/UI/UI_PlayerResources.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/_Game/Prefabs/UI/UI_PlayerResources.prefab.meta
Normal file
7
Assets/_Game/Prefabs/UI/UI_PlayerResources.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6a6d1b384d7c82f49802f1650bb34b40
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -67,8 +67,8 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: Player
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontAsset: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
m_sharedMaterial: {fileID: 0}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
@@ -149,7 +149,7 @@ GameObject:
|
||||
- component: {fileID: 2619735212364195173}
|
||||
- component: {fileID: 5129437633899893877}
|
||||
m_Layer: 0
|
||||
m_Name: PlayerSlot
|
||||
m_Name: UI_PlayerSlot
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
|
||||
@@ -17,7 +17,7 @@ GameObject:
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
m_IsActive: 0
|
||||
--- !u!224 &7251707132790510
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -279,7 +279,7 @@ RectTransform:
|
||||
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: 1000, y: 160}
|
||||
m_SizeDelta: {x: 700, y: 140}
|
||||
m_Pivot: {x: 0.5, y: 0}
|
||||
--- !u!114 &5745543168284002773
|
||||
MonoBehaviour:
|
||||
@@ -313,7 +313,7 @@ GameObject:
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
m_IsActive: 0
|
||||
--- !u!224 &638920959796156018
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -407,8 +407,8 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 60}
|
||||
m_SizeDelta: {x: 0, y: 40}
|
||||
m_AnchoredPosition: {x: 0, y: 82}
|
||||
m_SizeDelta: {x: -80, y: 40}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &4521187534841194808
|
||||
MonoBehaviour:
|
||||
@@ -424,7 +424,7 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier: Colosseum.Game::Colosseum.UI.StatBar
|
||||
slider: {fileID: 6171176470312880999}
|
||||
fillImage: {fileID: 4865039855673322941}
|
||||
valueText: {fileID: 7606115145092636445}
|
||||
valueText: {fileID: 4278009329655597422}
|
||||
fullColor: {r: 1, g: 0, b: 0, a: 1}
|
||||
lowColor: {r: 1, g: 0, b: 0, a: 1}
|
||||
lowThreshold: 0.3
|
||||
@@ -448,7 +448,7 @@ GameObject:
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
m_IsActive: 0
|
||||
--- !u!224 &4250423574011084299
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -547,7 +547,7 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 1325, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0, y: 0.5}
|
||||
--- !u!114 &7673766168690170142
|
||||
@@ -609,6 +609,8 @@ MonoBehaviour:
|
||||
- {fileID: 1423210892419994845}
|
||||
- {fileID: 7830658735294947559}
|
||||
- {fileID: 6568354020171798426}
|
||||
debugMode: 1
|
||||
slotMappings: 000000000100000002000000030000000400000005000000
|
||||
keyLabels:
|
||||
- L
|
||||
- R
|
||||
@@ -816,8 +818,8 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 20}
|
||||
m_SizeDelta: {x: 0, y: 40}
|
||||
m_AnchoredPosition: {x: 0, y: 30}
|
||||
m_SizeDelta: {x: -80, y: 40}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &4622408951537218836
|
||||
MonoBehaviour:
|
||||
@@ -972,6 +974,22 @@ PrefabInstance:
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7980170689800973879, guid: 10b369200a4505640bea81594ae56cb8, type: 3}
|
||||
propertyPath: m_fontAsset
|
||||
value:
|
||||
objectReference: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 7980170689800973879, guid: 10b369200a4505640bea81594ae56cb8, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 7980170689800973879, guid: 10b369200a4505640bea81594ae56cb8, type: 3}
|
||||
propertyPath: m_characterSpacing
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7980170689800973879, guid: 10b369200a4505640bea81594ae56cb8, type: 3}
|
||||
propertyPath: 'm_ActiveFontFeatures.Array.data[0]'
|
||||
value: 1801810542
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7997306272064920525, guid: 10b369200a4505640bea81594ae56cb8, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0
|
||||
@@ -1108,17 +1126,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!114 &7606115145092636445 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 7980170689800973879, guid: 10b369200a4505640bea81594ae56cb8, type: 3}
|
||||
m_PrefabInstance: {fileID: 518225783641420074}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!1001 &1397865734090967693
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1131,10 +1138,18 @@ PrefabInstance:
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 764508204657515611, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 1078964336793701480, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: ActionBar_Item (4)
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4888074778808592692, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5866635796840437353, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@@ -1159,6 +1174,10 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6477301859233746099, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 7007681242674040492, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
@@ -1546,6 +1565,18 @@ PrefabInstance:
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7980170689800973879, guid: 10b369200a4505640bea81594ae56cb8, type: 3}
|
||||
propertyPath: m_fontAsset
|
||||
value:
|
||||
objectReference: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 7980170689800973879, guid: 10b369200a4505640bea81594ae56cb8, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 7980170689800973879, guid: 10b369200a4505640bea81594ae56cb8, type: 3}
|
||||
propertyPath: m_characterSpacing
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7997306272064920525, guid: 10b369200a4505640bea81594ae56cb8, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0
|
||||
@@ -1705,7 +1736,7 @@ PrefabInstance:
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_fontAsset
|
||||
value:
|
||||
objectReference: {fileID: 11400000, guid: fcfcd7da3c44c554db6791d28dd79a59, type: 2}
|
||||
objectReference: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_fontSizeBase
|
||||
value: 42
|
||||
@@ -1713,10 +1744,10 @@ PrefabInstance:
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: -6627135030329028012, guid: fcfcd7da3c44c554db6791d28dd79a59, type: 2}
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_characterSpacing
|
||||
value: 2
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_VerticalAlignment
|
||||
@@ -1872,6 +1903,17 @@ RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 4164625289371221798, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
m_PrefabInstance: {fileID: 2377487249451896594}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!114 &4278009329655597422 stripped
|
||||
MonoBehaviour:
|
||||
m_CorrespondingSourceObject: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
m_PrefabInstance: {fileID: 2377487249451896594}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!1001 &2660882964466318832
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1884,10 +1926,18 @@ PrefabInstance:
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 764508204657515611, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 1078964336793701480, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: ActionBar_Item (5)
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4888074778808592692, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5866635796840437353, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@@ -1912,6 +1962,10 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6477301859233746099, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 7007681242674040492, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
@@ -2025,10 +2079,18 @@ PrefabInstance:
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 764508204657515611, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 1078964336793701480, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: ActionBar_Item (2)
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4888074778808592692, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5866635796840437353, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@@ -2053,6 +2115,10 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6477301859233746099, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 7007681242674040492, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
@@ -2177,7 +2243,7 @@ PrefabInstance:
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_fontAsset
|
||||
value:
|
||||
objectReference: {fileID: 11400000, guid: fcfcd7da3c44c554db6791d28dd79a59, type: 2}
|
||||
objectReference: {fileID: 11400000, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_fontSizeBase
|
||||
value: 42
|
||||
@@ -2185,10 +2251,10 @@ PrefabInstance:
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: -6627135030329028012, guid: fcfcd7da3c44c554db6791d28dd79a59, type: 2}
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_characterSpacing
|
||||
value: 2
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
|
||||
propertyPath: m_VerticalAlignment
|
||||
@@ -2367,10 +2433,18 @@ PrefabInstance:
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 764508204657515611, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 1078964336793701480, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: ActionBar_Item (1)
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4888074778808592692, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5866635796840437353, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@@ -2395,6 +2469,10 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6477301859233746099, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 7007681242674040492, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
@@ -2508,10 +2586,18 @@ PrefabInstance:
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 764508204657515611, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 1078964336793701480, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: ActionBar_Item
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4888074778808592692, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5866635796840437353, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@@ -2536,6 +2622,10 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6477301859233746099, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 7007681242674040492, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
@@ -2649,10 +2739,18 @@ PrefabInstance:
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 764508204657515611, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 1078964336793701480, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: ActionBar_Item (3)
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4888074778808592692, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5866635796840437353, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@@ -2677,6 +2775,10 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6477301859233746099, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_sharedMaterial
|
||||
value:
|
||||
objectReference: {fileID: 2399985188671511309, guid: ef44cbe516f6f9f418375e5b2b73ad8d, type: 2}
|
||||
- target: {fileID: 7007681242674040492, guid: 553b74bdb60f6af47b5d2c8928a2af07, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0.5
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
using System;
|
||||
|
||||
using Colosseum.Enemy;
|
||||
|
||||
using Unity.Behavior;
|
||||
using Unity.Properties;
|
||||
|
||||
using Action = Unity.Behavior.Action;
|
||||
|
||||
/// <summary>
|
||||
/// 시그니처 패턴 사용 가능 여부를 확인하는 체크 액션입니다.
|
||||
/// </summary>
|
||||
[Serializable, GeneratePropertyBag]
|
||||
[NodeDescription(
|
||||
name: "Check Signature Pattern Ready",
|
||||
story: "시그니처 패턴 준비 여부 확인",
|
||||
category: "Action",
|
||||
id: "b3b2916257134e0eb3a71a5f544a8d6f")]
|
||||
public partial class CheckSignaturePatternReadyAction : Action
|
||||
{
|
||||
protected override Status OnStart()
|
||||
{
|
||||
BossCombatBehaviorContext context = GameObject.GetComponent<BossCombatBehaviorContext>();
|
||||
return context != null && context.IsSignaturePatternReady()
|
||||
? Status.Success
|
||||
: Status.Failure;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b27f3137292d5704d802b5cfb58037e4
|
||||
@@ -0,0 +1,54 @@
|
||||
using System;
|
||||
|
||||
using Colosseum.Enemy;
|
||||
|
||||
using Unity.Behavior;
|
||||
using Unity.Properties;
|
||||
using UnityEngine;
|
||||
|
||||
using Action = Unity.Behavior.Action;
|
||||
|
||||
/// <summary>
|
||||
/// 보스 공통 시그니처 패턴을 실행하는 액션입니다.
|
||||
/// </summary>
|
||||
[Serializable, GeneratePropertyBag]
|
||||
[NodeDescription(
|
||||
name: "Use Signature Pattern",
|
||||
story: "시그니처 패턴 실행",
|
||||
category: "Action",
|
||||
id: "178f8888d56042c6a75b4d6ee8a7a7d4")]
|
||||
public partial class UseSignaturePatternAction : Action
|
||||
{
|
||||
[SerializeReference]
|
||||
public BlackboardVariable<GameObject> Target;
|
||||
|
||||
private BossCombatBehaviorContext combatBehaviorContext;
|
||||
private bool started;
|
||||
|
||||
protected override Status OnStart()
|
||||
{
|
||||
combatBehaviorContext = GameObject.GetComponent<BossCombatBehaviorContext>();
|
||||
if (combatBehaviorContext == null)
|
||||
return Status.Failure;
|
||||
|
||||
GameObject target = Target != null ? Target.Value : null;
|
||||
started = combatBehaviorContext.TryStartSignaturePattern(target);
|
||||
return started ? Status.Running : Status.Failure;
|
||||
}
|
||||
|
||||
protected override Status OnUpdate()
|
||||
{
|
||||
if (!started || combatBehaviorContext == null)
|
||||
return Status.Failure;
|
||||
|
||||
return combatBehaviorContext.IsSignaturePatternActive
|
||||
? Status.Running
|
||||
: Status.Success;
|
||||
}
|
||||
|
||||
protected override void OnEnd()
|
||||
{
|
||||
started = false;
|
||||
combatBehaviorContext = null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0680aed4d244d7844918883e06e718d5
|
||||
@@ -84,6 +84,11 @@ namespace Colosseum.Abnormalities
|
||||
[Range(0f, 1f)]
|
||||
public float slowMultiplier = 0.5f;
|
||||
|
||||
[Header("피해 배율")]
|
||||
[Tooltip("이상 상태가 적용된 동안 받는 피해 배율 (1 = 기본, 1.1 = 10% 증가)")]
|
||||
[Min(0f)]
|
||||
public float incomingDamageMultiplier = 1f;
|
||||
|
||||
/// <summary>
|
||||
/// 영구 효과인지 확인
|
||||
/// </summary>
|
||||
@@ -98,5 +103,10 @@ namespace Colosseum.Abnormalities
|
||||
/// 제어 효과가 있는지 확인
|
||||
/// </summary>
|
||||
public bool HasControlEffect => controlType != ControlType.None;
|
||||
|
||||
/// <summary>
|
||||
/// 받는 피해 배율 변경 여부
|
||||
/// </summary>
|
||||
public bool HasIncomingDamageModifier => !Mathf.Approximately(incomingDamageMultiplier, 1f);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ namespace Colosseum.Abnormalities
|
||||
private int silenceCount;
|
||||
private int invincibleCount;
|
||||
private float slowMultiplier = 1f;
|
||||
private float incomingDamageMultiplier = 1f;
|
||||
|
||||
// 클라이언트 판정용 제어 효과 동기화 변수
|
||||
private NetworkVariable<int> syncedStunCount = new NetworkVariable<int>(0);
|
||||
@@ -62,6 +63,11 @@ namespace Colosseum.Abnormalities
|
||||
/// </summary>
|
||||
public float MoveSpeedMultiplier => GetCurrentSlowMultiplier();
|
||||
|
||||
/// <summary>
|
||||
/// 받는 피해 배율 (1.0 = 기본, 1.1 = 10% 증가)
|
||||
/// </summary>
|
||||
public float IncomingDamageMultiplier => incomingDamageMultiplier;
|
||||
|
||||
/// <summary>
|
||||
/// 행동 가능 여부 (기절이 아닐 때)
|
||||
/// </summary>
|
||||
@@ -238,6 +244,7 @@ namespace Colosseum.Abnormalities
|
||||
|
||||
ApplyStatModifiers(newAbnormality);
|
||||
ApplyControlEffect(data);
|
||||
RecalculateIncomingDamageMultiplier();
|
||||
SyncAbnormalityAdd(newAbnormality, source);
|
||||
|
||||
OnAbnormalityAdded?.Invoke(newAbnormality);
|
||||
@@ -282,6 +289,7 @@ namespace Colosseum.Abnormalities
|
||||
{
|
||||
RemoveStatModifiers(abnormality);
|
||||
RemoveControlEffect(abnormality.Data);
|
||||
RecalculateIncomingDamageMultiplier();
|
||||
SyncAbnormalityRemove(abnormality);
|
||||
activeAbnormalities.Remove(abnormality);
|
||||
|
||||
@@ -488,6 +496,20 @@ namespace Colosseum.Abnormalities
|
||||
}
|
||||
}
|
||||
|
||||
private void RecalculateIncomingDamageMultiplier()
|
||||
{
|
||||
incomingDamageMultiplier = 1f;
|
||||
|
||||
for (int i = 0; i < activeAbnormalities.Count; i++)
|
||||
{
|
||||
AbnormalityData data = activeAbnormalities[i].Data;
|
||||
if (data == null || !data.HasIncomingDamageModifier)
|
||||
continue;
|
||||
|
||||
incomingDamageMultiplier *= Mathf.Max(0f, data.incomingDamageMultiplier);
|
||||
}
|
||||
}
|
||||
|
||||
private int GetCurrentStunCount() => IsServer ? stunCount : syncedStunCount.Value;
|
||||
|
||||
private int GetCurrentSilenceCount() => IsServer ? silenceCount : syncedSilenceCount.Value;
|
||||
|
||||
@@ -64,12 +64,12 @@ namespace Colosseum.Editor
|
||||
vLayout.childForceExpandHeight = false;
|
||||
connectPanel.AddComponent<ContentSizeFitter>();
|
||||
|
||||
CreateLabel(connectPanel.transform, "TitleLabel", "Colosseum Lobby", 36);
|
||||
CreateLabel(connectPanel.transform, "TitleLabel", "Colosseum Lobby", 36, UIFontRole.Emphasis);
|
||||
var ipInput = CreateInputField(connectPanel.transform, "IpInput", "Host IP (127.0.0.1)", 300, 50);
|
||||
var portInput = CreateInputField(connectPanel.transform, "PortInput", "Port (7777)", 300, 50);
|
||||
var hostBtn = CreateButton(connectPanel.transform, "HostButton", "Host", 200, 50);
|
||||
var joinBtn = CreateButton(connectPanel.transform, "JoinButton", "Join", 200, 50);
|
||||
var statusText = CreateLabel(connectPanel.transform, "StatusText", "", 18);
|
||||
var statusText = CreateLabel(connectPanel.transform, "StatusText", "", 18, UIFontRole.Body);
|
||||
statusText.color = Color.yellow;
|
||||
|
||||
// ── LobbyPanel ────────────────────────────────────────
|
||||
@@ -87,7 +87,7 @@ namespace Colosseum.Editor
|
||||
vLayout2.childForceExpandWidth = false;
|
||||
vLayout2.childForceExpandHeight = false;
|
||||
|
||||
CreateLabel(lobbyPanel.transform, "LobbyTitle", "Waiting Room", 32);
|
||||
CreateLabel(lobbyPanel.transform, "LobbyTitle", "Waiting Room", 32, UIFontRole.Emphasis);
|
||||
|
||||
// PlayerList: ScrollView 역할을 하는 VerticalLayout 컨테이너
|
||||
var playerListGO = new GameObject("PlayerList");
|
||||
@@ -123,9 +123,10 @@ namespace Colosseum.Editor
|
||||
slotTmp.text = "Player";
|
||||
slotTmp.fontSize = 20;
|
||||
slotTmp.alignment = TextAlignmentOptions.MidlineLeft;
|
||||
UIFontSetupTool.ApplyRole(slotTmp, UIFontRole.Body);
|
||||
|
||||
System.IO.Directory.CreateDirectory(Application.dataPath + "/_Game/Prefabs/UI");
|
||||
var slotPrefab = PrefabUtility.SaveAsPrefabAsset(slotGO, "Assets/_Game/Prefabs/UI/PlayerSlot.prefab");
|
||||
var slotPrefab = PrefabUtility.SaveAsPrefabAsset(slotGO, "Assets/_Game/Prefabs/UI/UI_PlayerSlot.prefab");
|
||||
Object.DestroyImmediate(slotGO);
|
||||
|
||||
// ── LobbyUI 연결 ──────────────────────────────────────
|
||||
@@ -297,6 +298,7 @@ namespace Colosseum.Editor
|
||||
phTmp.text = placeholder;
|
||||
phTmp.fontSize = 18;
|
||||
phTmp.color = new Color(0.5f, 0.5f, 0.5f);
|
||||
UIFontSetupTool.ApplyRole(phTmp, UIFontRole.Combat);
|
||||
|
||||
var txtGO = new GameObject("Text");
|
||||
txtGO.transform.SetParent(textArea.transform, false);
|
||||
@@ -307,6 +309,7 @@ namespace Colosseum.Editor
|
||||
var txt = txtGO.AddComponent<TextMeshProUGUI>();
|
||||
txt.fontSize = 18;
|
||||
txt.color = Color.white;
|
||||
UIFontSetupTool.ApplyRole(txt, UIFontRole.Combat);
|
||||
|
||||
input.textViewport = taRect;
|
||||
input.placeholder = phTmp;
|
||||
@@ -335,11 +338,12 @@ namespace Colosseum.Editor
|
||||
tmp.fontSize = 20;
|
||||
tmp.alignment = TextAlignmentOptions.Center;
|
||||
tmp.color = Color.white;
|
||||
UIFontSetupTool.ApplyRole(tmp, UIFontRole.Combat);
|
||||
|
||||
return go;
|
||||
}
|
||||
|
||||
private static TextMeshProUGUI CreateLabel(Transform parent, string name, string text, int size)
|
||||
private static TextMeshProUGUI CreateLabel(Transform parent, string name, string text, int size, UIFontRole role = UIFontRole.Body)
|
||||
{
|
||||
var go = new GameObject(name);
|
||||
go.transform.SetParent(parent, false);
|
||||
@@ -350,6 +354,7 @@ namespace Colosseum.Editor
|
||||
tmp.fontSize = size;
|
||||
tmp.alignment = TextAlignmentOptions.Center;
|
||||
tmp.color = Color.white;
|
||||
UIFontSetupTool.ApplyRole(tmp, role);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
@@ -67,6 +67,7 @@ namespace Colosseum.Editor
|
||||
object repeatNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.RepeaterModifier", true), new Vector2(420f, -470f));
|
||||
object selectorNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.SelectorComposite", true), new Vector2(420f, -280f));
|
||||
|
||||
object signatureSequence = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.SequenceComposite", true), new Vector2(-1020f, -40f));
|
||||
object downSequence = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.SequenceComposite", true), new Vector2(-620f, -40f));
|
||||
object leapSequence = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.SequenceComposite", true), new Vector2(-220f, -40f));
|
||||
object slamSequence = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.SequenceComposite", true), new Vector2(180f, -40f));
|
||||
@@ -74,6 +75,11 @@ namespace Colosseum.Editor
|
||||
object slamFallbackSequence = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.SequenceComposite", true), new Vector2(980f, -40f));
|
||||
object chaseSequence = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, runtimeAssembly.GetType("Unity.Behavior.SequenceComposite", true), new Vector2(1380f, -40f));
|
||||
|
||||
object signatureRefreshNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(RefreshPrimaryTargetAction), new Vector2(-1140f, 240f));
|
||||
object signatureHasTargetNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(ValidateTargetAction), new Vector2(-1020f, 240f));
|
||||
object signatureReadyNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(CheckSignaturePatternReadyAction), new Vector2(-900f, 240f));
|
||||
object signatureUseNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(UseSignaturePatternAction), new Vector2(-780f, 240f));
|
||||
|
||||
object downSelectNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(SelectNearestDownedTargetAction), new Vector2(-740f, 240f));
|
||||
object downReadyNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(CheckPunishPatternReadyAction), new Vector2(-620f, 240f));
|
||||
object downUseNode = CreateNode(graphAsset, createNodeMethod, getNodeInfoMethod, typeof(UsePunishPatternAction), new Vector2(-500f, 240f));
|
||||
@@ -107,8 +113,9 @@ namespace Colosseum.Editor
|
||||
|
||||
Connect(graphAsset, connectEdgeMethod, GetDefaultOutputPort(startNode), GetDefaultInputPort(repeatNode));
|
||||
Connect(graphAsset, connectEdgeMethod, GetDefaultOutputPort(repeatNode), GetDefaultInputPort(selectorNode));
|
||||
ConnectChildren(graphAsset, connectEdgeMethod, selectorNode, downSequence, leapSequence, slamSequence, mainSequence, slamFallbackSequence, chaseSequence);
|
||||
ConnectChildren(graphAsset, connectEdgeMethod, selectorNode, signatureSequence, downSequence, leapSequence, slamSequence, mainSequence, slamFallbackSequence, chaseSequence);
|
||||
|
||||
ConnectChildren(graphAsset, connectEdgeMethod, signatureSequence, signatureRefreshNode, signatureHasTargetNode, signatureReadyNode, signatureUseNode);
|
||||
ConnectChildren(graphAsset, connectEdgeMethod, downSequence, downSelectNode, downReadyNode, downUseNode);
|
||||
ConnectChildren(graphAsset, connectEdgeMethod, leapSequence, leapSelectNode, leapReadyNode, leapUseNode);
|
||||
ConnectChildren(graphAsset, connectEdgeMethod, slamSequence, slamRefreshNode, slamHasTargetNode, slamRangeNode, slamTurnNode, slamReadyNode, slamUseNode);
|
||||
@@ -116,6 +123,9 @@ namespace Colosseum.Editor
|
||||
ConnectChildren(graphAsset, connectEdgeMethod, slamFallbackSequence, fallbackRefreshNode, fallbackHasTargetNode, fallbackRangeNode, fallbackReadyNode, fallbackUseNode);
|
||||
ConnectChildren(graphAsset, connectEdgeMethod, chaseSequence, chaseRefreshNode, chaseHasTargetNode, chaseUseNode);
|
||||
|
||||
LinkTarget(signatureRefreshNode, targetVariable);
|
||||
LinkTarget(signatureHasTargetNode, targetVariable);
|
||||
LinkTarget(signatureUseNode, targetVariable);
|
||||
LinkTarget(downSelectNode, targetVariable);
|
||||
LinkTarget(downUseNode, targetVariable);
|
||||
LinkTarget(leapSelectNode, targetVariable);
|
||||
|
||||
579
Assets/_Game/Scripts/Editor/UIFontSetupTool.cs
Normal file
579
Assets/_Game/Scripts/Editor/UIFontSetupTool.cs
Normal file
@@ -0,0 +1,579 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
using TMPro;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEditor.SceneManagement;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
using UnityEngine.TextCore.LowLevel;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Colosseum.Editor
|
||||
{
|
||||
/// <summary>
|
||||
/// UI 폰트 역할
|
||||
/// </summary>
|
||||
public enum UIFontRole
|
||||
{
|
||||
Emphasis,
|
||||
Body,
|
||||
Combat,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 프로젝트 UI 폰트 에셋 생성 및 적용 도구
|
||||
/// </summary>
|
||||
public static class UIFontSetupTool
|
||||
{
|
||||
private const string InitialCharacterSet =
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 " +
|
||||
".,:;!?+-=*/%()[]{}<>#&_'\"|~" +
|
||||
"검투사콜로세움보스체력마나준비게임시작나가기대기실승리패배연결호스트참가플레이어";
|
||||
public const string FontRootPath = "Assets/_Game/Fonts";
|
||||
public const string FontAssetRootPath = "Assets/_Game/Fonts/TMP";
|
||||
public const string MaruSourceFontPath = FontRootPath + "/MaruBuri-Regular.ttf";
|
||||
public const string SuseongSourceFontPath = FontRootPath + "/SuseongBatang.ttf";
|
||||
public const string MaruFontAssetPath = FontAssetRootPath + "/TMP_MaruBuri.asset";
|
||||
public const string SuseongFontAssetPath = FontAssetRootPath + "/TMP_SuseongBatang.asset";
|
||||
|
||||
[MenuItem("Colosseum/UI/TMP 폰트 에셋 생성")]
|
||||
public static void GenerateFontAssetsMenu()
|
||||
{
|
||||
EnsureFontAssets(true);
|
||||
}
|
||||
|
||||
[MenuItem("Colosseum/UI/UI 폰트 규칙 적용")]
|
||||
public static void ApplyFontRulesMenu()
|
||||
{
|
||||
if (!EnsureFontAssets(true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int changedPrefabCount = ApplyPrefabFontRules();
|
||||
int changedSceneCount = ApplySceneFontRules();
|
||||
|
||||
AssetDatabase.SaveAssets();
|
||||
AssetDatabase.Refresh();
|
||||
|
||||
Debug.Log($"[UIFontSetupTool] UI 폰트 규칙 적용 완료. Prefab {changedPrefabCount}개, Scene {changedSceneCount}개를 갱신했습니다.");
|
||||
}
|
||||
|
||||
[MenuItem("Colosseum/UI/HUD 타이포 보정 적용")]
|
||||
public static void ApplyHudTypographyTuningMenu()
|
||||
{
|
||||
if (!EnsureFontAssets(true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int changedPrefabCount = ApplyHudPrefabTuning();
|
||||
|
||||
AssetDatabase.SaveAssets();
|
||||
AssetDatabase.Refresh();
|
||||
|
||||
Debug.Log($"[UIFontSetupTool] HUD 타이포 보정 완료. Prefab {changedPrefabCount}개를 갱신했습니다.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 역할에 맞는 TMP 폰트를 텍스트에 적용합니다.
|
||||
/// </summary>
|
||||
public static bool ApplyRole(TMP_Text text, UIFontRole role)
|
||||
{
|
||||
if (text == null || !TryGetFontAsset(role, out TMP_FontAsset fontAsset))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool changed = false;
|
||||
|
||||
if (text.font != fontAsset)
|
||||
{
|
||||
text.font = fontAsset;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (text.fontSharedMaterial != fontAsset.material)
|
||||
{
|
||||
text.fontSharedMaterial = fontAsset.material;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
float targetCharacterSpacing = role == UIFontRole.Emphasis ? GetEmphasisCharacterSpacing(text) : 0f;
|
||||
if (!Mathf.Approximately(text.characterSpacing, targetCharacterSpacing))
|
||||
{
|
||||
text.characterSpacing = targetCharacterSpacing;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (changed)
|
||||
{
|
||||
EditorUtility.SetDirty(text);
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 역할에 맞는 TMP 폰트 에셋을 반환합니다.
|
||||
/// </summary>
|
||||
public static bool TryGetFontAsset(UIFontRole role, out TMP_FontAsset fontAsset)
|
||||
{
|
||||
fontAsset = role switch
|
||||
{
|
||||
UIFontRole.Emphasis => AssetDatabase.LoadAssetAtPath<TMP_FontAsset>(SuseongFontAssetPath),
|
||||
UIFontRole.Body => AssetDatabase.LoadAssetAtPath<TMP_FontAsset>(MaruFontAssetPath),
|
||||
UIFontRole.Combat => AssetDatabase.LoadAssetAtPath<TMP_FontAsset>(MaruFontAssetPath),
|
||||
_ => null,
|
||||
};
|
||||
|
||||
return fontAsset != null;
|
||||
}
|
||||
|
||||
private static bool EnsureFontAssets(bool logResult)
|
||||
{
|
||||
EnsureFolder(FontRootPath);
|
||||
EnsureFolder(FontAssetRootPath);
|
||||
|
||||
bool success = true;
|
||||
success &= CreateFontAssetIfNeeded(MaruSourceFontPath, MaruFontAssetPath, "TMP_MaruBuri", logResult);
|
||||
success &= CreateFontAssetIfNeeded(SuseongSourceFontPath, SuseongFontAssetPath, "TMP_SuseongBatang", logResult);
|
||||
|
||||
if (success)
|
||||
{
|
||||
AssetDatabase.SaveAssets();
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
private static bool CreateFontAssetIfNeeded(string sourceFontPath, string fontAssetPath, string assetName, bool logResult)
|
||||
{
|
||||
TMP_FontAsset existingFontAsset = AssetDatabase.LoadAssetAtPath<TMP_FontAsset>(fontAssetPath);
|
||||
if (existingFontAsset != null && IsFontAssetUsable(existingFontAsset))
|
||||
{
|
||||
WarmUpFontAsset(existingFontAsset);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (existingFontAsset != null)
|
||||
{
|
||||
AssetDatabase.DeleteAsset(fontAssetPath);
|
||||
}
|
||||
|
||||
Font sourceFont = AssetDatabase.LoadAssetAtPath<Font>(sourceFontPath);
|
||||
if (sourceFont == null)
|
||||
{
|
||||
if (logResult)
|
||||
{
|
||||
Debug.LogError($"[UIFontSetupTool] 원본 폰트를 찾을 수 없습니다: {sourceFontPath}");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
TMP_FontAsset fontAsset = TMP_FontAsset.CreateFontAsset(
|
||||
sourceFont,
|
||||
90,
|
||||
9,
|
||||
GlyphRenderMode.SDFAA,
|
||||
1024,
|
||||
1024,
|
||||
AtlasPopulationMode.Dynamic,
|
||||
true);
|
||||
|
||||
fontAsset.name = assetName;
|
||||
AssetDatabase.CreateAsset(fontAsset, fontAssetPath);
|
||||
AttachSubAssets(fontAsset, fontAssetPath);
|
||||
WarmUpFontAsset(fontAsset);
|
||||
|
||||
if (logResult)
|
||||
{
|
||||
Debug.Log($"[UIFontSetupTool] TMP 폰트 에셋 생성: {fontAssetPath}");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static void WarmUpFontAsset(TMP_FontAsset fontAsset)
|
||||
{
|
||||
if (fontAsset == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
fontAsset.ReadFontAssetDefinition();
|
||||
fontAsset.TryAddCharacters(InitialCharacterSet, out _);
|
||||
EditorUtility.SetDirty(fontAsset);
|
||||
}
|
||||
|
||||
private static void AttachSubAssets(TMP_FontAsset fontAsset, string fontAssetPath)
|
||||
{
|
||||
if (fontAsset == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (fontAsset.material != null && AssetDatabase.GetAssetPath(fontAsset.material) != fontAssetPath)
|
||||
{
|
||||
AssetDatabase.AddObjectToAsset(fontAsset.material, fontAsset);
|
||||
}
|
||||
|
||||
Texture2D[] atlasTextures = fontAsset.atlasTextures;
|
||||
if (atlasTextures == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (Texture2D atlasTexture in atlasTextures)
|
||||
{
|
||||
if (atlasTexture == null || AssetDatabase.GetAssetPath(atlasTexture) == fontAssetPath)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
AssetDatabase.AddObjectToAsset(atlasTexture, fontAsset);
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsFontAssetUsable(TMP_FontAsset fontAsset)
|
||||
{
|
||||
if (fontAsset == null || fontAsset.material == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Texture2D[] atlasTextures = fontAsset.atlasTextures;
|
||||
return atlasTextures != null && atlasTextures.Length > 0 && atlasTextures[0] != null;
|
||||
}
|
||||
|
||||
private static int ApplyPrefabFontRules()
|
||||
{
|
||||
string[] prefabGuids = AssetDatabase.FindAssets("t:Prefab", new[] { "Assets/_Game/Prefabs/UI" });
|
||||
int changedCount = 0;
|
||||
|
||||
foreach (string guid in prefabGuids)
|
||||
{
|
||||
string prefabPath = AssetDatabase.GUIDToAssetPath(guid);
|
||||
GameObject root = PrefabUtility.LoadPrefabContents(prefabPath);
|
||||
|
||||
try
|
||||
{
|
||||
if (ApplyFontRules(root))
|
||||
{
|
||||
PrefabUtility.SaveAsPrefabAsset(root, prefabPath);
|
||||
changedCount++;
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
PrefabUtility.UnloadPrefabContents(root);
|
||||
}
|
||||
}
|
||||
|
||||
return changedCount;
|
||||
}
|
||||
|
||||
private static int ApplyHudPrefabTuning()
|
||||
{
|
||||
string[] prefabGuids = AssetDatabase.FindAssets("t:Prefab", new[] { "Assets/_Game/Prefabs/UI" });
|
||||
int changedCount = 0;
|
||||
|
||||
foreach (string guid in prefabGuids)
|
||||
{
|
||||
string prefabPath = AssetDatabase.GUIDToAssetPath(guid);
|
||||
GameObject root = PrefabUtility.LoadPrefabContents(prefabPath);
|
||||
|
||||
try
|
||||
{
|
||||
if (TuneHudTypography(root))
|
||||
{
|
||||
PrefabUtility.SaveAsPrefabAsset(root, prefabPath);
|
||||
changedCount++;
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
PrefabUtility.UnloadPrefabContents(root);
|
||||
}
|
||||
}
|
||||
|
||||
return changedCount;
|
||||
}
|
||||
|
||||
private static int ApplySceneFontRules()
|
||||
{
|
||||
string originalScenePath = SceneManager.GetActiveScene().path;
|
||||
string[] sceneGuids = AssetDatabase.FindAssets("t:Scene", new[] { "Assets/Scenes" });
|
||||
int changedCount = 0;
|
||||
|
||||
foreach (string guid in sceneGuids)
|
||||
{
|
||||
string scenePath = AssetDatabase.GUIDToAssetPath(guid);
|
||||
Scene scene = EditorSceneManager.OpenScene(scenePath, OpenSceneMode.Single);
|
||||
bool changed = false;
|
||||
|
||||
foreach (GameObject rootObject in scene.GetRootGameObjects())
|
||||
{
|
||||
changed |= ApplyFontRules(rootObject);
|
||||
}
|
||||
|
||||
if (changed)
|
||||
{
|
||||
EditorSceneManager.SaveScene(scene);
|
||||
changedCount++;
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(originalScenePath) && File.Exists(originalScenePath))
|
||||
{
|
||||
EditorSceneManager.OpenScene(originalScenePath, OpenSceneMode.Single);
|
||||
}
|
||||
|
||||
return changedCount;
|
||||
}
|
||||
|
||||
private static bool ApplyFontRules(GameObject root)
|
||||
{
|
||||
bool changed = false;
|
||||
TMP_Text[] texts = root.GetComponentsInChildren<TMP_Text>(true);
|
||||
|
||||
foreach (TMP_Text text in texts)
|
||||
{
|
||||
UIFontRole role = DetermineRole(text);
|
||||
changed |= ApplyRole(text, role);
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
private static bool TuneHudTypography(GameObject root)
|
||||
{
|
||||
if (root == null || ContainsIgnoreCase(root.name, "Lobby"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool changed = false;
|
||||
TMP_Text[] texts = root.GetComponentsInChildren<TMP_Text>(true);
|
||||
|
||||
foreach (TMP_Text text in texts)
|
||||
{
|
||||
string hierarchyPath = GetHierarchyPath(text.transform);
|
||||
|
||||
if (root.name == "UI_ActionBar_Item" || root.name == "UI_ActionBar_EvadeItem")
|
||||
{
|
||||
changed |= TuneActionBarTypography(text, hierarchyPath);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (root.name == "UI_PlayerResources")
|
||||
{
|
||||
changed |= TunePlayerResourcesTypography(text, hierarchyPath);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (root.name == "UI_HealthBar" || root.name == "UI_ManaBar")
|
||||
{
|
||||
changed |= SetTextStyle(text, 30f, FontStyles.Bold, -1f);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (root.name == "UI_BossHealthBar")
|
||||
{
|
||||
changed |= TuneBossBarTypography(text, hierarchyPath);
|
||||
}
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
private static UIFontRole DetermineRole(TMP_Text text)
|
||||
{
|
||||
string objectName = text.gameObject.name;
|
||||
string hierarchyPath = GetHierarchyPath(text.transform);
|
||||
|
||||
if (IsEmphasisText(objectName, hierarchyPath))
|
||||
{
|
||||
return UIFontRole.Emphasis;
|
||||
}
|
||||
|
||||
if (IsCombatText(text, objectName, hierarchyPath))
|
||||
{
|
||||
return UIFontRole.Combat;
|
||||
}
|
||||
|
||||
return UIFontRole.Body;
|
||||
}
|
||||
|
||||
private static bool IsEmphasisText(string objectName, string hierarchyPath)
|
||||
{
|
||||
return ContainsIgnoreCase(objectName, "Title")
|
||||
|| ContainsIgnoreCase(objectName, "BossName")
|
||||
|| ContainsIgnoreCase(objectName, "Victory")
|
||||
|| ContainsIgnoreCase(objectName, "GameOver")
|
||||
|| ContainsIgnoreCase(hierarchyPath, "/Title")
|
||||
|| ContainsIgnoreCase(hierarchyPath, "/BossName");
|
||||
}
|
||||
|
||||
private static bool IsCombatText(TMP_Text text, string objectName, string hierarchyPath)
|
||||
{
|
||||
return text.GetComponentInParent<Button>(true) != null
|
||||
|| text.GetComponentInParent<TMP_InputField>(true) != null
|
||||
|| ContainsIgnoreCase(objectName, "HP")
|
||||
|| ContainsIgnoreCase(objectName, "MP")
|
||||
|| ContainsIgnoreCase(objectName, "XP")
|
||||
|| ContainsIgnoreCase(objectName, "Cooldown")
|
||||
|| ContainsIgnoreCase(objectName, "Key")
|
||||
|| ContainsIgnoreCase(objectName, "Duration")
|
||||
|| ContainsIgnoreCase(objectName, "Status")
|
||||
|| ContainsIgnoreCase(hierarchyPath, "ActionBar")
|
||||
|| ContainsIgnoreCase(hierarchyPath, "HealthBar")
|
||||
|| ContainsIgnoreCase(hierarchyPath, "ManaBar")
|
||||
|| ContainsIgnoreCase(hierarchyPath, "PlayerResources")
|
||||
|| ContainsIgnoreCase(hierarchyPath, "Abnormality")
|
||||
|| ContainsIgnoreCase(hierarchyPath, "BossHealthBar");
|
||||
}
|
||||
|
||||
private static float GetEmphasisCharacterSpacing(TMP_Text text)
|
||||
{
|
||||
string objectName = text.gameObject.name;
|
||||
|
||||
if (ContainsIgnoreCase(objectName, "GameOver") || ContainsIgnoreCase(objectName, "Victory"))
|
||||
{
|
||||
return 5f;
|
||||
}
|
||||
|
||||
if (ContainsIgnoreCase(objectName, "BossName"))
|
||||
{
|
||||
return 3f;
|
||||
}
|
||||
|
||||
return 4f;
|
||||
}
|
||||
|
||||
private static bool TuneActionBarTypography(TMP_Text text, string hierarchyPath)
|
||||
{
|
||||
if (text == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ContainsIgnoreCase(hierarchyPath, "Label_CooldownTime"))
|
||||
{
|
||||
return SetTextStyle(text, 24f, FontStyles.Bold, -1f);
|
||||
}
|
||||
|
||||
if (ContainsIgnoreCase(hierarchyPath, "/Input/Input"))
|
||||
{
|
||||
return SetTextStyle(text, 20f, FontStyles.Bold, 0f);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool TunePlayerResourcesTypography(TMP_Text text, string hierarchyPath)
|
||||
{
|
||||
if (text == null || !ContainsIgnoreCase(hierarchyPath, "Label_XP"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
float fontSize = ContainsIgnoreCase(hierarchyPath, "/HUD_XPBar/") ? 24f : 28f;
|
||||
return SetTextStyle(text, fontSize, FontStyles.Bold, -1f);
|
||||
}
|
||||
|
||||
private static bool TuneBossBarTypography(TMP_Text text, string hierarchyPath)
|
||||
{
|
||||
if (text == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ContainsIgnoreCase(hierarchyPath, "Label_HP"))
|
||||
{
|
||||
return SetTextStyle(text, 30f, FontStyles.Bold, -1f);
|
||||
}
|
||||
|
||||
if (ContainsIgnoreCase(hierarchyPath, "Label_BossName"))
|
||||
{
|
||||
return SetTextStyle(text, 34f, FontStyles.Normal, 3f);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool SetTextStyle(TMP_Text text, float fontSize, FontStyles fontStyle, float characterSpacing)
|
||||
{
|
||||
bool changed = false;
|
||||
|
||||
if (!Mathf.Approximately(text.fontSize, fontSize))
|
||||
{
|
||||
text.fontSize = fontSize;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (text.fontStyle != fontStyle)
|
||||
{
|
||||
text.fontStyle = fontStyle;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (!Mathf.Approximately(text.characterSpacing, characterSpacing))
|
||||
{
|
||||
text.characterSpacing = characterSpacing;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (changed)
|
||||
{
|
||||
EditorUtility.SetDirty(text);
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
private static string GetHierarchyPath(Transform transform)
|
||||
{
|
||||
string path = transform.name;
|
||||
|
||||
while (transform.parent != null)
|
||||
{
|
||||
transform = transform.parent;
|
||||
path = $"{transform.name}/{path}";
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
private static bool ContainsIgnoreCase(string source, string value)
|
||||
{
|
||||
return source?.IndexOf(value, StringComparison.OrdinalIgnoreCase) >= 0;
|
||||
}
|
||||
|
||||
private static void EnsureFolder(string path)
|
||||
{
|
||||
if (AssetDatabase.IsValidFolder(path))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string[] parts = path.Split('/');
|
||||
string currentPath = parts[0];
|
||||
|
||||
for (int i = 1; i < parts.Length; i++)
|
||||
{
|
||||
string nextPath = $"{currentPath}/{parts[i]}";
|
||||
if (!AssetDatabase.IsValidFolder(nextPath))
|
||||
{
|
||||
AssetDatabase.CreateFolder(currentPath, parts[i]);
|
||||
}
|
||||
|
||||
currentPath = nextPath;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/_Game/Scripts/Editor/UIFontSetupTool.cs.meta
Normal file
2
Assets/_Game/Scripts/Editor/UIFontSetupTool.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5c686d635a98a6b4baaad969bc633ca3
|
||||
@@ -2,6 +2,7 @@ using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Colosseum.AI;
|
||||
using Colosseum.Abnormalities;
|
||||
using Colosseum.Combat;
|
||||
using Colosseum.Player;
|
||||
using Colosseum.Skills;
|
||||
@@ -46,6 +47,9 @@ namespace Colosseum.Enemy
|
||||
[FormerlySerializedAs("downPunishPattern")]
|
||||
[SerializeField] protected BossPatternData punishPattern;
|
||||
|
||||
[Tooltip("파티 누킹을 시험하는 시그니처 패턴")]
|
||||
[SerializeField] protected BossPatternData signaturePattern;
|
||||
|
||||
[Header("Phase Thresholds")]
|
||||
[Tooltip("2페이즈 진입 체력 비율")]
|
||||
[Range(0f, 1f)] [SerializeField] protected float phase2HealthThreshold = 0.75f;
|
||||
@@ -79,6 +83,37 @@ namespace Colosseum.Enemy
|
||||
[FormerlySerializedAs("phase3SlamInterval")]
|
||||
[Min(1)] [SerializeField] protected int phase3SecondaryInterval = 2;
|
||||
|
||||
[Header("Signature Pattern")]
|
||||
[Tooltip("시그니처 패턴을 사용하기 시작하는 최소 페이즈")]
|
||||
[Min(1)] [SerializeField] protected int signatureMinPhase = 2;
|
||||
|
||||
[Tooltip("시그니처 패턴 차단에 필요한 누적 피해 비율")]
|
||||
[Range(0f, 1f)] [SerializeField] protected float signatureRequiredDamageRatio = 0.1f;
|
||||
|
||||
[Tooltip("시그니처 차단 성공 시 보스가 멈추는 시간")]
|
||||
[Min(0f)] [SerializeField] protected float signatureSuccessStaggerDuration = 2f;
|
||||
|
||||
[Tooltip("시그니처 실패 시 모든 플레이어에게 적용할 디버프")]
|
||||
[SerializeField] protected AbnormalityData signatureFailureAbnormality;
|
||||
|
||||
[Tooltip("시그니처 실패 시 모든 플레이어에게 주는 기본 피해")]
|
||||
[Min(0f)] [SerializeField] protected float signatureFailureDamage = 40f;
|
||||
|
||||
[Tooltip("시그니처 실패 시 넉백이 적용되는 반경")]
|
||||
[Min(0f)] [SerializeField] protected float signatureFailureKnockbackRadius = 8f;
|
||||
|
||||
[Tooltip("시그니처 실패 시 다운이 적용되는 반경")]
|
||||
[Min(0f)] [SerializeField] protected float signatureFailureDownRadius = 3f;
|
||||
|
||||
[Tooltip("시그니처 실패 시 넉백 속도")]
|
||||
[Min(0f)] [SerializeField] protected float signatureFailureKnockbackSpeed = 12f;
|
||||
|
||||
[Tooltip("시그니처 실패 시 넉백 지속 시간")]
|
||||
[Min(0f)] [SerializeField] protected float signatureFailureKnockbackDuration = 0.35f;
|
||||
|
||||
[Tooltip("시그니처 실패 시 다운 지속 시간")]
|
||||
[Min(0f)] [SerializeField] protected float signatureFailureDownDuration = 2f;
|
||||
|
||||
[Header("Behavior")]
|
||||
[Tooltip("전용 컨텍스트 사용 시 기존 BehaviorGraph를 비활성화할지 여부")]
|
||||
[SerializeField] protected bool disableBehaviorGraph = true;
|
||||
@@ -92,6 +127,9 @@ namespace Colosseum.Enemy
|
||||
protected GameObject currentTarget;
|
||||
protected float nextTargetRefreshTime;
|
||||
protected int meleePatternCounter;
|
||||
protected bool isSignaturePatternActive;
|
||||
protected float signatureAccumulatedDamage;
|
||||
protected float signatureRequiredDamage;
|
||||
|
||||
/// <summary>
|
||||
/// 전용 컨텍스트 사용 시 BehaviorGraph를 비활성화할지 여부
|
||||
@@ -108,6 +146,11 @@ namespace Colosseum.Enemy
|
||||
/// </summary>
|
||||
public float PunishSearchRadius => punishSearchRadius;
|
||||
|
||||
/// <summary>
|
||||
/// 시그니처 패턴 진행 여부
|
||||
/// </summary>
|
||||
public bool IsSignaturePatternActive => isSignaturePatternActive;
|
||||
|
||||
/// <summary>
|
||||
/// 디버그 로그 출력 여부
|
||||
/// </summary>
|
||||
@@ -185,6 +228,7 @@ namespace Colosseum.Enemy
|
||||
BossCombatPatternRole.Secondary => secondaryPattern,
|
||||
BossCombatPatternRole.Mobility => mobilityPattern,
|
||||
BossCombatPatternRole.Punish => punishPattern,
|
||||
BossCombatPatternRole.Signature => signaturePattern,
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
@@ -321,6 +365,40 @@ namespace Colosseum.Enemy
|
||||
Debug.Log($"[{source}] {message}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 시그니처 패턴 사용 가능 여부를 반환합니다.
|
||||
/// </summary>
|
||||
public bool IsSignaturePatternReady()
|
||||
{
|
||||
if (!IsServer || bossEnemy == null || skillController == null)
|
||||
return false;
|
||||
|
||||
if (CurrentPatternPhase < signatureMinPhase)
|
||||
return false;
|
||||
|
||||
if (activePatternCoroutine != null || isSignaturePatternActive)
|
||||
return false;
|
||||
|
||||
if (bossEnemy.IsDead || bossEnemy.IsTransitioning || skillController.IsPlayingAnimation)
|
||||
return false;
|
||||
|
||||
return UsePatternAction.IsPatternReady(gameObject, signaturePattern);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 시그니처 패턴을 시작합니다.
|
||||
/// </summary>
|
||||
public bool TryStartSignaturePattern(GameObject target)
|
||||
{
|
||||
if (!IsSignaturePatternReady())
|
||||
return false;
|
||||
|
||||
GameObject resolvedTarget = IsValidHostileTarget(target) ? target : FindNearestLivingTarget();
|
||||
currentTarget = resolvedTarget;
|
||||
activePatternCoroutine = StartCoroutine(RunSignaturePatternCoroutine(signaturePattern, resolvedTarget));
|
||||
return true;
|
||||
}
|
||||
|
||||
protected virtual bool TryStartPrimaryLoopPattern()
|
||||
{
|
||||
if (currentTarget == null)
|
||||
@@ -515,6 +593,220 @@ namespace Colosseum.Enemy
|
||||
|
||||
if (behaviorGraphAgent == null)
|
||||
behaviorGraphAgent = GetComponent<BehaviorGraphAgent>();
|
||||
|
||||
if (enemyBase != null)
|
||||
{
|
||||
enemyBase.OnDamageTaken -= HandleBossDamageTaken;
|
||||
enemyBase.OnDamageTaken += HandleBossDamageTaken;
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnNetworkDespawn()
|
||||
{
|
||||
if (enemyBase != null)
|
||||
{
|
||||
enemyBase.OnDamageTaken -= HandleBossDamageTaken;
|
||||
}
|
||||
|
||||
base.OnNetworkDespawn();
|
||||
}
|
||||
|
||||
private IEnumerator RunSignaturePatternCoroutine(BossPatternData pattern, GameObject target)
|
||||
{
|
||||
StopMovement();
|
||||
|
||||
isSignaturePatternActive = true;
|
||||
signatureAccumulatedDamage = 0f;
|
||||
signatureRequiredDamage = bossEnemy.MaxHealth * signatureRequiredDamageRatio;
|
||||
|
||||
bool interrupted = false;
|
||||
bool completed = true;
|
||||
|
||||
for (int i = 0; i < pattern.Steps.Count; i++)
|
||||
{
|
||||
if (HasMetSignatureBreakThreshold())
|
||||
{
|
||||
interrupted = true;
|
||||
break;
|
||||
}
|
||||
|
||||
PatternStep step = pattern.Steps[i];
|
||||
if (step.Type == PatternStepType.Wait)
|
||||
{
|
||||
float remaining = step.Duration;
|
||||
while (remaining > 0f)
|
||||
{
|
||||
if (HasMetSignatureBreakThreshold())
|
||||
{
|
||||
interrupted = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (bossEnemy == null || bossEnemy.IsDead)
|
||||
{
|
||||
completed = false;
|
||||
break;
|
||||
}
|
||||
|
||||
remaining -= Time.deltaTime;
|
||||
yield return null;
|
||||
}
|
||||
|
||||
if (interrupted || !completed)
|
||||
break;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (step.Skill == null)
|
||||
{
|
||||
completed = false;
|
||||
Debug.LogWarning($"[{GetType().Name}] 시그니처 패턴 스텝 스킬이 비어 있습니다. Pattern={pattern.PatternName}, Index={i}");
|
||||
break;
|
||||
}
|
||||
|
||||
if (!skillController.ExecuteSkill(step.Skill))
|
||||
{
|
||||
completed = false;
|
||||
LogDebug(GetType().Name, $"시그니처 스킬 실행 실패: {step.Skill.SkillName}");
|
||||
break;
|
||||
}
|
||||
|
||||
while (skillController != null && skillController.IsPlayingAnimation)
|
||||
{
|
||||
if (HasMetSignatureBreakThreshold())
|
||||
{
|
||||
interrupted = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (bossEnemy == null || bossEnemy.IsDead)
|
||||
{
|
||||
completed = false;
|
||||
break;
|
||||
}
|
||||
|
||||
yield return null;
|
||||
}
|
||||
|
||||
if (interrupted || !completed)
|
||||
break;
|
||||
}
|
||||
|
||||
if (interrupted)
|
||||
{
|
||||
skillController?.CancelSkill(SkillCancelReason.Interrupt);
|
||||
UsePatternAction.MarkPatternUsed(gameObject, pattern);
|
||||
LogDebug(GetType().Name, $"시그니처 차단 성공: 누적 피해 {signatureAccumulatedDamage:F1} / 필요 {signatureRequiredDamage:F1}");
|
||||
|
||||
if (signatureSuccessStaggerDuration > 0f)
|
||||
{
|
||||
if (enemyBase != null && enemyBase.Animator != null &&
|
||||
HasAnimatorParameter(enemyBase.Animator, "Hit", AnimatorControllerParameterType.Trigger))
|
||||
{
|
||||
enemyBase.Animator.SetTrigger("Hit");
|
||||
}
|
||||
|
||||
float endTime = Time.time + signatureSuccessStaggerDuration;
|
||||
while (Time.time < endTime && bossEnemy != null && !bossEnemy.IsDead)
|
||||
{
|
||||
StopMovement();
|
||||
yield return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (completed)
|
||||
{
|
||||
UsePatternAction.MarkPatternUsed(gameObject, pattern);
|
||||
LogDebug(GetType().Name, $"시그니처 실패: 누적 피해 {signatureAccumulatedDamage:F1} / 필요 {signatureRequiredDamage:F1}");
|
||||
ExecuteSignatureFailure();
|
||||
}
|
||||
|
||||
isSignaturePatternActive = false;
|
||||
signatureAccumulatedDamage = 0f;
|
||||
signatureRequiredDamage = 0f;
|
||||
activePatternCoroutine = null;
|
||||
}
|
||||
|
||||
private void ExecuteSignatureFailure()
|
||||
{
|
||||
PlayerNetworkController[] players = FindObjectsByType<PlayerNetworkController>(FindObjectsSortMode.None);
|
||||
for (int i = 0; i < players.Length; i++)
|
||||
{
|
||||
PlayerNetworkController player = players[i];
|
||||
if (player == null || player.IsDead || !player.gameObject.activeInHierarchy)
|
||||
continue;
|
||||
|
||||
GameObject target = player.gameObject;
|
||||
if (!IsValidHostileTarget(target))
|
||||
continue;
|
||||
|
||||
player.TakeDamage(signatureFailureDamage, gameObject);
|
||||
|
||||
AbnormalityManager abnormalityManager = target.GetComponent<AbnormalityManager>();
|
||||
if (abnormalityManager != null && signatureFailureAbnormality != null)
|
||||
{
|
||||
abnormalityManager.ApplyAbnormality(signatureFailureAbnormality, gameObject);
|
||||
}
|
||||
|
||||
HitReactionController hitReactionController = target.GetComponent<HitReactionController>();
|
||||
if (hitReactionController == null)
|
||||
continue;
|
||||
|
||||
float distance = Vector3.Distance(transform.position, target.transform.position);
|
||||
if (distance <= signatureFailureDownRadius)
|
||||
{
|
||||
hitReactionController.ApplyDown(signatureFailureDownDuration);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (distance > signatureFailureKnockbackRadius)
|
||||
continue;
|
||||
|
||||
Vector3 knockbackDirection = target.transform.position - transform.position;
|
||||
knockbackDirection.y = 0f;
|
||||
if (knockbackDirection.sqrMagnitude < 0.0001f)
|
||||
{
|
||||
knockbackDirection = transform.forward;
|
||||
}
|
||||
|
||||
hitReactionController.ApplyKnockback(knockbackDirection.normalized * signatureFailureKnockbackSpeed, signatureFailureKnockbackDuration);
|
||||
}
|
||||
}
|
||||
|
||||
private bool HasMetSignatureBreakThreshold()
|
||||
{
|
||||
if (!isSignaturePatternActive)
|
||||
return false;
|
||||
|
||||
if (signatureRequiredDamage <= 0f)
|
||||
return true;
|
||||
|
||||
return signatureAccumulatedDamage >= signatureRequiredDamage;
|
||||
}
|
||||
|
||||
private static bool HasAnimatorParameter(Animator animator, string parameterName, AnimatorControllerParameterType parameterType)
|
||||
{
|
||||
if (animator == null || string.IsNullOrEmpty(parameterName))
|
||||
return false;
|
||||
|
||||
AnimatorControllerParameter[] parameters = animator.parameters;
|
||||
for (int i = 0; i < parameters.Length; i++)
|
||||
{
|
||||
AnimatorControllerParameter parameter = parameters[i];
|
||||
if (parameter.type == parameterType && parameter.name == parameterName)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private void HandleBossDamageTaken(float damage)
|
||||
{
|
||||
if (!IsServer || !isSignaturePatternActive || damage <= 0f)
|
||||
return;
|
||||
|
||||
signatureAccumulatedDamage += damage;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ namespace Colosseum.Enemy
|
||||
Secondary = 1,
|
||||
Mobility = 2,
|
||||
Punish = 3,
|
||||
Signature = 4,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -103,7 +103,9 @@ namespace Colosseum.Player
|
||||
{
|
||||
if (isDead.Value || IsDamageImmune()) return;
|
||||
|
||||
currentHealth.Value = Mathf.Max(0f, currentHealth.Value - damage);
|
||||
float finalDamage = damage * GetIncomingDamageMultiplier();
|
||||
float actualDamage = Mathf.Min(finalDamage, currentHealth.Value);
|
||||
currentHealth.Value = Mathf.Max(0f, currentHealth.Value - actualDamage);
|
||||
|
||||
if (currentHealth.Value <= 0f)
|
||||
{
|
||||
@@ -272,8 +274,9 @@ namespace Colosseum.Player
|
||||
{
|
||||
if (!IsServer || isDead.Value || IsDamageImmune()) return 0f;
|
||||
|
||||
float actualDamage = Mathf.Min(damage, currentHealth.Value);
|
||||
currentHealth.Value = Mathf.Max(0f, currentHealth.Value - damage);
|
||||
float finalDamage = damage * GetIncomingDamageMultiplier();
|
||||
float actualDamage = Mathf.Min(finalDamage, currentHealth.Value);
|
||||
currentHealth.Value = Mathf.Max(0f, currentHealth.Value - actualDamage);
|
||||
|
||||
if (currentHealth.Value <= 0f)
|
||||
{
|
||||
@@ -300,6 +303,14 @@ namespace Colosseum.Player
|
||||
{
|
||||
return abnormalityManager != null && abnormalityManager.IsInvincible;
|
||||
}
|
||||
|
||||
private float GetIncomingDamageMultiplier()
|
||||
{
|
||||
if (abnormalityManager == null)
|
||||
return 1f;
|
||||
|
||||
return Mathf.Max(0f, abnormalityManager.IncomingDamageMultiplier);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ namespace Colosseum.Skills
|
||||
{
|
||||
None,
|
||||
Manual,
|
||||
Interrupt,
|
||||
Death,
|
||||
Stun,
|
||||
HitReaction,
|
||||
|
||||
@@ -11,25 +11,193 @@ namespace Colosseum.UI
|
||||
public class SkillQuickSlotUI : MonoBehaviour
|
||||
{
|
||||
[Header("Skill Slots")]
|
||||
[Tooltip("6개의 스킬 슬롯 UI (인덱스 순서대로)")]
|
||||
[SerializeField] private SkillSlotUI[] skillSlots = new SkillSlotUI[6];
|
||||
[Tooltip("표시 순서대로 배치된 스킬 슬롯 UI")]
|
||||
[SerializeField] private SkillSlotUI[] skillSlots = new SkillSlotUI[7];
|
||||
|
||||
[Header("Debug")]
|
||||
[SerializeField] private bool debugMode = false;
|
||||
|
||||
[Header("Display Order")]
|
||||
[Tooltip("UI 슬롯 순서가 참조할 실제 스킬 슬롯 인덱스")]
|
||||
[SerializeField] private int[] slotMappings = { 6, 0, 1, 2, 3, 4, 5 };
|
||||
|
||||
[Header("Keybind Labels")]
|
||||
[Tooltip("키바인딩 표시 텍스트 (기본: Q, W, E, R, A, S)")]
|
||||
[SerializeField] private string[] keyLabels = { "Q", "W", "E", "R", "A", "S" };
|
||||
[Tooltip("키바인딩 표시 텍스트")]
|
||||
[SerializeField] private string[] keyLabels = { "Ctrl", "L", "R", "1", "2", "3", "4" };
|
||||
|
||||
private PlayerSkillInput playerSkillInput;
|
||||
private PlayerNetworkController networkController;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
AutoCollectSkillSlots();
|
||||
}
|
||||
|
||||
private void OnValidate()
|
||||
{
|
||||
AutoCollectSkillSlots();
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
// 로컬 플레이어 찾기
|
||||
FindLocalPlayer();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 자식 슬롯을 자동 수집해 프리팹 중첩 구조 변경에도 참조가 유지되도록 합니다.
|
||||
/// </summary>
|
||||
private void AutoCollectSkillSlots()
|
||||
{
|
||||
SkillSlotUI[] foundSlots = GetComponentsInChildren<SkillSlotUI>(true);
|
||||
if (foundSlots == null || foundSlots.Length == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (skillSlots == null || skillSlots.Length != foundSlots.Length)
|
||||
{
|
||||
skillSlots = foundSlots;
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < foundSlots.Length; i++)
|
||||
{
|
||||
if (skillSlots[i] != foundSlots[i])
|
||||
{
|
||||
skillSlots = foundSlots;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
EnsureDisplayConfig();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 슬롯 수 변경이나 프리팹 구조 변경 시 기본 표시 구성을 복구합니다.
|
||||
/// </summary>
|
||||
private void EnsureDisplayConfig()
|
||||
{
|
||||
int slotCount = skillSlots != null ? skillSlots.Length : 0;
|
||||
if (slotCount <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!IsValidSlotMappings(slotMappings, slotCount))
|
||||
{
|
||||
slotMappings = BuildDefaultSlotMappings(slotCount);
|
||||
}
|
||||
|
||||
if (keyLabels == null || keyLabels.Length != slotCount)
|
||||
{
|
||||
keyLabels = BuildDefaultKeyLabels(slotCount);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 7칸 액션바는 긴급회피를 맨 왼쪽에 두고, 나머지는 기본 스킬 순서를 유지합니다.
|
||||
/// </summary>
|
||||
private static int[] BuildDefaultSlotMappings(int slotCount)
|
||||
{
|
||||
int[] defaultMappings = new int[slotCount];
|
||||
|
||||
if (slotCount == 7)
|
||||
{
|
||||
defaultMappings[0] = 6;
|
||||
for (int i = 1; i < slotCount; i++)
|
||||
{
|
||||
defaultMappings[i] = i - 1;
|
||||
}
|
||||
|
||||
return defaultMappings;
|
||||
}
|
||||
|
||||
for (int i = 0; i < slotCount; i++)
|
||||
{
|
||||
defaultMappings[i] = i;
|
||||
}
|
||||
|
||||
return defaultMappings;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 기본 키 라벨을 슬롯 수에 맞춰 생성합니다.
|
||||
/// </summary>
|
||||
private static string[] BuildDefaultKeyLabels(int slotCount)
|
||||
{
|
||||
if (slotCount == 7)
|
||||
{
|
||||
return new[] { "Ctrl", "L", "R", "1", "2", "3", "4" };
|
||||
}
|
||||
|
||||
string[] defaultLabels = new string[slotCount];
|
||||
for (int i = 0; i < slotCount; i++)
|
||||
{
|
||||
defaultLabels[i] = (i + 1).ToString();
|
||||
}
|
||||
|
||||
return defaultLabels;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 표시 매핑이 현재 슬롯 수에 대해 유효한지 검사합니다.
|
||||
/// </summary>
|
||||
private static bool IsValidSlotMappings(int[] mappings, int slotCount)
|
||||
{
|
||||
if (mappings == null || mappings.Length != slotCount)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool[] usedIndices = new bool[slotCount];
|
||||
for (int i = 0; i < mappings.Length; i++)
|
||||
{
|
||||
int mappedIndex = mappings[i];
|
||||
if (mappedIndex < 0 || mappedIndex >= slotCount || usedIndices[mappedIndex])
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
usedIndices[mappedIndex] = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// UI 인덱스를 실제 플레이어 스킬 슬롯 인덱스로 변환합니다.
|
||||
/// </summary>
|
||||
private int GetMappedSlotIndex(int displayIndex)
|
||||
{
|
||||
EnsureDisplayConfig();
|
||||
|
||||
if (displayIndex < 0 || displayIndex >= slotMappings.Length)
|
||||
{
|
||||
return displayIndex;
|
||||
}
|
||||
|
||||
return slotMappings[displayIndex];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 실제 슬롯 인덱스를 표시 슬롯 인덱스로 역변환합니다.
|
||||
/// </summary>
|
||||
private int GetDisplayIndex(int slotIndex)
|
||||
{
|
||||
EnsureDisplayConfig();
|
||||
|
||||
for (int i = 0; i < slotMappings.Length; i++)
|
||||
{
|
||||
if (slotMappings[i] == slotIndex)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
private void FindLocalPlayer()
|
||||
{
|
||||
var players = FindObjectsByType<PlayerSkillInput>(FindObjectsSortMode.None);
|
||||
@@ -57,17 +225,19 @@ namespace Colosseum.UI
|
||||
|
||||
private void InitializeSlots()
|
||||
{
|
||||
AutoCollectSkillSlots();
|
||||
if (playerSkillInput == null) return;
|
||||
|
||||
int initializedCount = 0;
|
||||
for (int i = 0; i < skillSlots.Length && i < keyLabels.Length; i++)
|
||||
for (int i = 0; i < skillSlots.Length; i++)
|
||||
{
|
||||
SkillData skill = playerSkillInput.GetSkill(i);
|
||||
int mappedSlotIndex = GetMappedSlotIndex(i);
|
||||
SkillData skill = playerSkillInput.GetSkill(mappedSlotIndex);
|
||||
string keyLabel = i < keyLabels.Length ? keyLabels[i] : (i + 1).ToString();
|
||||
|
||||
if (skillSlots[i] != null)
|
||||
{
|
||||
skillSlots[i].Initialize(i, skill, keyLabel);
|
||||
skillSlots[i].Initialize(mappedSlotIndex, skill, keyLabel);
|
||||
if (skill != null) initializedCount++;
|
||||
}
|
||||
else
|
||||
@@ -102,16 +272,17 @@ namespace Colosseum.UI
|
||||
{
|
||||
if (skillSlots[i] == null) continue;
|
||||
|
||||
SkillData skill = playerSkillInput.GetSkill(i);
|
||||
int mappedSlotIndex = GetMappedSlotIndex(i);
|
||||
SkillData skill = playerSkillInput.GetSkill(mappedSlotIndex);
|
||||
if (skill == null) continue;
|
||||
|
||||
float remainingCooldown = playerSkillInput.GetRemainingCooldown(i);
|
||||
float remainingCooldown = playerSkillInput.GetRemainingCooldown(mappedSlotIndex);
|
||||
float totalCooldown = skill.Cooldown;
|
||||
bool hasEnoughMana = networkController == null || networkController.Mana >= skill.ManaCost;
|
||||
|
||||
if (shouldLog && remainingCooldown > 0f)
|
||||
{
|
||||
Debug.Log($"[SkillQuickSlotUI] Slot {i}: {skill.SkillName}, CD: {remainingCooldown:F1}/{totalCooldown:F1}");
|
||||
Debug.Log($"[SkillQuickSlotUI] Slot {mappedSlotIndex}: {skill.SkillName}, CD: {remainingCooldown:F1}/{totalCooldown:F1}");
|
||||
}
|
||||
|
||||
skillSlots[i].UpdateState(remainingCooldown, totalCooldown, hasEnoughMana);
|
||||
@@ -133,10 +304,13 @@ namespace Colosseum.UI
|
||||
/// </summary>
|
||||
public void UpdateSkillSlot(int slotIndex, SkillData skill)
|
||||
{
|
||||
if (slotIndex < 0 || slotIndex >= skillSlots.Length) return;
|
||||
AutoCollectSkillSlots();
|
||||
|
||||
string keyLabel = slotIndex < keyLabels.Length ? keyLabels[slotIndex] : (slotIndex + 1).ToString();
|
||||
skillSlots[slotIndex].Initialize(slotIndex, skill, keyLabel);
|
||||
int displayIndex = GetDisplayIndex(slotIndex);
|
||||
if (displayIndex < 0 || displayIndex >= skillSlots.Length) return;
|
||||
|
||||
string keyLabel = displayIndex < keyLabels.Length ? keyLabels[displayIndex] : (displayIndex + 1).ToString();
|
||||
skillSlots[displayIndex].Initialize(slotIndex, skill, keyLabel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user