콜라이더 충돌 시 npc 대사 출력 기능 구현 및 HP 바 기능 구현

This commit is contained in:
김민구
2026-07-08 03:50:56 +09:00
parent b160214799
commit 8f742e50d9
5 changed files with 412 additions and 373 deletions
+255 -349
View File
@@ -5504,81 +5504,6 @@ SpriteRenderer:
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_SpriteSortPoint: 0
--- !u!1 &86944692
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 86944693}
- component: {fileID: 86944695}
- component: {fileID: 86944694}
m_Layer: 5
m_Name: character image
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &86944693
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 86944692}
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: 1272925679}
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: -856, y: 426}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &86944694
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 86944692}
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: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: -7008412969330441016, guid: 11847ea73c2247f59726cec7bc5df54d, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &86944695
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 86944692}
m_CullTransparentMesh: 1
--- !u!1 &99269186
GameObject:
m_ObjectHideFlags: 0
@@ -5761,6 +5686,97 @@ SpriteRenderer:
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_SpriteSortPoint: 0
--- !u!1 &191178217 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 4271095123032851471, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
m_PrefabInstance: {fileID: 1508875807}
m_PrefabAsset: {fileID: 0}
--- !u!4 &191178220 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 7292480394622131018, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
m_PrefabInstance: {fileID: 1508875807}
m_PrefabAsset: {fileID: 0}
--- !u!114 &191178221
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 191178217}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9ba0864ae82c04db9a0ab083a089a388, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Player
speed: 10
hp: 5
maxHp: 0
nameText: {fileID: 1956642957}
hpImage: {fileID: 346952739}
--- !u!70 &191178222
CapsuleCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 191178217}
m_Enabled: 1
serializedVersion: 3
m_Density: 1
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_ForceSendLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ForceReceiveLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ContactCaptureLayers:
serializedVersion: 2
m_Bits: 4294967295
m_CallbackLayers:
serializedVersion: 2
m_Bits: 4294967295
m_IsTrigger: 0
m_UsedByEffector: 0
m_CompositeOperation: 0
m_CompositeOrder: 0
m_Offset: {x: 0, y: 0.4}
m_Size: {x: 0.5, y: 1}
m_Direction: 0
--- !u!50 &191178223
Rigidbody2D:
serializedVersion: 5
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 191178217}
m_BodyType: 0
m_Simulated: 1
m_UseFullKinematicContacts: 0
m_UseAutoMass: 0
m_Mass: 1
m_LinearDamping: 0
m_AngularDamping: 0.05
m_GravityScale: 1
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_Interpolate: 0
m_SleepingMode: 1
m_CollisionDetection: 0
m_Constraints: 4
--- !u!1 &217758544
GameObject:
m_ObjectHideFlags: 0
@@ -5886,7 +5902,7 @@ RectTransform:
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: -441, y: 17}
m_AnchoredPosition: {x: -441, y: 82}
m_SizeDelta: {x: 200, y: 52.5977}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &277917253
@@ -5909,8 +5925,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: "\uC874\uB098 \uC388 \uD654\uC0B4\uC774 \uB0A0\uC544\uAC14\uB2E4 \n\uD6A8\uACFC\uB294
\uBCC4\uB85C \uC600\uB2E4 "
m_text:
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: ed494d8deb7a7455f8affd65d9a92eef, type: 2}
m_sharedMaterial: {fileID: -5035255238556258946, guid: ed494d8deb7a7455f8affd65d9a92eef, type: 2}
@@ -6418,6 +6433,17 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 333509992}
m_CullTransparentMesh: 1
--- !u!114 &346952739 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 911507061901746167, guid: 6c5f439021e347c4f87cc1c7168e955b, type: 3}
m_PrefabInstance: {fileID: 1069743453}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
--- !u!1 &355728815
GameObject:
m_ObjectHideFlags: 0
@@ -6509,81 +6535,6 @@ SpriteRenderer:
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_SpriteSortPoint: 0
--- !u!1 &388149661
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 388149662}
- component: {fileID: 388149664}
- component: {fileID: 388149663}
m_Layer: 5
m_Name: red potion
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &388149662
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 388149661}
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: 533743264}
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: 1.2, y: 0.3}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &388149663
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 388149661}
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: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 366320403, guid: b631ed305dfd43c488e0f8edf5c829bc, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &388149664
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 388149661}
m_CullTransparentMesh: 1
--- !u!1 &403148640
GameObject:
m_ObjectHideFlags: 0
@@ -7014,6 +6965,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 54bd8c582d74a4acb98b5079c1388930, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::NPCDialogueManager
dialoguePanel: {fileID: 918898577}
dialogueText: {fileID: 277917253}
--- !u!4 &483117571
Transform:
m_ObjectHideFlags: 0
@@ -7104,179 +7057,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 528009863}
m_CullTransparentMesh: 1
--- !u!1 &533743263
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 533743264}
- component: {fileID: 533743266}
- component: {fileID: 533743265}
m_Layer: 5
m_Name: item 1
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &533743264
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 533743263}
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: 388149662}
m_Father: {fileID: 1673720196}
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: 741.0167, y: -336.75}
m_SizeDelta: {x: 198.0335, y: 198.91}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &533743265
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 533743263}
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: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: c1b81e5167669c94198b99eef24b3248, type: 3}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &533743266
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 533743263}
m_CullTransparentMesh: 1
--- !u!1001 &550804656
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_Pivot.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_AnchorMax.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_AnchorMin.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_LocalPosition.z
value: 0.01
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_LocalRotation.w
value: 0.9999619
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_LocalRotation.y
value: 0.008726557
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_AnchoredPosition.x
value: 7.02
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_AnchoredPosition.y
value: -6.27
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1933624400963804055, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7127064250040410633, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
propertyPath: m_Name
value: SPUM_20240911215638897
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 74081d2c7552d4c17953e46326368c4b, type: 3}
--- !u!1 &598420362
GameObject:
m_ObjectHideFlags: 0
@@ -7380,6 +7160,10 @@ PrefabInstance:
propertyPath: m_Name
value: Player
objectReference: {fileID: 0}
- target: {fileID: 103380811750077614, guid: dc4d03e9834464d82a1dec0da2b8162f, type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1678357970384765028, guid: dc4d03e9834464d82a1dec0da2b8162f, type: 3}
propertyPath: m_Pivot.x
value: 0.5
@@ -31361,8 +31145,8 @@ RectTransform:
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: -209, y: -343}
m_SizeDelta: {x: 1300, y: 200}
m_AnchoredPosition: {x: 42, y: -379.13446}
m_SizeDelta: {x: 1300, y: 272.2689}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &918898579
MonoBehaviour:
@@ -32898,7 +32682,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 3024787883409964218, guid: 6c5f439021e347c4f87cc1c7168e955b, type: 3}
propertyPath: m_AnchoredPosition.x
value: -543.2
value: -696.785
objectReference: {fileID: 0}
- target: {fileID: 3024787883409964218, guid: 6c5f439021e347c4f87cc1c7168e955b, type: 3}
propertyPath: m_AnchoredPosition.y
@@ -32920,6 +32704,18 @@ PrefabInstance:
propertyPath: m_Name
value: hp bar background
objectReference: {fileID: 0}
- target: {fileID: 8538378379228196241, guid: 6c5f439021e347c4f87cc1c7168e955b, type: 3}
propertyPath: m_Pivot.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8538378379228196241, guid: 6c5f439021e347c4f87cc1c7168e955b, type: 3}
propertyPath: m_AnchoredPosition.x
value: -235.55505
objectReference: {fileID: 0}
- target: {fileID: 8538378379228196241, guid: 6c5f439021e347c4f87cc1c7168e955b, type: 3}
propertyPath: m_AnchoredPosition.y
value: 1.4999695
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
@@ -33044,7 +32840,6 @@ RectTransform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 86944693}
- {fileID: 1423968692}
- {fileID: 1576167847}
- {fileID: 918898578}
@@ -33280,7 +33075,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 0f5826fa719de4292b2757cb205ae1d3, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::CameraFollow
target: {fileID: 1652185988}
target: {fileID: 191178220}
smoothSpeed: 0.125
offset: {x: 0, y: 3.51, z: -10}
--- !u!1 &1387072180
@@ -42848,7 +42643,7 @@ PrefabInstance:
m_Modifications:
- target: {fileID: 5510382206488389914, guid: a77f2796fd776459c9b84d0b63c90e3a, type: 3}
propertyPath: m_Name
value: SPUM_20240911215639234
value: NPC
objectReference: {fileID: 0}
- target: {fileID: 7448375094655010986, guid: a77f2796fd776459c9b84d0b63c90e3a, type: 3}
propertyPath: m_Pivot.x
@@ -42949,7 +42744,13 @@ PrefabInstance:
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 7140148431914824187, guid: a77f2796fd776459c9b84d0b63c90e3a, type: 3}
insertIndex: -1
addedObject: {fileID: 1616863609}
- targetCorrespondingSourceObject: {fileID: 7140148431914824187, guid: a77f2796fd776459c9b84d0b63c90e3a, type: 3}
insertIndex: -1
addedObject: {fileID: 1616863608}
m_SourcePrefab: {fileID: 100100000, guid: a77f2796fd776459c9b84d0b63c90e3a, type: 3}
--- !u!224 &1423968692 stripped
RectTransform:
@@ -43075,6 +42876,18 @@ PrefabInstance:
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
propertyPath: m_LocalScale.x
value: 5
objectReference: {fileID: 0}
- target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
propertyPath: m_LocalScale.y
value: 5
objectReference: {fileID: 0}
- target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
propertyPath: m_LocalScale.z
value: 5
objectReference: {fileID: 0}
- target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
propertyPath: m_LocalPosition.x
value: 0
@@ -43085,7 +42898,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
propertyPath: m_LocalPosition.z
value: 0.11
value: 0.09
objectReference: {fileID: 0}
- target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
propertyPath: m_LocalRotation.w
@@ -43105,11 +42918,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
propertyPath: m_AnchoredPosition.x
value: 4.71
value: 5.69
objectReference: {fileID: 0}
- target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
propertyPath: m_AnchoredPosition.y
value: -6.33
value: -12.18
objectReference: {fileID: 0}
- target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
@@ -43123,14 +42936,27 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
propertyPath: m_ConstrainProportionsScale
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5836857197505123814, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
propertyPath: m_Name
value: SPUM_20240911215638389
value: Player
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 4271095123032851471, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
insertIndex: -1
addedObject: {fileID: 191178223}
- targetCorrespondingSourceObject: {fileID: 4271095123032851471, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
insertIndex: -1
addedObject: {fileID: 191178222}
- targetCorrespondingSourceObject: {fileID: 4271095123032851471, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
insertIndex: -1
addedObject: {fileID: 191178221}
m_SourcePrefab: {fileID: 100100000, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3}
--- !u!1 &1526470221
GameObject:
@@ -43228,16 +43054,64 @@ RectTransform:
m_CorrespondingSourceObject: {fileID: 3024787883409964218, guid: 6c5f439021e347c4f87cc1c7168e955b, type: 3}
m_PrefabInstance: {fileID: 1069743453}
m_PrefabAsset: {fileID: 0}
--- !u!1 &1616863604 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 7140148431914824187, guid: a77f2796fd776459c9b84d0b63c90e3a, type: 3}
m_PrefabInstance: {fileID: 1411466694}
m_PrefabAsset: {fileID: 0}
--- !u!114 &1616863608
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1616863604}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 531f5ebc513124b65ab6db8bdff1d091, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::NPCInteraction
--- !u!58 &1616863609
CircleCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1616863604}
m_Enabled: 1
serializedVersion: 3
m_Density: 1
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_ForceSendLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ForceReceiveLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ContactCaptureLayers:
serializedVersion: 2
m_Bits: 4294967295
m_CallbackLayers:
serializedVersion: 2
m_Bits: 4294967295
m_IsTrigger: 0
m_UsedByEffector: 0
m_CompositeOperation: 0
m_CompositeOrder: 0
m_Offset: {x: 0, y: 0}
m_Radius: 1.52
--- !u!1 &1652185985 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 7794539611526692987, guid: dc4d03e9834464d82a1dec0da2b8162f, type: 3}
m_PrefabInstance: {fileID: 598913983}
m_PrefabAsset: {fileID: 0}
--- !u!4 &1652185988 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 2817907951003579237, guid: dc4d03e9834464d82a1dec0da2b8162f, type: 3}
m_PrefabInstance: {fileID: 598913983}
m_PrefabAsset: {fileID: 0}
--- !u!70 &1652185990
CapsuleCollider2D:
m_ObjectHideFlags: 0
@@ -43316,6 +43190,9 @@ MonoBehaviour:
m_EditorClassIdentifier: Assembly-CSharp::Player
speed: 10
hp: 5
maxHp: 0
nameText: {fileID: 0}
hpImage: {fileID: 0}
--- !u!1 &1673720192
GameObject:
m_ObjectHideFlags: 0
@@ -43412,7 +43289,6 @@ RectTransform:
m_Children:
- {fileID: 1272925679}
- {fileID: 333509993}
- {fileID: 533743264}
- {fileID: 1322739251}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -59592,6 +59468,17 @@ Transform:
- {fileID: 217758545}
m_Father: {fileID: 1339280145}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1956642957 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 7888741024357894282, guid: 390aaa741d870044191b55f300c047a5, type: 3}
m_PrefabInstance: {fileID: 2053466365}
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: Unity.TextMeshPro::TMPro.TextMeshProUGUI
--- !u!1001 &2053466365
PrefabInstance:
m_ObjectHideFlags: 0
@@ -59630,11 +59517,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 3800788831750671515, guid: 390aaa741d870044191b55f300c047a5, type: 3}
propertyPath: m_SizeDelta.x
value: 200
value: 332.97
objectReference: {fileID: 0}
- target: {fileID: 3800788831750671515, guid: 390aaa741d870044191b55f300c047a5, type: 3}
propertyPath: m_SizeDelta.y
value: 50
value: 43.3515
objectReference: {fileID: 0}
- target: {fileID: 3800788831750671515, guid: 390aaa741d870044191b55f300c047a5, type: 3}
propertyPath: m_LocalPosition.x
@@ -59666,11 +59553,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 3800788831750671515, guid: 390aaa741d870044191b55f300c047a5, type: 3}
propertyPath: m_AnchoredPosition.x
value: -652.9
value: -740
objectReference: {fileID: 0}
- target: {fileID: 3800788831750671515, guid: 390aaa741d870044191b55f300c047a5, type: 3}
propertyPath: m_AnchoredPosition.y
value: 448.1
value: 451.42422
objectReference: {fileID: 0}
- target: {fileID: 3800788831750671515, guid: 390aaa741d870044191b55f300c047a5, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
@@ -59684,6 +59571,26 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6930191336606030810, guid: 390aaa741d870044191b55f300c047a5, type: 3}
propertyPath: m_LocalScale.x
value: 1.0088
objectReference: {fileID: 0}
- target: {fileID: 6930191336606030810, guid: 390aaa741d870044191b55f300c047a5, type: 3}
propertyPath: m_LocalScale.y
value: 1.0088
objectReference: {fileID: 0}
- target: {fileID: 6930191336606030810, guid: 390aaa741d870044191b55f300c047a5, type: 3}
propertyPath: m_LocalScale.z
value: 1.0088
objectReference: {fileID: 0}
- target: {fileID: 6930191336606030810, guid: 390aaa741d870044191b55f300c047a5, type: 3}
propertyPath: m_AnchoredPosition.x
value: 11.2
objectReference: {fileID: 0}
- target: {fileID: 6930191336606030810, guid: 390aaa741d870044191b55f300c047a5, type: 3}
propertyPath: m_AnchoredPosition.y
value: 2.4
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
@@ -59844,6 +59751,5 @@ SceneRoots:
- {fileID: 863066236}
- {fileID: 1461597120}
- {fileID: 1508875807}
- {fileID: 550804656}
- {fileID: 1411466694}
- {fileID: 1673720196}
@@ -4,9 +4,29 @@ using UnityEngine.Networking;
public class NPCDialogueManager : MonoBehaviour
{
[Header("UI 연결")]
public GameObject dialoguePanel; // 대화창 배경 패널
public TMPro.TextMeshProUGUI dialogueText; // 대사 텍스트 TMP 컴포넌트
private string lastDialogueText = "대화 버튼을 눌러 조언을 얻으세요.";
private string targetDialogueText = ""; // 목표 대사 텍스트
private Coroutine typingCoroutine; // 타이핑 코루틴 제어용
private string targetDialogueText = ""; // 목표 대사 텍스트
private Coroutine typingCoroutine; // 타이핑 코루틴 제어용
// JSON 파싱용 Dialogue 응답 매핑 클래스 (스코프 오류 방지를 위해 내부 클래스로 내장)
[System.Serializable]
public class DialogueResponse
{
public string dialogue;
}
private void Start()
{
// 시작 시 대화 패널을 비활성화해 둡니다.
if (dialoguePanel != null)
{
dialoguePanel.SetActive(false);
}
}
// NPC 대화를 요청하는 메서드
public void RequestNPCDialogue(int currentGeneration)
@@ -14,14 +34,39 @@ public class NPCDialogueManager : MonoBehaviour
StartCoroutine(FetchNPCDialogue(currentGeneration));
}
// NPC 영역을 벗어났을 때 대화창을 명시적으로 닫는 메서드
public void CloseDialogue()
{
if (typingCoroutine != null)
{
StopCoroutine(typingCoroutine);
typingCoroutine = null;
}
if (dialoguePanel != null)
{
dialoguePanel.SetActive(false); // 대화 배경 끄기
}
}
private IEnumerator FetchNPCDialogue(int currentGeneration)
{
// 1. 대기 연출: 요청 즉시 로딩중 텍스트를 띄워 렉처럼 보이지 않게 합니다.
// 1. 대화 패널 활성화 및 대기 연출 문구 노출
if (dialoguePanel != null)
{
dialoguePanel.SetActive(true);
}
if (typingCoroutine != null)
{
StopCoroutine(typingCoroutine);
}
lastDialogueText = "늙은 문지기 발두르가 눈을 지그시 감고 네 선조들의 최후를 떠올리는 중입니다...";
if (dialogueText != null)
{
dialogueText.text = lastDialogueText;
}
// FastAPI의 NPC 대화 조회 엔드포인트 URL 구성
string url = $"http://127.0.0.1:8000/api/game/npc-dialogue?current_generation={currentGeneration}";
@@ -36,6 +81,10 @@ public class NPCDialogueManager : MonoBehaviour
{
Debug.LogError($"[Dialogue] NPC 대사 조회 실패: {request.error}");
lastDialogueText = "문지기 발두르가 침묵하고 있습니다. (서버 연결 실패)";
if (dialogueText != null)
{
dialogueText.text = lastDialogueText;
}
}
else
{
@@ -54,6 +103,10 @@ public class NPCDialogueManager : MonoBehaviour
{
Debug.LogError($"[Dialogue] JSON 파싱 에러: {ex.Message}");
lastDialogueText = "문지기의 말을 이해할 수 없습니다. (데이터 파싱 오류)";
if (dialogueText != null)
{
dialogueText.text = lastDialogueText;
}
}
}
}
@@ -63,13 +116,18 @@ public class NPCDialogueManager : MonoBehaviour
private IEnumerator TypeTextEffect(string fullText)
{
lastDialogueText = "";
// 문지기가 고민하면서 한 글자씩 읊조리는 속도 (0.04초 간격)
float letterDelay = 0.04f;
foreach (char letter in fullText.ToCharArray())
{
lastDialogueText += letter;
// 텍스트 UI 컴포넌트 갱신
if (dialogueText != null)
{
dialogueText.text = lastDialogueText;
}
// 쉼표(,)나 마침표(.) 등 문장이 끊기는 지점에서는 살짝 더 더듬는 효과(딜레이 추가) 제공
if (letter == ',' || letter == '.')
{
@@ -83,15 +141,13 @@ public class NPCDialogueManager : MonoBehaviour
typingCoroutine = null;
}
// 디버그용 임시 GUI 버튼 및 대사 출력창
// 디버그용 임시 OnGUI 버튼
private void OnGUI()
{
GUI.backgroundColor = Color.yellow;
// NPC 대화 요청 버튼 (화면 우측 상단 배치)
if (GUI.Button(new Rect(Screen.width - 240, 10, 220, 50), "Debug: Get NPC Dialogue"))
{
// 플레이어 오브젝트를 찾아 현재 세대 값을 가져옵니다.
Player player = FindObjectOfType<Player>();
if (player != null)
{
@@ -103,21 +159,16 @@ public class NPCDialogueManager : MonoBehaviour
}
}
// 대사 출력 박스 배경 및 텍스트 렌더링
GUI.color = Color.white;
GUI.Box(new Rect(Screen.width - 450, 70, 430, 120), "늙은 문지기 '발두르'의 조언");
GUIStyle dialogueStyle = new GUIStyle(GUI.skin.label);
dialogueStyle.wordWrap = true;
dialogueStyle.fontSize = 14;
GUI.Label(new Rect(Screen.width - 440, 95, 410, 90), lastDialogueText, dialogueStyle);
if (dialoguePanel != null && dialoguePanel.activeSelf)
{
GUI.color = Color.white;
GUI.Box(new Rect(Screen.width - 450, 70, 430, 120), "늙은 문지기 '발두르'의 조언 (Debug)");
GUIStyle dialogueStyle = new GUIStyle(GUI.skin.label);
dialogueStyle.wordWrap = true;
dialogueStyle.fontSize = 14;
GUI.Label(new Rect(Screen.width - 440, 95, 410, 90), lastDialogueText, dialogueStyle);
}
}
}
// JSON 파싱용 Dialogue 응답 매핑 클래스
[System.Serializable]
public class DialogueResponse
{
public string dialogue;
}
@@ -0,0 +1,54 @@
using UnityEngine;
[RequireComponent(typeof(Collider2D))] // 감지를 위한 Collider2D(Trigger 설정)가 필수적으로 요구됩니다.
public class NPCInteraction : MonoBehaviour
{
private NPCDialogueManager dialogueManager;
private void Start()
{
// 1. 씬에 배치된 NPCDialogueManager 컴포넌트를 탐색해 바인딩합니다.
dialogueManager = FindObjectOfType<NPCDialogueManager>();
if (dialogueManager == null)
{
Debug.LogError("[NPC] 씬에서 NPCDialogueManager를 찾을 수 없습니다! DialogueManager 오브젝트가 배치되어 있는지 확인하세요.");
}
// 2. 부착된 콜라이더가 트리거(Trigger)로 체크되어 있지 않다면 강제로 설정하여 물리 막힘 현상을 배제합니다.
Collider2D col = GetComponent<Collider2D>();
if (col != null && !col.isTrigger)
{
col.isTrigger = true;
Debug.LogWarning($"[NPC] {gameObject.name}에 부착된 Collider2D의 'Is Trigger' 속성을 자동으로 켰습니다.");
}
}
// 플레이어가 NPC의 감지 반경(Trigger Collider) 내부로 들어왔을 때 실행
private void OnTriggerEnter2D(Collider2D other)
{
// 충돌한 오브젝트가 플레이어인지 검사합니다.
Player player = other.GetComponent<Player>();
if (player != null)
{
if (dialogueManager != null)
{
Debug.Log($"[NPC] 플레이어({player.CharacterName})가 가까이 왔습니다. 세대({player.Generation}대) 조언을 요청합니다.");
dialogueManager.RequestNPCDialogue(player.Generation);
}
}
}
// 플레이어가 NPC의 감지 반경을 벗어났을 때 실행
private void OnTriggerExit2D(Collider2D other)
{
Player player = other.GetComponent<Player>();
if (player != null)
{
if (dialogueManager != null)
{
Debug.Log("[NPC] 플레이어가 멀어졌습니다. 대화창을 닫습니다.");
dialogueManager.CloseDialogue();
}
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 531f5ebc513124b65ab6db8bdff1d091
+27 -1
View File
@@ -1,4 +1,6 @@
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public struct Inputs
{
@@ -29,7 +31,7 @@ public class Player : MonoBehaviour
// 이동 관련 변수
[SerializeField] private float speed = 5f;
[SerializeField] public int hp = 5;
private int maxHp;
[SerializeField] public int maxHp = 5;
private bool isFacingRight = false;
private int currentAnimationState = -1;
@@ -43,6 +45,10 @@ public class Player : MonoBehaviour
public int Generation => generation;
public string CharacterName => characterName;
[Header("UI 연결")]
public TextMeshProUGUI nameText;
public Image hpImage;
private static readonly string[] RANDOM_NAMES = new string[]
{
"자르반", "가렌", "럭스", "다리우스", "야스오", "티모", "아리", "이즈리얼",
@@ -80,6 +86,22 @@ public class Player : MonoBehaviour
private void Update()
{
// 안전 조치: maxHp가 비정상(0 이하)이거나 현재 체력이 초과된 경우 자동 동기화
if (maxHp <= 0 || hp > maxHp)
{
maxHp = hp;
}
if (hpImage != null && maxHp > 0)
{
float fillRatio = Mathf.Clamp01((float)hp / maxHp);
hpImage.fillAmount = fillRatio;
// 이미지 컴포넌트의 타입(Simple, Filled 등)과 상관없이 무조건 가로 크기가 깎이도록
// RectTransform의 로컬 스케일 X축도 비율에 맞춰 실시간으로 동기화합니다.
hpImage.rectTransform.localScale = new Vector3(fillRatio, 1f, 1f);
}
if (hp <= 0)
{
if (animator != null)
@@ -256,6 +278,10 @@ public class Player : MonoBehaviour
// 이름 랜덤 선택 후 세대 접미사 추가 (예: 자르반 3세)
string baseName = RANDOM_NAMES[Random.Range(0, RANDOM_NAMES.Length)];
characterName = $"{baseName} {generation}세";
if (nameText != null)
{
nameText.text = characterName;
}
Debug.Log($"캐릭터 생성 완료! 이름: {characterName}, 세대: {generation}대");
}