1. ExpBar를 UIBar 로 변경해서 UIButton과 같이 여러곳에서 공용으로 사용할 수 있게 변경
2. EventBus 를 만들어서 Button같이 자기 스스로 동작을 시작할 수 있는 오브젝트들 말고 수동적인 오브젝트들이 값을 받는 방식을 관리하게 설정
  - PlayerController, UIManager, UIBar, EventBus를 연결함
3. Events 아래에 Player의 이벤트에 연관된 코드를 PlayerEvents 로 만들어서 관리함
  - 경험치 전달 양식이 여기 존재
  - 체력바나 마나바 같은 양식도 여기서 만들 예정
This commit is contained in:
SEAN 2025-10-20 16:54:45 +09:00
parent c3c0180afc
commit cbd35babca
17 changed files with 1755 additions and 218 deletions

View File

@ -12,7 +12,7 @@
"scanRange": 5.0,
"atkRange": 1.5,
"exp": 0,
"maxExp": 100,
"maxExp": 80,
"gold": 0
}
}

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -1,6 +1,6 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &221660593747236863
--- !u!1 &2339378672602307055
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -8,9 +8,9 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3572295776350739363}
- component: {fileID: 8570635063274032224}
- component: {fileID: 7389402252129091523}
- component: {fileID: 1366565084877804979}
- component: {fileID: 6166932635644887664}
- component: {fileID: 5037335085271249363}
m_Layer: 5
m_Name: Lv_BackGround
m_TagString: Untagged
@ -18,41 +18,41 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3572295776350739363
--- !u!224 &1366565084877804979
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 221660593747236863}
m_GameObject: {fileID: 2339378672602307055}
m_LocalRotation: {x: 0, y: 0, z: 0.38268343, w: 0.92387956}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 826302246741294294}
m_Father: {fileID: 1340310372456599764}
- {fileID: 2887869641152754374}
m_Father: {fileID: 3602288774921871044}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 45}
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: 50, y: 50}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8570635063274032224
--- !u!222 &6166932635644887664
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 221660593747236863}
m_GameObject: {fileID: 2339378672602307055}
m_CullTransparentMesh: 1
--- !u!114 &7389402252129091523
--- !u!114 &5037335085271249363
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 221660593747236863}
m_GameObject: {fileID: 2339378672602307055}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
@ -76,7 +76,7 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &863241678155818087
--- !u!1 &2926919861074291319
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -84,9 +84,9 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6203366101496334589}
- component: {fileID: 7352611464118288529}
- component: {fileID: 6525185158827299480}
- component: {fileID: 8462988529716676333}
- component: {fileID: 5002903848154041985}
- component: {fileID: 8784912040634948744}
m_Layer: 5
m_Name: BackBar
m_TagString: Untagged
@ -94,40 +94,40 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6203366101496334589
--- !u!224 &8462988529716676333
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 863241678155818087}
m_GameObject: {fileID: 2926919861074291319}
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: 3593162250881824095}
m_Father: {fileID: 4049409936139067614}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 30, y: 0}
m_SizeDelta: {x: -80, y: -20}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7352611464118288529
--- !u!222 &5002903848154041985
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 863241678155818087}
m_GameObject: {fileID: 2926919861074291319}
m_CullTransparentMesh: 1
--- !u!114 &6525185158827299480
--- !u!114 &8784912040634948744
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 863241678155818087}
m_GameObject: {fileID: 2926919861074291319}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
@ -151,7 +151,7 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &2042341913076254273
--- !u!1 &4356970860310983761
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -159,100 +159,9 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3593162250881824095}
- component: {fileID: 147216456297264600}
- component: {fileID: 2082899758899392773}
- component: {fileID: 6925077585244404785}
m_Layer: 5
m_Name: ExpBar
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3593162250881824095
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2042341913076254273}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 6203366101496334589}
- {fileID: 4399971679552303507}
- {fileID: 1340310372456599764}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: 0, y: 40}
m_SizeDelta: {x: -80, y: 40}
m_Pivot: {x: 0.5, y: 0}
--- !u!222 &147216456297264600
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2042341913076254273}
m_CullTransparentMesh: 1
--- !u!114 &2082899758899392773
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2042341913076254273}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 0.54901963}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &6925077585244404785
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2042341913076254273}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 45d0d2b1a5ea9453bb04907219f9d854, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::ExpBar
--- !u!1 &2239215118888221249
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 826302246741294294}
- component: {fileID: 8348373391610579798}
- component: {fileID: 930435567296964351}
- component: {fileID: 2887869641152754374}
- component: {fileID: 5818434108796290374}
- component: {fileID: 3426616548914866415}
m_Layer: 5
m_Name: Lv_Text
m_TagString: Untagged
@ -260,40 +169,40 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &826302246741294294
--- !u!224 &2887869641152754374
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2239215118888221249}
m_GameObject: {fileID: 4356970860310983761}
m_LocalRotation: {x: 0, y: 0, z: -0.38268343, w: 0.92387956}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 3572295776350739363}
m_Father: {fileID: 1366565084877804979}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: -45}
m_AnchorMin: {x: 0, y: 0.5}
m_AnchorMax: {x: 0, y: 0.5}
m_AnchoredPosition: {x: 25, y: 0}
m_SizeDelta: {x: 50, y: 50}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8348373391610579798
--- !u!222 &5818434108796290374
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2239215118888221249}
m_GameObject: {fileID: 4356970860310983761}
m_CullTransparentMesh: 1
--- !u!114 &930435567296964351
--- !u!114 &3426616548914866415
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2239215118888221249}
m_GameObject: {fileID: 4356970860310983761}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
@ -378,7 +287,7 @@ MonoBehaviour:
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &4780834605125018357
--- !u!1 &4554124963603875921
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -386,9 +295,163 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1340310372456599764}
- component: {fileID: 3615331207690971310}
- component: {fileID: 4963624523132789964}
- component: {fileID: 1349146564529175375}
- component: {fileID: 2409249015060560840}
- component: {fileID: 4576688473781944085}
- component: {fileID: 4863477476067078689}
m_Layer: 5
m_Name: ExpBar
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1349146564529175375
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4554124963603875921}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3335349825557693986}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: 0, y: 40}
m_SizeDelta: {x: -80, y: 40}
m_Pivot: {x: 0.5, y: 0}
--- !u!222 &2409249015060560840
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4554124963603875921}
m_CullTransparentMesh: 1
--- !u!114 &4576688473781944085
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4554124963603875921}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 0.54901963}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &4863477476067078689
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4554124963603875921}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 45d0d2b1a5ea9453bb04907219f9d854, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::ExpBar
--- !u!1 &5572417284712269658
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3335349825557693986}
- component: {fileID: 5378962067731340755}
m_Layer: 5
m_Name: Stack
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3335349825557693986
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5572417284712269658}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3602288774921871044}
- {fileID: 4049409936139067614}
m_Father: {fileID: 1349146564529175375}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &5378962067731340755
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5572417284712269658}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.HorizontalLayoutGroup
m_Padding:
m_Left: 0
m_Right: 0
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 3
m_Spacing: 0
m_ChildForceExpandWidth: 0
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 1
m_ChildControlHeight: 1
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!1 &7006673165263531237
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3602288774921871044}
- component: {fileID: 1245358773147117246}
- component: {fileID: 7459664762950593244}
- component: {fileID: 95849339312536157}
m_Layer: 5
m_Name: Lv_Icon
m_TagString: Untagged
@ -396,41 +459,41 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1340310372456599764
--- !u!224 &3602288774921871044
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4780834605125018357}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_GameObject: {fileID: 7006673165263531237}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3572295776350739363}
m_Father: {fileID: 3593162250881824095}
- {fileID: 1366565084877804979}
m_Father: {fileID: 3335349825557693986}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0.5}
m_AnchorMax: {x: 0, y: 0.5}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 50, y: 50}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0.5}
--- !u!222 &3615331207690971310
--- !u!222 &1245358773147117246
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4780834605125018357}
m_GameObject: {fileID: 7006673165263531237}
m_CullTransparentMesh: 1
--- !u!114 &4963624523132789964
--- !u!114 &7459664762950593244
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4780834605125018357}
m_GameObject: {fileID: 7006673165263531237}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
@ -454,7 +517,27 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &6738646015388748484
--- !u!114 &95849339312536157
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7006673165263531237}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.LayoutElement
m_IgnoreLayout: 0
m_MinWidth: -1
m_MinHeight: -1
m_PreferredWidth: 100
m_PreferredHeight: -1
m_FlexibleWidth: -1
m_FlexibleHeight: -1
m_LayoutPriority: 1
--- !u!1 &8163182393171047248
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -462,9 +545,67 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4399971679552303507}
- component: {fileID: 5463595698359086019}
- component: {fileID: 6841168128043689614}
- component: {fileID: 4049409936139067614}
- component: {fileID: 7897516209225603021}
m_Layer: 5
m_Name: ImageStack
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4049409936139067614
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8163182393171047248}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 8462988529716676333}
- {fileID: 2192001012308000643}
m_Father: {fileID: 3335349825557693986}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0.5}
--- !u!114 &7897516209225603021
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8163182393171047248}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.LayoutElement
m_IgnoreLayout: 0
m_MinWidth: -1
m_MinHeight: -1
m_PreferredWidth: -1
m_PreferredHeight: -1
m_FlexibleWidth: 1
m_FlexibleHeight: -1
m_LayoutPriority: 1
--- !u!1 &9142344050337989844
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2192001012308000643}
- component: {fileID: 7545443590116206035}
- component: {fileID: 9049118729200265374}
m_Layer: 5
m_Name: ValueBar
m_TagString: Untagged
@ -472,40 +613,40 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4399971679552303507
--- !u!224 &2192001012308000643
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6738646015388748484}
m_GameObject: {fileID: 9142344050337989844}
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: 3593162250881824095}
m_Father: {fileID: 4049409936139067614}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 30, y: 0}
m_SizeDelta: {x: -80, y: -20}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &5463595698359086019
--- !u!222 &7545443590116206035
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6738646015388748484}
m_GameObject: {fileID: 9142344050337989844}
m_CullTransparentMesh: 1
--- !u!114 &6841168128043689614
--- !u!114 &9049118729200265374
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6738646015388748484}
m_GameObject: {fileID: 9142344050337989844}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}

