feat: 플레이어 자원/액션바 HUD 분리 및 긴급회피 슬롯 추가

This commit is contained in:
2026-03-24 12:23:51 +09:00
parent 0889bb0f25
commit 543b83e707
11 changed files with 6301 additions and 1333 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 49cc51b51d25b2e4f85ceec039fb545c
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 57e5d30f9d5f9724eba1a18f03be3889
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@@ -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,23 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
propertyPath: m_fontSize
value: 43.9
value: 42
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: 42
objectReference: {fileID: 0}
- target: {fileID: 1990594193549166204, guid: 9aea4cf6dad33b1419c4597a344a2e92, type: 3}
propertyPath: m_sharedMaterial
value:
objectReference: {fileID: 2100000, guid: a3063f2d22ae4ba44828c3885272eaf2, type: 2}
- 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 +514,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 +538,94 @@ 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: 42
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: 42
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: 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 +714,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 +931,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}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 6a6d1b384d7c82f49802f1650bb34b40
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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,7 @@ MonoBehaviour:
- {fileID: 1423210892419994845}
- {fileID: 7830658735294947559}
- {fileID: 6568354020171798426}
debugMode: 1
keyLabels:
- L
- R
@@ -816,8 +817,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 +973,10 @@ PrefabInstance:
propertyPath: m_AnchorMax.y
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 +1113,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
@@ -1135,6 +1129,10 @@ PrefabInstance:
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
@@ -1872,6 +1870,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
@@ -1888,6 +1897,10 @@ PrefabInstance:
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
@@ -2029,6 +2042,10 @@ PrefabInstance:
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
@@ -2371,6 +2388,10 @@ PrefabInstance:
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
@@ -2512,6 +2533,10 @@ PrefabInstance:
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
@@ -2653,6 +2678,10 @@ PrefabInstance:
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

View File

@@ -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);
}
}
}