From 8f742e50d915249f1ac2ae904742fd2967b02bc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=B5=E1=86=B7=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=80=E1=85=AE?= Date: Wed, 8 Jul 2026 03:50:56 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EC=BD=9C=EB=9D=BC=EC=9D=B4=EB=8D=94=20?= =?UTF-8?q?=EC=B6=A9=EB=8F=8C=20=EC=8B=9C=20npc=20=EB=8C=80=EC=82=AC=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EB=B0=8F=20HP=20=EB=B0=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- unity-client/Assets/Scenes/Lobby.unity | 604 ++++++++---------- .../Assets/Scripts/NPCDialogueManager.cs | 97 ++- unity-client/Assets/Scripts/NPCInteraction.cs | 54 ++ .../Assets/Scripts/NPCInteraction.cs.meta | 2 + unity-client/Assets/Scripts/Player.cs | 28 +- 5 files changed, 412 insertions(+), 373 deletions(-) create mode 100644 unity-client/Assets/Scripts/NPCInteraction.cs create mode 100644 unity-client/Assets/Scripts/NPCInteraction.cs.meta diff --git a/unity-client/Assets/Scenes/Lobby.unity b/unity-client/Assets/Scenes/Lobby.unity index d2b9afc..ea8e2a0 100644 --- a/unity-client/Assets/Scenes/Lobby.unity +++ b/unity-client/Assets/Scenes/Lobby.unity @@ -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} diff --git a/unity-client/Assets/Scripts/NPCDialogueManager.cs b/unity-client/Assets/Scripts/NPCDialogueManager.cs index ebe79ed..5e6bdb3 100644 --- a/unity-client/Assets/Scripts/NPCDialogueManager.cs +++ b/unity-client/Assets/Scripts/NPCDialogueManager.cs @@ -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(); 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; -} diff --git a/unity-client/Assets/Scripts/NPCInteraction.cs b/unity-client/Assets/Scripts/NPCInteraction.cs new file mode 100644 index 0000000..07555fe --- /dev/null +++ b/unity-client/Assets/Scripts/NPCInteraction.cs @@ -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(); + if (dialogueManager == null) + { + Debug.LogError("[NPC] 씬에서 NPCDialogueManager를 찾을 수 없습니다! DialogueManager 오브젝트가 배치되어 있는지 확인하세요."); + } + + // 2. 부착된 콜라이더가 트리거(Trigger)로 체크되어 있지 않다면 강제로 설정하여 물리 막힘 현상을 배제합니다. + Collider2D col = GetComponent(); + 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(); + 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(); + if (player != null) + { + if (dialogueManager != null) + { + Debug.Log("[NPC] 플레이어가 멀어졌습니다. 대화창을 닫습니다."); + dialogueManager.CloseDialogue(); + } + } + } +} diff --git a/unity-client/Assets/Scripts/NPCInteraction.cs.meta b/unity-client/Assets/Scripts/NPCInteraction.cs.meta new file mode 100644 index 0000000..9439772 --- /dev/null +++ b/unity-client/Assets/Scripts/NPCInteraction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 531f5ebc513124b65ab6db8bdff1d091 \ No newline at end of file diff --git a/unity-client/Assets/Scripts/Player.cs b/unity-client/Assets/Scripts/Player.cs index 334f85e..c962572 100644 --- a/unity-client/Assets/Scripts/Player.cs +++ b/unity-client/Assets/Scripts/Player.cs @@ -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}대"); } From 6939015d9e9e926de787d34582246acc5a1e3c26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=80=E1=85=B5=E1=86=B7=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=80=E1=85=AE?= Date: Wed, 8 Jul 2026 04:24:12 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=EC=94=AC=20=EC=A0=84=ED=99=98=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=B0=8F=20=EC=94=AC=EC=9D=B4=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=EB=90=98=EC=96=B4=EB=8F=84=20=ED=94=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=96=B4=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EC=9C=A0=EC=A7=80?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EA=B2=8C=EC=9E=84=20=EB=A7=A4?= =?UTF-8?q?=EB=8B=88=EC=A0=80=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- unity-client/Assets/Scenes/Lobby.unity | 63 ++++ unity-client/Assets/Scenes/battleStage.unity | 284 +++++++++++++++++- unity-client/Assets/Scripts/GameManager.cs | 42 +++ .../Assets/Scripts/GameManager.cs.meta | 2 + unity-client/Assets/Scripts/Player.cs | 36 ++- unity-client/Assets/Scripts/WallTransition.cs | 44 +++ .../Assets/Scripts/WallTransition.cs.meta | 2 + .../ProjectSettings/EditorBuildSettings.asset | 8 +- 8 files changed, 456 insertions(+), 25 deletions(-) create mode 100644 unity-client/Assets/Scripts/GameManager.cs create mode 100644 unity-client/Assets/Scripts/GameManager.cs.meta create mode 100644 unity-client/Assets/Scripts/WallTransition.cs create mode 100644 unity-client/Assets/Scripts/WallTransition.cs.meta diff --git a/unity-client/Assets/Scenes/Lobby.unity b/unity-client/Assets/Scenes/Lobby.unity index ea8e2a0..6050719 100644 --- a/unity-client/Assets/Scenes/Lobby.unity +++ b/unity-client/Assets/Scenes/Lobby.unity @@ -30876,6 +30876,7 @@ GameObject: m_Component: - component: {fileID: 863066236} - component: {fileID: 863066235} + - component: {fileID: 863066237} m_Layer: 0 m_Name: RightBoundary m_TagString: Untagged @@ -30944,6 +30945,19 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &863066237 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 863066234} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0e728dcba3a32418da46f86eb0b8a001, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::WallTransition + targetSceneName: battleStage --- !u!1 &906519488 GameObject: m_ObjectHideFlags: 0 @@ -32721,6 +32735,54 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 6c5f439021e347c4f87cc1c7168e955b, type: 3} +--- !u!1 &1094628443 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1094628445} + - component: {fileID: 1094628444} + m_Layer: 0 + m_Name: GameManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1094628444 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1094628443} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d42f0450bff4242dca327151c2892fb6, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::GameManager + playerName: + playerGeneration: 1 + playerHp: 5 + playerMaxHp: 5 +--- !u!4 &1094628445 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1094628443} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 42.02, y: -5.99325, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1122496745 GameObject: m_ObjectHideFlags: 0 @@ -59753,3 +59815,4 @@ SceneRoots: - {fileID: 1508875807} - {fileID: 1411466694} - {fileID: 1673720196} + - {fileID: 1094628445} diff --git a/unity-client/Assets/Scenes/battleStage.unity b/unity-client/Assets/Scenes/battleStage.unity index b265c3a..c5c83e1 100644 --- a/unity-client/Assets/Scenes/battleStage.unity +++ b/unity-client/Assets/Scenes/battleStage.unity @@ -5250,7 +5250,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 133454280} - m_Enabled: 0 + m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Name: @@ -5263,7 +5263,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_text: Enter text... + m_text: "\uD14D\uC2A4\uD2B8\uB97C \uC785\uB825\uD558\uC5EC \uACF5\uACA9" m_isRightToLeft: 0 m_fontAsset: {fileID: 11400000, guid: ed494d8deb7a7455f8affd65d9a92eef, type: 2} m_sharedMaterial: {fileID: -5035255238556258946, guid: ed494d8deb7a7455f8affd65d9a92eef, type: 2} @@ -5272,8 +5272,8 @@ MonoBehaviour: m_fontMaterials: [] m_fontColor32: serializedVersion: 2 - rgba: 2150773298 - m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + rgba: 2162221292 + m_fontColor: {r: 0.9245283, g: 0.87655747, b: 0.87655747, a: 0.5} m_enableVertexGradient: 0 m_colorMode: 3 m_fontColorGradient: @@ -5286,7 +5286,7 @@ MonoBehaviour: m_tintAllSprites: 0 m_StyleSheet: {fileID: 0} m_TextStyleHashCode: -1183493901 - m_overrideHtmlColors: 0 + m_overrideHtmlColors: 1 m_faceColor: serializedVersion: 2 rgba: 4294967295 @@ -5343,6 +5343,17 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 133454280} m_CullTransparentMesh: 1 +--- !u!114 &144455365 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 911507061901746167, guid: 6c5f439021e347c4f87cc1c7168e955b, type: 3} + m_PrefabInstance: {fileID: 1868975694} + 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!224 &187894583 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 3024787883409964218, guid: 6c5f439021e347c4f87cc1c7168e955b, type: 3} @@ -5522,6 +5533,9 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::PlayerMove speed: 5 hp: 5 + maxHp: 5 + nameText: {fileID: 0} + hpImage: {fileID: 0} --- !u!1 &403148640 GameObject: m_ObjectHideFlags: 0 @@ -5923,6 +5937,128 @@ SpriteRenderer: m_SpriteTileMode: 0 m_WasSpriteAssigned: 1 m_SpriteSortPoint: 0 +--- !u!1001 &529100493 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + 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 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_LocalPosition.z + value: -1.17 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9999619 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_LocalRotation.y + value: 0.008726557 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_AnchoredPosition.x + value: 77.75 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_AnchoredPosition.y + value: -12.18 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3431018974941178782, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + 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: Player + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 4271095123032851471, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + insertIndex: -1 + addedObject: {fileID: 1840371597} + - targetCorrespondingSourceObject: {fileID: 4271095123032851471, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + insertIndex: -1 + addedObject: {fileID: 1840371596} + - targetCorrespondingSourceObject: {fileID: 4271095123032851471, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + insertIndex: -1 + addedObject: {fileID: 1840371595} + m_SourcePrefab: {fileID: 100100000, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} --- !u!1001 &598913983 PrefabInstance: m_ObjectHideFlags: 0 @@ -5935,6 +6071,10 @@ PrefabInstance: propertyPath: m_Name value: SPUM_20240911215638731 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 @@ -7682,16 +7822,17 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 5614311512920842161, guid: 995fb1b7b1d40f54f9494dfbb7dedfe2, type: 3} + propertyPath: m_text + value: + objectReference: {fileID: 0} - target: {fileID: 6653973045493302981, guid: 995fb1b7b1d40f54f9494dfbb7dedfe2, type: 3} propertyPath: m_Name value: server text background objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] - m_AddedGameObjects: - - targetCorrespondingSourceObject: {fileID: 2026665585076868082, guid: 995fb1b7b1d40f54f9494dfbb7dedfe2, type: 3} - insertIndex: -1 - addedObject: {fileID: 1568869829} + m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 995fb1b7b1d40f54f9494dfbb7dedfe2, type: 3} --- !u!1 &976809381 @@ -7830,7 +7971,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_text: "\uD14D\uC2A4\uD2B8\uB97C \uC785\uB825\uD558\uC5EC \uACF5\uACA9\uD558\uC138\uC694\u200B" + m_text: "\u200B" m_isRightToLeft: 0 m_fontAsset: {fileID: 11400000, guid: ed494d8deb7a7455f8affd65d9a92eef, type: 2} m_sharedMaterial: {fileID: -5035255238556258946, guid: ed494d8deb7a7455f8affd65d9a92eef, type: 2} @@ -8117,10 +8258,11 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 875108180} - - {fileID: 600791110} - {fileID: 1184594222} + - {fileID: 600791110} - {fileID: 1925548785} - {fileID: 706593202} + - {fileID: 1568869829} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -18165,7 +18307,7 @@ GameObject: - component: {fileID: 1568869831} - component: {fileID: 1568869830} m_Layer: 5 - m_Name: atteck + m_Name: InputField (TMP) m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -18178,17 +18320,17 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1568869828} - 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: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1475548641} - m_Father: {fileID: 600791110} + m_Father: {fileID: 1183798055} 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: -424.21188, y: 150} + m_AnchoredPosition: {x: -425.2119, y: -259} m_SizeDelta: {x: 451.5754, y: 35.4596} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1568869830 @@ -18277,7 +18419,7 @@ MonoBehaviour: m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} m_CustomCaretColor: 0 m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} - m_Text: "\uD14D\uC2A4\uD2B8\uB97C \uC785\uB825\uD558\uC5EC \uACF5\uACA9\uD558\uC138\uC694" + m_Text: m_CaretBlinkRate: 0.85 m_CaretWidth: 1 m_ReadOnly: 0 @@ -33921,6 +34063,92 @@ Tilemap: e31: 0 e32: 0 e33: 1 +--- !u!1 &1840371593 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 4271095123032851471, guid: c54b36ee7861c4b41bd1dabf2455160f, type: 3} + m_PrefabInstance: {fileID: 529100493} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1840371595 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1840371593} + 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: 1944988752} + hpImage: {fileID: 144455365} +--- !u!70 &1840371596 +CapsuleCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1840371593} + 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 &1840371597 +Rigidbody2D: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1840371593} + 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 &1850795442 GameObject: m_ObjectHideFlags: 0 @@ -34116,6 +34344,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.5000185 + objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] @@ -34202,6 +34442,17 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1925548784} m_CullTransparentMesh: 1 +--- !u!114 &1944988752 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7888741024357894282, guid: 390aaa741d870044191b55f300c047a5, type: 3} + m_PrefabInstance: {fileID: 666486821} + 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!1 &2008007467 GameObject: m_ObjectHideFlags: 0 @@ -34398,3 +34649,4 @@ SceneRoots: - {fileID: 403148642} - {fileID: 1183798055} - {fileID: 976809384} + - {fileID: 529100493} diff --git a/unity-client/Assets/Scripts/GameManager.cs b/unity-client/Assets/Scripts/GameManager.cs new file mode 100644 index 0000000..2d3dedf --- /dev/null +++ b/unity-client/Assets/Scripts/GameManager.cs @@ -0,0 +1,42 @@ +using UnityEngine; + +public class GameManager : MonoBehaviour +{ + // 외부에서 쉽게 접근할 수 있는 싱글톤 인스턴스 + public static GameManager Instance { get; private set; } + + [Header("보존할 플레이어 스탯 데이터")] + public string playerName = ""; + public int playerGeneration = 1; + public int playerHp = 5; + public int playerMaxHp = 5; + + private void Awake() + { + // 중복 생성 방지 및 싱글톤 유지 + if (Instance != null && Instance != this) + { + Destroy(gameObject); + return; + } + + Instance = this; + + // 씬이 전환되어도 이 오브젝트가 파괴되지 않고 유지되도록 설정합니다. + DontDestroyOnLoad(gameObject); + } + + // 플레이어 스탯을 동기적으로 복사하여 세이브하는 메서드 + public void SavePlayerData(Player player) + { + if (player != null) + { + playerName = player.CharacterName; + playerGeneration = player.Generation; + playerHp = player.hp; + playerMaxHp = player.maxHp; + + Debug.Log($"[GameManager] 캐릭터 정보 보존 세이브 완료: {playerName} ({playerGeneration}대) | HP: {playerHp}/{playerMaxHp}"); + } + } +} diff --git a/unity-client/Assets/Scripts/GameManager.cs.meta b/unity-client/Assets/Scripts/GameManager.cs.meta new file mode 100644 index 0000000..e850d01 --- /dev/null +++ b/unity-client/Assets/Scripts/GameManager.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d42f0450bff4242dca327151c2892fb6 \ No newline at end of file diff --git a/unity-client/Assets/Scripts/Player.cs b/unity-client/Assets/Scripts/Player.cs index c962572..e7ebd64 100644 --- a/unity-client/Assets/Scripts/Player.cs +++ b/unity-client/Assets/Scripts/Player.cs @@ -33,7 +33,7 @@ public class Player : MonoBehaviour [SerializeField] public int hp = 5; [SerializeField] public int maxHp = 5; - private bool isFacingRight = false; + private bool isFacingRight = true; private int currentAnimationState = -1; private Animator animator; @@ -69,9 +69,9 @@ public class Player : MonoBehaviour Debug.LogError($"{gameObject.name} 오브젝트에 SPUM_Prefabs 컴포넌트가 없습니다! 인스펙터를 확인하세요."); } - // 캐릭터 방향 기본 오른쪽 설정 + // 오리지널 리소스가 원래 왼쪽을 보고 있으므로, 시작 시 X 스케일을 반전시켜 즉시 오른쪽을 바라보도록 초기화합니다. Vector3 initialScale = transform.localScale; - initialScale.x = Mathf.Abs(initialScale.x); + initialScale.x = -Mathf.Abs(initialScale.x); transform.localScale = initialScale; animator = GetComponentInChildren(); @@ -80,8 +80,34 @@ public class Player : MonoBehaviour void Start() { - // 시작 시 백엔드로부터 다음 세대 정보 조회 - StartCoroutine(GetNextGenerationFromServer()); + // 씬 로딩 후 GameManager에 이미 보존되어 넘어온 캐릭터 정보가 존재한다면 복구합니다. + if (GameManager.Instance != null && !string.IsNullOrEmpty(GameManager.Instance.playerName)) + { + characterName = GameManager.Instance.playerName; + generation = GameManager.Instance.playerGeneration; + hp = GameManager.Instance.playerHp; + maxHp = GameManager.Instance.playerMaxHp; + + // UI 텍스트 및 이미지 게이지 동기화 + if (nameText != null) + { + nameText.text = characterName; + } + + if (hpImage != null && maxHp > 0) + { + float fillRatio = Mathf.Clamp01((float)hp / maxHp); + hpImage.fillAmount = fillRatio; + hpImage.rectTransform.localScale = new Vector3(fillRatio, 1f, 1f); + } + + Debug.Log($"[Player] GameManager로부터 이전 캐릭터 정보를 무사히 인계받았습니다: {characterName} | HP: {hp}/{maxHp}"); + } + else + { + // 데이터가 보존되지 않은 최초 기동 상태인 경우에만 백엔드 서버에서 신규 세대 번호를 조회하여 할당합니다. + StartCoroutine(GetNextGenerationFromServer()); + } } private void Update() diff --git a/unity-client/Assets/Scripts/WallTransition.cs b/unity-client/Assets/Scripts/WallTransition.cs new file mode 100644 index 0000000..9bdc07c --- /dev/null +++ b/unity-client/Assets/Scripts/WallTransition.cs @@ -0,0 +1,44 @@ +using UnityEngine; +using UnityEngine.SceneManagement; + +[RequireComponent(typeof(Collider2D))] // 트리거 판정을 위해 Collider2D가 부착되어 있어야 합니다. +public class WallTransition : MonoBehaviour +{ + [Header("전환될 목표 씬 이름")] + [SerializeField] private string targetSceneName = "battleStage"; + + private void Start() + { + // 물리적인 밀어냄 현상을 방지하고 통과 감지만 할 수 있도록 트리거(Trigger)로 지정합니다. + Collider2D col = GetComponent(); + if (col != null && !col.isTrigger) + { + col.isTrigger = true; + Debug.LogWarning($"[Transition] {gameObject.name}에 부착된 Collider2D를 트리거(Is Trigger = true)로 자동 갱신했습니다."); + } + } + + private void OnTriggerEnter2D(Collider2D other) + { + // 닿은 물체가 플레이어 캐릭터인지 확인합니다. + Player player = other.GetComponent(); + if (player != null) + { + Debug.Log($"[Transition] 플레이어 '{player.CharacterName}'가 우측 경계 성벽에 접촉했습니다."); + + // 1. 싱글톤 GameManager 인스턴스가 존재할 경우 현재 플레이어의 정보(이름, 세대, HP)를 세이브합니다. + if (GameManager.Instance != null) + { + GameManager.Instance.SavePlayerData(player); + } + else + { + Debug.LogWarning("[Transition] 씬에 GameManager 싱글톤 오브젝트가 존재하지 않아 플레이어 정보 임시 세이브를 스킵합니다."); + } + + // 2. 유니티 씬 매니저를 통해 목표 씬(battleStage)을 즉시 로드합니다. + Debug.Log($"[Transition] {targetSceneName} 씬으로 화면을 전환합니다."); + SceneManager.LoadScene(targetSceneName); + } + } +} diff --git a/unity-client/Assets/Scripts/WallTransition.cs.meta b/unity-client/Assets/Scripts/WallTransition.cs.meta new file mode 100644 index 0000000..d5147a4 --- /dev/null +++ b/unity-client/Assets/Scripts/WallTransition.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0e728dcba3a32418da46f86eb0b8a001 \ No newline at end of file diff --git a/unity-client/ProjectSettings/EditorBuildSettings.asset b/unity-client/ProjectSettings/EditorBuildSettings.asset index c1add24..3d9de55 100644 --- a/unity-client/ProjectSettings/EditorBuildSettings.asset +++ b/unity-client/ProjectSettings/EditorBuildSettings.asset @@ -6,11 +6,11 @@ EditorBuildSettings: serializedVersion: 2 m_Scenes: - enabled: 1 - path: Assets/2D_Pixel_Light/Scenes/Basic.unity - guid: bb356265201af4d40b05e21e32f76eaf + path: Assets/Scenes/Lobby.unity + guid: 6900ea19104f9ce44876ff9a768882d0 - enabled: 1 - path: Assets/2D_Pixel_Light/Scenes/Complete.unity - guid: c3e82cf2e80ca5542bbc8025185d98c8 + path: Assets/Scenes/battleStage.unity + guid: 01631e903c99249258c1cf4651fc7cc9 m_configObjects: com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3} m_UseUCBPForAssetBundles: 0