View File

@ -36,7 +36,7 @@ public partial class PlayerController : MonoBehaviour, IDamageable
#endregion
// 이벤트
public event Action<int, float, float> OnExpChanged;
public event Action<string, float, float> OnExpChanged;
// 상태 정보
@ -109,6 +109,8 @@ public partial class PlayerController : MonoBehaviour, IDamageable
// EquipWeapon(_shieldSocket, "Prefabs/Equipment/Shield");
SubscribeAction();
}
void SubscribeAction()
@ -117,9 +119,11 @@ public partial class PlayerController : MonoBehaviour, IDamageable
Manager.Input.MoveAction += OnMove;
Manager.Input.RegisterAction("Button_Attack", OnAttack);
_magnet.OnGetExp -= OnGetExp;
_magnet.OnGetExp += OnGetExp;
SetEXPBar();
}
// 애니메이터 세팅 (지금은 한 줄 뿐이지만 후에 더 추가될 수도)
@ -309,10 +313,21 @@ public partial class PlayerController : MonoBehaviour, IDamageable
if (_status != null)
{
_status.ApplyExp(amount);
OnExpChanged?.Invoke(_status.Level ,_status.Exp, _status.MaxExp);
SetEXPBar();
Debug.Log($"Player Exp: {amount} / {_status.Exp}");
}
}
private void SetEXPBar()
{
EventBus.Raise(new PlayerExpEvent
{
Level = _status.Level.ToString(),
CurrentExp = _status.Exp,
MaxExp = _status.MaxExp
});
}
#endregion

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: aa772244b3181411bae9458cc0378c54
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
public class EventBus
{
private static Dictionary<Type, Delegate> s_event = new();
public static void Subscribe<T>(Action<T> listener)
{
Type eventType = typeof(T);
if (s_event.TryGetValue(eventType, out var exisitingDelegate))
{
s_event[eventType] = Delegate.Combine(exisitingDelegate, listener);
}
else
{
s_event[eventType] = listener;
}
}
public static void Unsubscribe<T>(Action<T> listener)
{
Type eventType = typeof(T);
if (s_event.TryGetValue(eventType, out var existingDelegate))
{
var newDelegate = Delegate.Remove(existingDelegate, listener);
if (newDelegate == null)
{
s_event.Remove(eventType);
}
else
{
s_event[eventType] = newDelegate;
}
}
}
public static void Raise<T>(T eventArgs)
{
if (s_event.TryGetValue(typeof(T), out var exisingDelegate))
{
(exisingDelegate as Action<T>)?.Invoke(eventArgs);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ca004378d725f48618d0b21a682f77db

View File

@ -0,0 +1,10 @@
using UnityEngine;
//PlayerEvents
public struct PlayerExpEvent
{
public string Level;
public float CurrentExp;
public float MaxExp;
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 635604a76b8f84527903793a07ec01df

View File

@ -6,20 +6,20 @@ using UnityEngine.InputSystem;
public class InputManager: IManager
{
private InputActions _action;
private Dictionary<string, Action> _registeredActions = new Dictionary<string, Action>();
public Joystick JoyStick { get; set; }
// 화면 터치를 어떻게 받아올건지에 대한 액션
public Action<Define.InputEvent> InputAction = null;
// 화면의 터치하는 실시간 좌표를 사용하는 기능을 위한 액션
public Action<Vector2> PointAction = null;
// 조이스틱의 이동을 담당하는 액션
public Action<Vector2> MoveAction = null;
private InputActions _action;
public Joystick JoyStick { get; set; }
private Dictionary<string, Action> _registeredActions = new Dictionary<string, Action>();
bool _pressed = false;
float _pressedTime = 0.0f;
public void Init()
{
_action = new InputActions();
@ -102,11 +102,15 @@ public class InputManager: IManager
if (_registeredActions.ContainsKey(name)) _registeredActions[name] -= action;
}
//MARK: ACTION INVOKE
public void OnClicked(string name)
{
if(_registeredActions.TryGetValue(name, out Action action)) action?.Invoke();
}
//MARK: CLEAR
public void Clear()
{
_action.Dispose();

View File

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using JetBrains.Annotations;
using UnityEngine;
@ -24,6 +25,9 @@ public class UIManager : IManager
private readonly Dictionary<string, GameObject> _objects = new ();
private readonly Dictionary<string, GameObject> _instances = new();
private readonly Dictionary<string, bool> _switchObjects = new ();
private Dictionary<string, Action<string, float, float>> _registeredBarActions = new ();
public void Init()
{
@ -74,21 +78,18 @@ public class UIManager : IManager
#region UI Object
#region ExpBar
public void ExclusiveExpBar()
#region Bar
public void SubscribeToBarAction(string name, Action<string, float, float> action)
{
PlayerController player = GameObject.FindObjectOfType<PlayerController>();
if (player != null)
{
player.OnExpChanged -= UpdateExpBar;
player.OnExpChanged += UpdateExpBar;
}
if (!_registeredBarActions.ContainsKey(name)) _registeredBarActions[name] = null;
_registeredBarActions[name] -= action;
_registeredBarActions[name] += action;
}
private void UpdateExpBar(int level, float currentExp, float maxExp)
public Action<string, float, float> GetBarAction(string name)
{
ExpBar expBar = _instances["ExpBar"].GetComponent<ExpBar>();
expBar.UpdateValue(level, currentExp, maxExp);
_registeredBarActions.TryGetValue(name, out var action);
return action;
}
#endregion

View File

@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
public class GameScene : BaseScene
@ -8,56 +7,36 @@ public class GameScene : BaseScene
protected override void Init()
{
base.Init();
_sceneType = Define.Scene.Game;
Manager.UI.UIList = new List<string> { "ExpBar" , "JoyStick", "Button_Attack", "Button_Defence"};
// var onList = new[] { "ExpBar" , "JoyStick", "Button_Attack", "Button_Defence"};
Manager.UI.SwitchOnObject<ExpBar>("ExpBar", true);
Manager.UI.UIList = new List<string> { "ExpBar" , "JoyStick", "Button_Attack", "Button_Defence"};
// Manager.UI.SwitchOnObject<ExpBar>("ExpBar", true);
Manager.UI.SwitchOnObject<Joystick>("JoyStick", true);
UIButton atkbtn = Manager.UI.SwitchOnObject<UIButton>("Button_Attack", true);
if (atkbtn != null)
{
atkbtn.SetButtonContents(null,"공", false, true);
atkbtn.SetButtonRect("Button_Attack", new Vector2(50, 150));
atkbtn.OnButtonClicked += Manager.Input.OnClicked;
}
UIButton defbtn = Manager.UI.SwitchOnObject<UIButton>("Button_Defence", true);
if (defbtn != null)
{
defbtn.SetButtonContents(null,"방", false, true);
defbtn.SetButtonRect(
"Button_Defence",
atkbtn.SetButtonRect("Button_Attack",
new Vector2(-100f - 180f / 2, 100f + 180f / 2),
180.0f,180.0f,
new Vector2(1, 0),
new Vector2(0.5f, 0.5f)
);
// defbtn.Bind(() => Debug.Log("Defence Button Clicked"));
);
atkbtn.OnButtonClicked += Manager.Input.OnClicked;
}
Manager.UI.ExclusiveExpBar();
CreateSpawner();
}
void CreateJoyStick()
{
// GameObject joystick = Manager.Resource.Instantiate("Prefabs/UI/VirtualJoyStick", GameObject.Find("@Canvas").transform);
// joystick.AddComponent<VirtualJoystick>();
}
void CreateButtons()
{
Button_Action buttons = _canvas.AddComponent<Button_Action>();
UIBar expBar = Manager.UI.SwitchOnObject<UIBar>("ExpBar", true);
if (expBar != null)
{
expBar.SwitchObject(true,true);
}
// if (buttons != null)
// {
// buttons.SetSkillButtonEvent(0, () => Debug.Log("Skill 1 Button Clicked"));
// buttons.SetSkillButtonEvent(1, () => Debug.Log("Skill 2 Button Clicked"));
// buttons.SetSkillButtonEvent(2, () => Debug.Log("Skill 3 Button Clicked"));
// // buttons.SetSkillButtonEvent(3, () => Debug.Log("Skill 4 Button Clicked"));
// }
CreateSpawner();
}
void CreateSpawner()
@ -76,9 +55,10 @@ public class GameScene : BaseScene
public override void Clear()
{
}
}

View File

@ -8,10 +8,11 @@ public class ExpBar : MonoBehaviour
private Image _valueBar;
private TMPro.TextMeshProUGUI _levelText;
private void Awake()
{
_valueBar = transform.Find("ValueBar").GetComponent<Image>();
_levelText = transform.Find("Lv_Icon/Lv_BackGround/Lv_Text").GetComponent<TextMeshProUGUI>();
_valueBar = transform.Find("Stack/ImageStack/ValueBar").GetComponent<Image>();
_levelText = transform.Find("Stack/Lv_Icon/Lv_BackGround/Lv_Text").GetComponent<TextMeshProUGUI>();
RectTransform fillRect = _valueBar.rectTransform;
fillRect.anchorMax = new Vector2(0, 1);

149
Assets/Scripts/UI/UIBar.cs Normal file
View File

@ -0,0 +1,149 @@
using System;
using UnityEngine;
using UnityEngine.UI;
public class UIBar : MonoBehaviour
{
[SerializeField] private BarType _type;
private GameObject _icon;
private Image _valueBar;
private GameObject _barText;
private TMPro.TextMeshProUGUI _currentText;//= _barText.transform.Find("CurrentText").GetComponent<TMPro.TextMeshProUGUI>();
private TMPro.TextMeshProUGUI _maxText;// = _barText.transform.Find("MaxText").GetComponent<TMPro.TextMeshProUGUI>();
private TMPro.TextMeshProUGUI _iconText;
private bool _onIcon;
public bool OnIcon
{
get => _onIcon;
set
{
_onIcon = value;
if (_icon != null)
_icon.SetActive(_onIcon);
}
}
private bool _onText;
public bool OnText
{
get => _onText;
set
{
_onText = value;
if (_barText != null)
_barText.SetActive(_onText);
}
}
private Action<string, float, float> _onUpdateAction;
enum BarType
{
Exp,
Health,
Mana,
Stamina
}
private void Awake()
{
_valueBar = transform.Find("Stack/ImageStack/ValueBar").GetComponent<Image>();
_icon = transform.Find("Stack/Icon").gameObject;
if (_icon != null)
_iconText = _icon.transform.Find("BackGround/Text").GetComponent<TMPro.TextMeshProUGUI>();
_barText = transform.Find("BarText").gameObject;
if (_barText != null)
{
_currentText = _barText.transform.Find("CurrentText").GetComponent<TMPro.TextMeshProUGUI>();
_maxText = _barText.transform.Find("MaxText").GetComponent<TMPro.TextMeshProUGUI>();
}
RectTransform fillRect = _valueBar.rectTransform;
fillRect.anchorMax = new Vector2(0, 1);
}
private void OnEnable()
{
switch (_type)
{
case BarType.Exp:
EventBus.Subscribe<PlayerExpEvent>(OnExpChanged);
break;
case BarType.Health:
break;
case BarType.Mana:
break;
case BarType.Stamina:
break;
}
}
private void OnDisable()
{
switch (_type)
{
case BarType.Exp:
EventBus.Unsubscribe<PlayerExpEvent>(OnExpChanged);
break;
case BarType.Health:
break;
case BarType.Mana:
break;
case BarType.Stamina:
break;
}
}
private void OnExpChanged(PlayerExpEvent ev)
{
UpdateIconValue(ev.Level);
UpdateBarState(ev.CurrentExp, ev.MaxExp);
}
public void SwitchObject(bool onIcon, bool onText)
{
OnIcon = onIcon;
OnText = onText;
}
public void ChangeBar()
{
// 추후 바 타입에 따른 아이콘 및 색상 변경 구현
}
private void UpdateIconValue(string value)
{
if (_icon == null) return;
if (OnIcon) _iconText.text = value;
}
private void UpdateBarState(float current, float max)
{
if (_valueBar == null) return;
if (OnText)
{
if (_currentText != null) _currentText.text = ((int)current).ToString();
if (_maxText != null) _maxText.text = ((int)max).ToString();
}
float ratio = (max > 0) ? current / max : 0f;
RectTransform fillRect = _valueBar.rectTransform;
fillRect.anchorMax = new Vector2(ratio, 1);
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: bafb0a552d3a0462db4149824a87bb91

View File

@ -8,7 +8,8 @@ public class Define
{"JoyStick", "Prefabs/UI/JoyStick"},
{"Button_Attack", "Prefabs/UI/Button"},
{"Button_Defence", "Prefabs/UI/Button"},
{"ExpBar", "Prefabs/UI/ExpBar"}
// {"ExpBar", "Prefabs/UI/ExpBar"}
{"ExpBar", "Prefabs/UI/Bar"}
};
public static string MapPath(string name) => PathtoObject.TryGetValue(name, out string path) ? path : string.Empty;