From 620b0e47e99337b66ad0e8aa6785ac6013910f39 Mon Sep 17 00:00:00 2001 From: hydrozen1178 Date: Mon, 2 Feb 2026 00:49:12 +0900 Subject: [PATCH] =?UTF-8?q?=EC=88=98=EC=A0=95=EB=B3=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 카드 ui, 대쉬 , 플레이어 공격 범위 . --- Assets/0.SCENE/MainGame.unity | 1228 +++++++++++++++-- .../OutAnime/AttackAnime.fbx.meta | 7 - Assets/5.TestScript/Attack.cs | 26 +- Assets/5.TestScript/Health.cs | 44 +- Assets/5.TestScript/Player Stat UI.cs | 39 +- Assets/5.TestScript/PlayerInput.cs | 19 +- Assets/5.TestScript/PlayerInteraction.cs | 49 +- Assets/5.TestScript/PlayerMovement.cs | 74 +- Assets/5.TestScript/Stats.cs | 20 +- Assets/5.TestScript/WePonHitBox.cs | 23 +- Assets/7.Other Code/Card_Scripts/CardUI.cs | 60 +- .../Level_Scripts/LevelUpUIManager.cs | 80 +- 12 files changed, 1298 insertions(+), 371 deletions(-) diff --git a/Assets/0.SCENE/MainGame.unity b/Assets/0.SCENE/MainGame.unity index d337c60e..04fe2d44 100644 --- a/Assets/0.SCENE/MainGame.unity +++ b/Assets/0.SCENE/MainGame.unity @@ -2235,6 +2235,140 @@ Transform: m_CorrespondingSourceObject: {fileID: 4708095961488610, guid: 01d14f7c3a49b4f4e86caee63ef815b1, type: 3} m_PrefabInstance: {fileID: 30507936} m_PrefabAsset: {fileID: 0} +--- !u!1 &30997075 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 30997076} + - component: {fileID: 30997078} + - component: {fileID: 30997077} + m_Layer: 5 + m_Name: MaxHP + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &30997076 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 30997075} + 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: 1296865714} + 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: 63.4, y: 10} + m_SizeDelta: {x: 200, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &30997077 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 30997075} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + 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_text: 'Max HP:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 9.1 + m_fontSizeBase: 9.1 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &30997078 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 30997075} + m_CullTransparentMesh: 1 --- !u!1001 &31138422 PrefabInstance: m_ObjectHideFlags: 0 @@ -30797,6 +30931,140 @@ Transform: m_CorrespondingSourceObject: {fileID: 4692013390589372, guid: 034cc56664290054395041c47ae8cd5e, type: 3} m_PrefabInstance: {fileID: 310239259} m_PrefabAsset: {fileID: 0} +--- !u!1 &310564598 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 310564599} + - component: {fileID: 310564601} + - component: {fileID: 310564600} + m_Layer: 5 + m_Name: Damage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &310564599 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 310564598} + 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: 1296865714} + 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: 63.4, y: -16} + m_SizeDelta: {x: 200, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &310564600 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 310564598} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + 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_text: 'Damage:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 9.1 + m_fontSizeBase: 9.1 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &310564601 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 310564598} + m_CullTransparentMesh: 1 --- !u!1001 &310805962 PrefabInstance: m_ObjectHideFlags: 0 @@ -46206,6 +46474,7 @@ MonoBehaviour: cardPool: - {fileID: 11400000, guid: 9e2572fa700a4844bbe83ace499f77b0, type: 2} - {fileID: 11400000, guid: 243e14173b68f3d4c84cc57b36b45497, type: 2} + applyButton: {fileID: 1142706460} --- !u!4 &449852328 Transform: m_ObjectHideFlags: 0 @@ -53769,6 +54038,140 @@ Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: 7d54273c46c392343a5bfe162e799a5c, type: 3} m_PrefabInstance: {fileID: 515422656} m_PrefabAsset: {fileID: 0} +--- !u!1 &516038583 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 516038584} + - component: {fileID: 516038586} + - component: {fileID: 516038585} + m_Layer: 5 + m_Name: Strength + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &516038584 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 516038583} + 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: 1296865714} + 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: 63.4, y: -3.3} + m_SizeDelta: {x: 200, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &516038585 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 516038583} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + 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_text: 'Strength:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 9.1 + m_fontSizeBase: 9.1 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &516038586 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 516038583} + m_CullTransparentMesh: 1 --- !u!1001 &516087309 PrefabInstance: m_ObjectHideFlags: 0 @@ -66324,157 +66727,6 @@ Transform: m_CorrespondingSourceObject: {fileID: 4777934517046012, guid: 91e9da64c88b4594581c8fdf8ff08ffe, type: 3} m_PrefabInstance: {fileID: 636418817} m_PrefabAsset: {fileID: 0} ---- !u!1 &636826305 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 636826311} - - component: {fileID: 636826310} - - component: {fileID: 636826309} - - component: {fileID: 636826308} - - component: {fileID: 636826307} - - component: {fileID: 636826306} - m_Layer: 8 - m_Name: "\uCE7C (5)" - m_TagString: Item - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!65 &636826306 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 636826305} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Size: {x: 0.007935895, y: 0.01989254, z: 0.005629562} - m_Center: {x: 0.00004746858, y: 0.0058954563, z: -0.000009746058} ---- !u!54 &636826307 -Rigidbody: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 636826305} - serializedVersion: 4 - m_Mass: 1 - m_Drag: 0 - m_AngularDrag: 0.05 - m_CenterOfMass: {x: 0, y: 0, z: 0} - m_InertiaTensor: {x: 1, y: 1, z: 1} - m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ImplicitCom: 1 - m_ImplicitTensor: 1 - m_UseGravity: 1 - m_IsKinematic: 0 - m_Interpolate: 0 - m_Constraints: 0 - m_CollisionDetection: 0 ---- !u!114 &636826308 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 636826305} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4b5e436eeda17b141b83d4835e599ed7, type: 3} - m_Name: - m_EditorClassIdentifier: - config: {fileID: 11400000, guid: be0b149d7d696a943acae1ab1133c942, type: 2} - lv1Mult: 1 - lv2Mult: 1.5 - lv3Mult: 2.5 - strengthBonusFactor: 0.02 ---- !u!23 &636826309 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 636826305} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 73f953a4a2baeb4499c95dd4dc1c5859, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &636826310 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 636826305} - m_Mesh: {fileID: 1588110511326799053, guid: 30b8348e96a85654c835d47dedb02f53, type: 3} ---- !u!4 &636826311 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 636826305} - serializedVersion: 2 - m_LocalRotation: {x: 0.5433104, y: -0.066823, z: 0.82765627, w: 0.12382896} - m_LocalPosition: {x: 22.251, y: 9.2854, z: 13.74} - m_LocalScale: {x: 136.51878, y: 138.80682, z: 142.1776} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 14.192, y: 65.587, z: 172.153} --- !u!1001 &637121952 PrefabInstance: m_ObjectHideFlags: 0 @@ -116537,6 +116789,139 @@ Transform: m_CorrespondingSourceObject: {fileID: 4165311596937226, guid: 4c1c35c334608e3429dbc1730df94c67, type: 3} m_PrefabInstance: {fileID: 1142333068} m_PrefabAsset: {fileID: 0} +--- !u!1 &1142706458 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1142706459} + - component: {fileID: 1142706462} + - component: {fileID: 1142706461} + - component: {fileID: 1142706460} + m_Layer: 5 + m_Name: Apply Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1142706459 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1142706458} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.654, y: 1.654, z: 1.654} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1839440759} + m_Father: {fileID: 510035933647342717} + 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: 352, y: -315} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1142706460 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1142706458} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1142706461} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_TargetAssemblyTypeName: + m_MethodName: + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1142706461 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1142706458} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.15403083, g: 0.990566, b: 0, 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + 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 &1142706462 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1142706458} + m_CullTransparentMesh: 1 --- !u!1001 &1143253543 PrefabInstance: m_ObjectHideFlags: 0 @@ -127485,6 +127870,61 @@ Transform: m_CorrespondingSourceObject: {fileID: 4460867311377408, guid: d8923b49e25aa154a8df2666dce5f3cd, type: 3} m_PrefabInstance: {fileID: 1241034030} m_PrefabAsset: {fileID: 0} +--- !u!1 &1241367432 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1241367433} + - component: {fileID: 1241367434} + m_Layer: 5 + m_Name: Player Stats UI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1241367433 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1241367432} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 5.02472, y: 5.02472, z: 5.02472} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1296865714} + m_Father: {fileID: 1800120326328798950} + 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: -717, y: 125} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1241367434 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1241367432} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 18c9580976646ab42a48af83ab430afb, type: 3} + m_Name: + m_EditorClassIdentifier: + playerStats: {fileID: 1432447530} + statWindowPanel: {fileID: 1241367432} + maxHealthText: {fileID: 30997077} + strengthText: {fileID: 516038585} + damageText: {fileID: 310564600} + speedText: {fileID: 1904720884} --- !u!1001 &1241488882 PrefabInstance: m_ObjectHideFlags: 0 @@ -128427,6 +128867,103 @@ Transform: m_CorrespondingSourceObject: {fileID: 4438819925971272, guid: f47bfee1d8e05174e9d4dc0ebffa08e0, type: 3} m_PrefabInstance: {fileID: 1248074135} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1248363699 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2040957530791599685, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2040957530791599685, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2040957530791599685, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2191869281094090394, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: maxHP + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 3587750552762439828, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_Name + value: Monster (1) + objectReference: {fileID: 0} + - target: {fileID: 5494800343343911850, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_LocalPosition.x + value: 44.58 + objectReference: {fileID: 0} + - target: {fileID: 5494800343343911850, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_LocalPosition.y + value: 6.14 + objectReference: {fileID: 0} + - target: {fileID: 5494800343343911850, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_LocalPosition.z + value: 34.06 + objectReference: {fileID: 0} + - target: {fileID: 5494800343343911850, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5494800343343911850, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5494800343343911850, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5494800343343911850, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5494800343343911850, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5494800343343911850, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5494800343343911850, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7307672912510681016, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 1043367860, guid: 95ab59b2554677f42ae266b854501dea, type: 3} + - target: {fileID: 7852562287375518264, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_SizeDelta.x + value: 2.2405 + objectReference: {fileID: 0} + - target: {fileID: 7852562287375518264, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_AnchoredPosition.x + value: -0.0549 + objectReference: {fileID: 0} + - target: {fileID: 8097316185771272198, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_SizeDelta.x + value: 2.2405 + objectReference: {fileID: 0} + - target: {fileID: 8097316185771272198, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_AnchoredPosition.x + value: -0.0549 + objectReference: {fileID: 0} + - target: {fileID: 8373334604175617921, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 1043367860, guid: 95ab59b2554677f42ae266b854501dea, type: 3} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 6f13ab79d8b0c90469799a3505f07c8b, type: 3} --- !u!1001 &1249514920 PrefabInstance: m_ObjectHideFlags: 0 @@ -133148,6 +133685,85 @@ Transform: m_CorrespondingSourceObject: {fileID: 4449890379361532, guid: 4f283ac0ef0b13b4dafc3fe2dbbcedea, type: 3} m_PrefabInstance: {fileID: 1295165370} m_PrefabAsset: {fileID: 0} +--- !u!1 &1296865713 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1296865714} + - component: {fileID: 1296865716} + - component: {fileID: 1296865715} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1296865714 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1296865713} + 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: 30997076} + - {fileID: 516038584} + - {fileID: 310564599} + - {fileID: 1904720883} + m_Father: {fileID: 1241367433} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1296865715 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1296865713} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 285118559, guid: 75bfb8def6297694bb4d4ab6c9ffcef0, 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 &1296865716 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1296865713} + m_CullTransparentMesh: 1 --- !u!1001 &1297364955 PrefabInstance: m_ObjectHideFlags: 0 @@ -146778,6 +147394,7 @@ MonoBehaviour: m_EditorClassIdentifier: stats: {fileID: 1432447530} animator: {fileID: 1432447523} + isInvincible: 0 --- !u!114 &1432447527 MonoBehaviour: m_ObjectHideFlags: 0 @@ -146830,7 +147447,7 @@ MonoBehaviour: aim: {fileID: 1432447528} interaction: {fileID: 1432447532} attack: {fileID: 1432447527} - statsUI: {fileID: 0} + statsUI: {fileID: 1241367434} --- !u!114 &1432447530 MonoBehaviour: m_ObjectHideFlags: 0 @@ -146851,6 +147468,7 @@ MonoBehaviour: bonusMoveSpeed: 0 bonusStrength: 0 bonusAttackDamage: 0 + weaponDamage: 0 weightToSpeedPenalty: 0.1 runSpeedMultiplier: 1.5 finalMaxHealth: 0 @@ -146873,6 +147491,9 @@ MonoBehaviour: health: {fileID: 1432447526} pAnim: {fileID: 1432447533} attackScript: {fileID: 1432447527} + dashDistance: 3 + dashDuration: 0.08 + dashCooldown: 1.5 minSpeedMultiplier: 0.3 --- !u!114 &1432447532 MonoBehaviour: @@ -155557,6 +156178,91 @@ Transform: m_CorrespondingSourceObject: {fileID: 4946034908522688, guid: 0b4ec2079abd9a64390cf77971445fc5, type: 3} m_PrefabInstance: {fileID: 1531559788} m_PrefabAsset: {fileID: 0} +--- !u!1001 &1532158138 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 450992007138140667, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_LocalScale.x + value: 218.43205 + objectReference: {fileID: 0} + - target: {fileID: 450992007138140667, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_LocalScale.y + value: 222.09297 + objectReference: {fileID: 0} + - target: {fileID: 450992007138140667, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_LocalScale.z + value: 227.48624 + objectReference: {fileID: 0} + - target: {fileID: 450992007138140667, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_LocalPosition.x + value: 24.215 + objectReference: {fileID: 0} + - target: {fileID: 450992007138140667, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_LocalPosition.y + value: 10.136 + objectReference: {fileID: 0} + - target: {fileID: 450992007138140667, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_LocalPosition.z + value: 13.717 + objectReference: {fileID: 0} + - target: {fileID: 450992007138140667, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_LocalRotation.w + value: 0.12382896 + objectReference: {fileID: 0} + - target: {fileID: 450992007138140667, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_LocalRotation.x + value: 0.5433104 + objectReference: {fileID: 0} + - target: {fileID: 450992007138140667, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_LocalRotation.y + value: -0.066823 + objectReference: {fileID: 0} + - target: {fileID: 450992007138140667, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_LocalRotation.z + value: 0.82765627 + objectReference: {fileID: 0} + - target: {fileID: 450992007138140667, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 14.192 + objectReference: {fileID: 0} + - target: {fileID: 450992007138140667, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 65.587 + objectReference: {fileID: 0} + - target: {fileID: 450992007138140667, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 172.153 + objectReference: {fileID: 0} + - target: {fileID: 4085536598674672635, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_Size.x + value: 0.003 + objectReference: {fileID: 0} + - target: {fileID: 4085536598674672635, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_Size.y + value: 0.008 + objectReference: {fileID: 0} + - target: {fileID: 4906676340306482370, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: config + value: + objectReference: {fileID: 11400000, guid: 602c0bb77ce70104ab6768b08772132f, type: 2} + - target: {fileID: 6875888761843048781, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8071134912250732547, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} + propertyPath: m_Name + value: "\uCE7C (5)" + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 9f51c4433e5c81644807e9e547b7826c, type: 3} --- !u!1001 &1532898197 PrefabInstance: m_ObjectHideFlags: 0 @@ -185973,6 +186679,85 @@ Transform: m_CorrespondingSourceObject: {fileID: 4338630269152726, guid: ad15607b5cff0b945ae2b555c35aa8fc, type: 3} m_PrefabInstance: {fileID: 1838591746} m_PrefabAsset: {fileID: 0} +--- !u!1 &1839440758 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1839440759} + - component: {fileID: 1839440761} + - component: {fileID: 1839440760} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1839440759 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839440758} + 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: 1142706459} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1839440760 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839440758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 21 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Apply +--- !u!222 &1839440761 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839440758} + m_CullTransparentMesh: 1 --- !u!4 &1840438704 stripped Transform: m_CorrespondingSourceObject: {fileID: 4501200234821270, guid: 33d643b9c13b8cf47bb2d38599ac5c84, type: 3} @@ -191551,6 +192336,140 @@ Transform: m_CorrespondingSourceObject: {fileID: 4917135111635402, guid: 4fb7e29eb03a19e4099b10ed3f307852, type: 3} m_PrefabInstance: {fileID: 1903991475} m_PrefabAsset: {fileID: 0} +--- !u!1 &1904720882 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1904720883} + - component: {fileID: 1904720885} + - component: {fileID: 1904720884} + m_Layer: 5 + m_Name: Speed + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1904720883 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904720882} + 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: 1296865714} + 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: 63.4, y: -29.3} + m_SizeDelta: {x: 200, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1904720884 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904720882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + 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_text: 'Speed:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 9.1 + m_fontSizeBase: 9.1 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1904720885 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904720882} + m_CullTransparentMesh: 1 --- !u!1001 &1904976942 PrefabInstance: m_ObjectHideFlags: 0 @@ -215968,6 +216887,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 966059175} + - {fileID: 1142706459} m_Father: {fileID: 1800120326328798950} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} @@ -216192,6 +217112,7 @@ RectTransform: - {fileID: 757505799485494552} - {fileID: 8997534549618499257} - {fileID: 510035933647342717} + - {fileID: 1241367433} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -217367,11 +218288,12 @@ SceneRoots: - {fileID: 398512784} - {fileID: 1390519481} - {fileID: 7969472841528762147} - - {fileID: 636826311} + - {fileID: 1532158138} - {fileID: 1992891316} - {fileID: 2112919309} - {fileID: 2119519052} - {fileID: 449852328} - {fileID: 8307157894164531551} + - {fileID: 1248363699} - {fileID: 7449230931284885269} - {fileID: 321682814584122314} diff --git a/Assets/4.PlayerAnimation/OutAnime/AttackAnime.fbx.meta b/Assets/4.PlayerAnimation/OutAnime/AttackAnime.fbx.meta index cc81eccc..2c4ee982 100644 --- a/Assets/4.PlayerAnimation/OutAnime/AttackAnime.fbx.meta +++ b/Assets/4.PlayerAnimation/OutAnime/AttackAnime.fbx.meta @@ -107,13 +107,6 @@ ModelImporter: bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 curves: [] events: - - time: 0 - functionName: StartWeaponCollision - data: - objectReferenceParameter: {instanceID: 0} - floatParameter: 0 - intParameter: 0 - messageOptions: 0 - time: 0.44848183 functionName: StartWeaponCollision data: diff --git a/Assets/5.TestScript/Attack.cs b/Assets/5.TestScript/Attack.cs index 644ed87c..42f92b8a 100644 --- a/Assets/5.TestScript/Attack.cs +++ b/Assets/5.TestScript/Attack.cs @@ -39,24 +39,21 @@ public class PlayerAttack : MonoBehaviour if (Time.time < _lastAttackTime + attackCooldown) return; _isAttacking = true; - _comboCount = (_comboCount % 3) + 1; + _comboCount = (_comboCount % 3) + 1; // 1 -> 2 -> 3 순환 pAnim.TriggerAttack(); _lastAttackTime = Time.time; } - // ⭐ [수정] 휘두를 때 데미지를 실어서 판정을 켭니다. public void StartWeaponCollision() { if (weaponHitBox != null) { Debug.Log("[Attack] 낫 공격 판정 ON!"); - // stats에 설정된 공격력을 가져와서 전달하면 더 좋습니다. weaponHitBox.EnableHitBox(20f); } } - // ⭐ [수정] 휘두르기가 끝나면 확실하게 판정을 끕니다. public void StopWeaponCollision() { if (weaponHitBox != null) @@ -66,26 +63,25 @@ public class PlayerAttack : MonoBehaviour } } + // ⭐ [수정 완료] 오직 3타 막타일 때만 카메라 연출을 실행합니다. public void OnAttackShake() { if (CinemachineShake.Instance == null) return; + // 3번째 콤보일 때만 묵직하게 흔들어줍니다. if (_comboCount == 3) { - CinemachineShake.Instance.HitSlow(0.2f, 0.05f); - CinemachineShake.Instance.CameraKick(10f); - CinemachineShake.Instance.ShakeAttack(); - } - else - { - CinemachineShake.Instance.HitSlow(0.1f, 0.2f); - CinemachineShake.Instance.ShakeAttack(); + Debug.Log("[Shake] 3타 막타 카메라 연출 실행!"); + CinemachineShake.Instance.HitSlow(0.2f, 0.05f); // 히트 슬로우 + CinemachineShake.Instance.CameraKick(10f); // 카메라 킥 + CinemachineShake.Instance.ShakeAttack(); // 진동 } + // 🚫 else 구문을 삭제하여 1, 2타 시에는 아무것도 하지 않습니다. } public void OnAttackEnd() { - StopWeaponCollision(); // 🚫 안전장치: 공격이 끝나면 무조건 판정을 끕니다. + StopWeaponCollision(); if (_comboCount == 3) { StartCoroutine(PostComboRecovery()); } else { _isAttacking = false; } } @@ -129,7 +125,6 @@ public class PlayerAttack : MonoBehaviour if (targetDirection != Vector3.zero) transform.rotation = Quaternion.LookRotation(targetDirection); - // 🛠️ 무기 독립 로직 (자식에서 떼어내기) GameObject weaponObj = interaction.CurrentWeapon.gameObject; weaponObj.transform.SetParent(null); @@ -162,9 +157,10 @@ public class PlayerAttack : MonoBehaviour pAnim.SetCharging(true); if (CinemachineShake.Instance != null) CinemachineShake.Instance.SetZoom(true); } + private void OnDrawGizmos() { - Gizmos.color = Color.red; // 공격 범위는 빨간색으로 표시 + Gizmos.color = Color.red; if (TryGetComponent(out var box)) { Gizmos.matrix = transform.localToWorldMatrix; diff --git a/Assets/5.TestScript/Health.cs b/Assets/5.TestScript/Health.cs index 10e3280a..d73d0734 100644 --- a/Assets/5.TestScript/Health.cs +++ b/Assets/5.TestScript/Health.cs @@ -1,5 +1,6 @@ using UnityEngine; using System; +using System.Collections; // ⭐ IEnumerator 사용을 위해 추가 public class PlayerHealth : MonoBehaviour, IDamageable { @@ -8,44 +9,41 @@ public class PlayerHealth : MonoBehaviour, IDamageable public bool IsDead { get; private set; } public bool isHit { get; private set; } + public bool isInvincible; // 대시 중 무적 플래그 public event Action OnHit, OnDead; public event Action OnHealthChanged; private float _currentHealth; - private void Start() + // ⭐ [수정] Start를 코루틴으로 변경하여 실행 순서 문제를 해결합니다. + private IEnumerator Start() { + // 모든 오브젝트가 깨어날 때까지 한 프레임 기다립니다. + yield return null; + if (stats != null) { _currentHealth = stats.MaxHealth; + // 이제 UI가 확실히 준비되었으므로 수치를 전달합니다. OnHealthChanged?.Invoke(_currentHealth, stats.MaxHealth); + Debug.Log($"[UI Sync] 초기 체력 설정 완료: {_currentHealth}/{stats.MaxHealth}"); } if (animator == null) animator = GetComponent(); } - // ⭐ [최종 수정] 최대 체력 변동 시 호출: 피는 안 채우되, 그릇(MaxHealth)을 넘치는 피는 깎습니다. public void RefreshHealthUI() { if (stats != null) { - // 1. [핵심] 현재 체력이 최대 체력을 넘지 못하도록 고정 (Clamp) - // 최대 체력이 늘어나면 기존 피 유지, 줄어들어서 피가 넘치면 최대치로 깎음 _currentHealth = Mathf.Min(_currentHealth, stats.MaxHealth); - - // 2. 즉시 UI에 바뀐 수치를 보냅니다. - if (OnHealthChanged != null) - { - OnHealthChanged.Invoke(_currentHealth, stats.MaxHealth); - Debug.Log($"[Health Sync] UI 갱신 완료: {_currentHealth} / {stats.MaxHealth}"); - } + OnHealthChanged?.Invoke(_currentHealth, stats.MaxHealth); } } - // ... (TakeDamage 등 나머지 기존 코드 유지) public void TakeDamage(float amount) { - if (IsDead) return; + if (isInvincible || IsDead) return; _currentHealth = Mathf.Max(0, _currentHealth - amount); OnHealthChanged?.Invoke(_currentHealth, stats.MaxHealth); OnHit?.Invoke(); @@ -58,24 +56,10 @@ public class PlayerHealth : MonoBehaviour, IDamageable isHit = true; if (animator != null) animator.Play("HitAnime", 0, 0f); CancelInvoke(nameof(OnHitEnd)); - Invoke(nameof(OnHitEnd), 0.05f); + Invoke(nameof(OnHitEnd), 0.25f); } public void OnHitEnd() { isHit = false; } - private void Die() - { - IsDead = true; - Cursor.visible = true; - Cursor.lockState = CursorLockMode.None; - OnDead?.Invoke(); - } - public void Heal(float amount) - { - if (IsDead) return; - // 현재 체력에 회복량을 더하되, Stats의 MaxHealth를 넘지 못하게 합니다. - _currentHealth = Mathf.Min(_currentHealth + amount, stats.MaxHealth); - - // UI 갱신 - OnHealthChanged?.Invoke(_currentHealth, stats.MaxHealth); - } + private void Die() { IsDead = true; Cursor.visible = true; Cursor.lockState = CursorLockMode.None; OnDead?.Invoke(); } + public void Heal(float amount) { if (IsDead) return; _currentHealth = Mathf.Min(_currentHealth + amount, stats.MaxHealth); OnHealthChanged?.Invoke(_currentHealth, stats.MaxHealth); } } \ No newline at end of file diff --git a/Assets/5.TestScript/Player Stat UI.cs b/Assets/5.TestScript/Player Stat UI.cs index 14d68f2f..051163d0 100644 --- a/Assets/5.TestScript/Player Stat UI.cs +++ b/Assets/5.TestScript/Player Stat UI.cs @@ -1,15 +1,15 @@ -using UnityEngine; -using TMPro; // TextMeshPro ʼ +using UnityEngine; +using TMPro; public class PlayerStatsUI : MonoBehaviour { - [Header("--- ---")] + [Header("--- 데이터 연결 ---")] [SerializeField] private Stats playerStats; - [Header("--- UI Ʈ ---")] - [SerializeField] private GameObject statWindowPanel; // CŰ θ dz + [Header("--- UI 오브젝트 ---")] + [SerializeField] private GameObject statWindowPanel; - [Header("--- ؽƮ UI ---")] + [Header("--- 텍스트 UI ---")] [SerializeField] private TextMeshProUGUI maxHealthText; [SerializeField] private TextMeshProUGUI strengthText; [SerializeField] private TextMeshProUGUI damageText; @@ -17,35 +17,30 @@ public class PlayerStatsUI : MonoBehaviour private void Start() { - // â ݾƵӴϴ. - if (statWindowPanel != null) - statWindowPanel.SetActive(false); + if (statWindowPanel != null) statWindowPanel.SetActive(false); } - // â ų ݴ Լ public void ToggleWindow() { if (statWindowPanel == null) return; - bool isActive = !statWindowPanel.activeSelf; statWindowPanel.SetActive(isActive); - - // â ֽ ڸ մϴ. - if (isActive) - { - UpdateStatTexts(); - } + if (isActive) UpdateStatTexts(); } - private void UpdateStatTexts() + public void UpdateStatTexts() { if (playerStats == null) return; - // Stats.cs Ƽ ͸ ɴϴ. maxHealthText.text = $"MaxHP: {playerStats.MaxHealth}"; strengthText.text = $"Strength: {playerStats.Strength}"; - damageText.text = $"Damage: {playerStats.BaseAttackDamage}"; - // ǵ Ҽ ڸ ϰ ǥ - speedText.text = $"Speed: {playerStats.CurrentMoveSpeed:F1}"; + + // ⭐ 데미지: 최종합 (+무기보너스) + damageText.text = $"Damage: {playerStats.TotalAttackDamage} (+{playerStats.weaponDamage})"; + + // ⭐ [수정] 스피드: 현재속도 (-무게페널티) 형태로 표기합니다. + // 페널티가 0보다 클 때만 빨간색 느낌으로 괄호 수치를 띄워줍니다. + string penaltyText = playerStats.WeightPenalty > 0 ? $" (-{playerStats.WeightPenalty:F1})" : ""; + speedText.text = $"Speed: {playerStats.CurrentMoveSpeed:F1}{penaltyText}"; } } \ No newline at end of file diff --git a/Assets/5.TestScript/PlayerInput.cs b/Assets/5.TestScript/PlayerInput.cs index 8b2eaec6..d2697c6a 100644 --- a/Assets/5.TestScript/PlayerInput.cs +++ b/Assets/5.TestScript/PlayerInput.cs @@ -1,4 +1,5 @@ using UnityEngine; + public class PlayerInput : MonoBehaviour { [SerializeField] private PlayerHealth health; @@ -6,22 +7,26 @@ public class PlayerInput : MonoBehaviour [SerializeField] private PlayerAim aim; [SerializeField] private PlayerInteraction interaction; [SerializeField] private PlayerAttack attack; - [SerializeField] private PlayerStatsUI statsUI; // ⭐ 추가: UI 매니저 연결 + [SerializeField] private PlayerStatsUI statsUI; private void Update() { if (health != null && health.IsDead) return; - // ⭐ [추가] C키를 누르면 상태창 토글 - if (Input.GetKeyDown(KeyCode.C) && statsUI != null) - { - statsUI.ToggleWindow(); - } + if (Input.GetKeyDown(KeyCode.C) && statsUI != null) statsUI.ToggleWindow(); float h = Input.GetAxisRaw("Horizontal"); float v = Input.GetAxisRaw("Vertical"); bool sprint = Input.GetKey(KeyCode.LeftShift); - if (movement != null) movement.SetMoveInput(new Vector3(h, 0, v).normalized, sprint); + + if (movement != null) + { + movement.SetMoveInput(new Vector3(h, 0, v).normalized, sprint); + + // ⭐ [추가] Space 키를 누르면 대시 실행 + if (Input.GetKeyDown(KeyCode.Space)) movement.AttemptDash(); + } + if (aim != null) aim.RotateTowardsMouse(); if (Input.GetKeyDown(KeyCode.F) && interaction != null) interaction.TryInteract(); diff --git a/Assets/5.TestScript/PlayerInteraction.cs b/Assets/5.TestScript/PlayerInteraction.cs index 45b5ae77..1d9ad838 100644 --- a/Assets/5.TestScript/PlayerInteraction.cs +++ b/Assets/5.TestScript/PlayerInteraction.cs @@ -14,10 +14,8 @@ public class PlayerInteraction : MonoBehaviour public void TryInteract() { Collider[] hits = Physics.OverlapSphere(transform.position, interactRange, itemLayer); - foreach (var hit in hits) { - // 1. 무기 상호작용 if (hit.TryGetComponent(out var item)) { if (playerStats.Strength >= item.Config.RequiredStrength) @@ -25,28 +23,10 @@ public class PlayerInteraction : MonoBehaviour EquipWeapon(item); break; } - else - { - // ⭐ [핵심 수정] 힘이 부족하면 카메라를 흔듭니다! - CinemachineShake.Instance?.ShakeNoNo(); - Debug.Log($"힘 부족! 필요: {item.Config.RequiredStrength}, 현재: {playerStats.Strength}"); - continue; - } - } - - // 2. 포션 상호작용 - if (hit.TryGetComponent(out var potion)) - { - potion.Use(GetComponent()); - break; - } - - // 3. 제단 상호작용 - if (hit.TryGetComponent(out var altar)) - { - altar.Use(GetComponent()); - break; + else { CinemachineShake.Instance?.ShakeNoNo(); continue; } } + if (hit.TryGetComponent(out var potion)) { potion.Use(GetComponent()); break; } + if (hit.TryGetComponent(out var altar)) { altar.Use(GetComponent()); break; } } } @@ -55,8 +35,27 @@ public class PlayerInteraction : MonoBehaviour if (_currentWeapon != null) _currentWeapon.OnDropped(transform.forward); _currentWeapon = item; _currentWeapon.OnPickedUp(handSlot); - playerStats.UpdateWeaponWeight(item.Config.RequiredStrength); + + if (playerStats != null) + { + playerStats.weaponDamage = item.Config.BaseDamage; + playerStats.UpdateWeaponWeight(item.Config.RequiredStrength); + } + + // ⭐ 무기 장착 즉시 UI 갱신 + FindObjectOfType()?.UpdateStatTexts(); } - public void ClearCurrentWeapon() => _currentWeapon = null; + public void ClearCurrentWeapon() + { + _currentWeapon = null; + if (playerStats != null) + { + playerStats.weaponDamage = 0; + playerStats.ResetWeight(); + + // ⭐ 무기 제거 즉시 UI 갱신 + FindObjectOfType()?.UpdateStatTexts(); + } + } } \ No newline at end of file diff --git a/Assets/5.TestScript/PlayerMovement.cs b/Assets/5.TestScript/PlayerMovement.cs index a031dbe9..462fd8e4 100644 --- a/Assets/5.TestScript/PlayerMovement.cs +++ b/Assets/5.TestScript/PlayerMovement.cs @@ -1,4 +1,5 @@ using UnityEngine; +using System.Collections; public class PlayerMovement : MonoBehaviour { @@ -8,32 +9,55 @@ public class PlayerMovement : MonoBehaviour [SerializeField] private PlayerAnimator pAnim; [SerializeField] private PlayerAttack attackScript; + [Header("--- 대시 설정 ---")] + // ⭐ 유저님 이미지(image_42ccbd.png) 수치를 기본값으로 적용했습니다. + [SerializeField] private float dashDistance = 3f; + [SerializeField] private float dashDuration = 0.08f; + [SerializeField] private float dashCooldown = 1.5f; + [Header("--- 차징 감속 설정 ---")] [Range(0.1f, 1f)] [SerializeField] private float minSpeedMultiplier = 0.3f; private Vector3 _moveDir; private bool _isSprinting; + private bool _isDashing; + private float _lastDashTime; + // ⭐ PlayerInput에서 호출하는 입력 세팅 public void SetMoveInput(Vector3 dir, bool sprint) { _moveDir = dir; _isSprinting = sprint; } + // ⭐ PlayerInput에서 Space를 누를 때 호출하는 대시 시도 함수 + public void AttemptDash() + { + if (CanDash()) StartCoroutine(DashRoutine()); + } + + private bool CanDash() + { + // 쿨타임 체크 + 대시 중 아님 + 사망 아님 + bool isCooldownOver = Time.time >= _lastDashTime + dashCooldown; + bool isAlive = health != null && !health.IsDead; + return isCooldownOver && !_isDashing && isAlive; + } + private void Update() { - // 1. 💀 사망 시 혹은 ⚔️ 공격 중일 때 이동 차단 - if (health != null && health.IsDead) + // 1. 💀 사망, ⚡ 대시 중, 🤕 혹은 피격(isHit) 중일 때 이동 차단 + if (health != null && (health.IsDead || health.isHit || _isDashing)) + { + if (pAnim != null && !health.IsDead) pAnim.UpdateMove(0f); + return; + } + + // 2. ⚔️ 공격 중(콤보 및 후딜레이)일 때 이동 차단 + if (attackScript != null && attackScript.IsAttacking) { if (pAnim != null) pAnim.UpdateMove(0f); return; } - // ⭐ [추가] 공격 중(콤보 및 후딜레이 포함)에는 이동 입력 무시 - if (attackScript != null && attackScript.IsAttacking) - { - if (pAnim != null) pAnim.UpdateMove(0f); // 제자리 대기 애니메이션 유도 - return; - } - - // 2. 이동 속도 계산 및 차징 감속 적용 + // 3. 이동 속도 계산 및 차징 감속 적용 float speed = _isSprinting ? stats.CurrentRunSpeed : stats.CurrentMoveSpeed; if (attackScript != null && attackScript.IsCharging) @@ -42,10 +66,10 @@ public class PlayerMovement : MonoBehaviour speed *= speedReduction; } - // 3. 실제 이동 처리 + // 4. 실제 이동 처리 transform.Translate(_moveDir * speed * Time.deltaTime, Space.World); - // 4. 애니메이션 연동 + // 5. 애니메이션 연동 if (pAnim != null) { float animVal = _moveDir.magnitude > 0.1f ? (_isSprinting ? 1.0f : 0.5f) : 0f; @@ -53,4 +77,30 @@ public class PlayerMovement : MonoBehaviour pAnim.UpdateMove(animVal); } } + + // ⭐ [핵심] 방향성 대시 및 무적 처리 로직 + private IEnumerator DashRoutine() + { + _isDashing = true; + _lastDashTime = Time.time; + + // 입력 방향이 있으면 그쪽으로, 없으면 캐릭터의 정면이 아닌 후방(회피)으로 대시 + Vector3 dashDir = _moveDir.sqrMagnitude > 0.001f ? _moveDir : -transform.forward; + + // 🛡️ [무적] 대시 시작 시 무적 상태 활성화 + if (health != null) health.isInvincible = true; + + float startTime = Time.time; + while (Time.time < startTime + dashDuration) + { + // 속도 = 거리 / 시간 + float speed = dashDistance / dashDuration; + transform.Translate(dashDir * speed * Time.deltaTime, Space.World); + yield return null; + } + + // 🛡️ [무적] 대시 종료 시 무적 상태 해제 + if (health != null) health.isInvincible = false; + _isDashing = false; + } } \ No newline at end of file diff --git a/Assets/5.TestScript/Stats.cs b/Assets/5.TestScript/Stats.cs index 04a7ee9c..1eb95008 100644 --- a/Assets/5.TestScript/Stats.cs +++ b/Assets/5.TestScript/Stats.cs @@ -16,39 +16,37 @@ public class Stats : MonoBehaviour public float bonusStrength; public float bonusAttackDamage; + [Header("--- 장착 장비 ---")] + public float weaponDamage; // ⭐ 추가: 무기의 순수 공격력 + [Header("--- 밸런스 설정 ---")] [SerializeField] private float weightToSpeedPenalty = 0.1f; [SerializeField] private float runSpeedMultiplier = 1.5f; private float _weightPenalty = 0f; + // ⭐ [추가] 현재 적용 중인 무게 페널티 수치를 외부(UI)에 공개합니다. + public float WeightPenalty => _weightPenalty; + /* ========================= * 실제 게임 로직용 프로퍼티 * ========================= */ public float MaxHealth => baseMaxHealth + bonusMaxHealth; public float Strength => baseStrength + bonusStrength; public float BaseAttackDamage => baseAttackDamage + bonusAttackDamage; + public float TotalAttackDamage => BaseAttackDamage + weaponDamage; - // ⭐ [에러 해결] PlayerMovement.cs에서 사용하는 속도 프로퍼티 public float CurrentMoveSpeed => Mathf.Max(1f, baseMoveSpeed + bonusMoveSpeed - _weightPenalty); public float CurrentRunSpeed => CurrentMoveSpeed * runSpeedMultiplier; private void Update() { - // 인스펙터 실시간 표시용 (Read Only) finalMaxHealth = MaxHealth; finalMoveSpeed = CurrentMoveSpeed; finalStrength = Strength; - finalAttackDamage = BaseAttackDamage; - } - - // ⭐ 레벨업 시 기초 능력치 영구 상승 - public void AddBaseLevelUpStats(float hpAdd, float strAdd) - { - baseMaxHealth += hpAdd; - baseStrength += strAdd; - Debug.Log($"[Stats] 기초 스탯 상승 완료! 최대 체력: {MaxHealth}"); + finalAttackDamage = TotalAttackDamage; } + public void AddBaseLevelUpStats(float hpAdd, float strAdd) { baseMaxHealth += hpAdd; baseStrength += strAdd; } public void AddMaxHealth(float value) => bonusMaxHealth += value; public void AddMoveSpeed(float value) => bonusMoveSpeed += value; public void AddStrength(float value) => bonusStrength += value; diff --git a/Assets/5.TestScript/WePonHitBox.cs b/Assets/5.TestScript/WePonHitBox.cs index ba5162bc..07665e1a 100644 --- a/Assets/5.TestScript/WePonHitBox.cs +++ b/Assets/5.TestScript/WePonHitBox.cs @@ -4,42 +4,37 @@ using System.Collections.Generic; public class WeaponHitBox : MonoBehaviour { private float _damage; - private bool _isActive = false; // ⭐ 기본은 꺼져 있어야 합니다! + private bool _isActive = false; private List _hitTargets = new List(); public void EnableHitBox(float damage) { _damage = damage; - _isActive = true; // 이제부터 공격 가능 + _isActive = true; _hitTargets.Clear(); - gameObject.SetActive(true); // 오브젝트도 함께 켜줍니다. + gameObject.SetActive(true); } public void DisableHitBox() { - _isActive = false; // 공격 불가능 - gameObject.SetActive(false); // 오브젝트도 꺼줍니다. + _isActive = false; + gameObject.SetActive(false); } private void OnTriggerEnter(Collider other) { - // 1. 공격 활성화 상태가 아니면 무시 (근접 킬 방지) - if (!_isActive) return; + if (!_isActive || other.CompareTag("Player")) return; - // 2. ⭐ [자해 방지] 부딪힌 대상이 나(Player)라면 무시합니다! - if (other.CompareTag("Player")) return; + // ⭐ [핵심] 몬스터의 감지 영역(Trigger)은 무시하고 '진짜 몸통'만 타격! + if (other.isTrigger) return; - // 3. 적(IDamageable)에게 데미지 입히기 if (other.TryGetComponent(out var target)) { if (!_hitTargets.Contains(target)) { target.TakeDamage(_damage); _hitTargets.Add(target); - Debug.Log($"[Hit] {other.name}에게 {_damage} 데미지!"); - - // 타격 시 효과 (카메라 쉐이크 등 호출) - SendMessageUpwards("OnAttackShake", SendMessageOptions.DontRequireReceiver); + Debug.Log($"[Hit] {other.name}의 몸통을 정확히 타격!"); } } } diff --git a/Assets/7.Other Code/Card_Scripts/CardUI.cs b/Assets/7.Other Code/Card_Scripts/CardUI.cs index 5154841b..0f7ac132 100644 --- a/Assets/7.Other Code/Card_Scripts/CardUI.cs +++ b/Assets/7.Other Code/Card_Scripts/CardUI.cs @@ -1,11 +1,12 @@ using UnityEngine; using TMPro; -using UnityEngine.UI; +using UnityEngine.UI; // public class CardUI : MonoBehaviour { [SerializeField] private TextMeshProUGUI effectText; [SerializeField] private Image iconImage; + [SerializeField] private Outline selectionOutline; // ⭐ 인스펙터에서 테두리 컴포넌트 연결 private CardData cardData; private LevelUpUIManager uiManager; @@ -18,56 +19,41 @@ public class CardUI : MonoBehaviour { cardData = data; uiManager = manager; + if (selectionOutline != null) selectionOutline.enabled = false; // 처음엔 테두리 끔 + // (랜덤 스탯 카드 데이터 처리 로직 - 기존 코드 유지) RandomStatCardData randomData = cardData as RandomStatCardData; if (randomData != null) { isRandomCard = true; - - // 스탯 2개 랜덤 선택 (중복 방지) s1 = randomData.possibleStats[Random.Range(0, randomData.possibleStats.Length)]; - do - { - s2 = randomData.possibleStats[Random.Range(0, randomData.possibleStats.Length)]; - } - while (s1 == s2); - - // ✅ v1 = 무조건 양수 - int positiveMin = Mathf.Max(1, randomData.minValue); - int positiveMax = Mathf.Max(1, randomData.maxValue); - v1 = Random.Range(positiveMin, positiveMax + 1); - - // ✅ v2 = 무조건 음수 - int negativeMin = Mathf.Min(-1, randomData.minValue); - int negativeMax = -1; - v2 = Random.Range(negativeMin, negativeMax + 1); - + do { s2 = randomData.possibleStats[Random.Range(0, randomData.possibleStats.Length)]; } while (s1 == s2); + v1 = Random.Range(Mathf.Max(1, randomData.minValue), Mathf.Max(1, randomData.maxValue) + 1); + v2 = Random.Range(Mathf.Min(-1, randomData.minValue), -1 + 1); effectText.text = $"{s1} +{v1}\n{s2} {v2}"; } - else - { - effectText.text = cardData.GetText(); - } + else { effectText.text = cardData.GetText(); } } - public void OnClick() + // 카드 클릭 시 매니저에게 알림 + public void OnClick() { uiManager.OnCardClick(this); } + + // 선택 시 하이라이트 연출 + public void SetSelected(bool isSelected) + { + if (selectionOutline != null) selectionOutline.enabled = isSelected; + transform.localScale = isSelected ? Vector3.one * 1.05f : Vector3.one; + } + + // APPLY 버튼 누를 때 최종 실행될 효과 + public void ApplyCurrentEffect() { if (isRandomCard) { - Debug.Log($"[CardClick] clicked = {gameObject.name}"); - RandomStatCardData randomData = cardData as RandomStatCardData; - randomData.ApplyToPlayer(s1, v1); - randomData.ApplyToPlayer(s2, v2); + RandomStatCardData rd = cardData as RandomStatCardData; + rd.ApplyToPlayer(s1, v1); rd.ApplyToPlayer(s2, v2); } - else - { - cardData.Execute(); - } - - // ⭐ [추가] 카드 선택 직후 플레이어의 체력 UI를 강제로 동기화합니다. - // 씬에서 PlayerHealth 스크립트를 찾아 갱신 함수를 실행합니다. + else { cardData.Execute(); } FindObjectOfType()?.RefreshHealthUI(); - - uiManager.Close(); } } \ No newline at end of file diff --git a/Assets/7.Other Code/Level_Scripts/LevelUpUIManager.cs b/Assets/7.Other Code/Level_Scripts/LevelUpUIManager.cs index aecc429a..96119ee0 100644 --- a/Assets/7.Other Code/Level_Scripts/LevelUpUIManager.cs +++ b/Assets/7.Other Code/Level_Scripts/LevelUpUIManager.cs @@ -1,6 +1,8 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using UnityEngine.UI; // ⭐ 버튼 제어를 위해 필수! + public class LevelUpUIManager : MonoBehaviour { [SerializeField] private GameObject panel; @@ -8,14 +10,23 @@ public class LevelUpUIManager : MonoBehaviour [SerializeField] private Transform cardParent; [SerializeField] private List cardPool; + [Header("--- 확정 버튼 설정 ---")] + // ⭐ 이 변수가 있어야 인스펙터에 Apply Button 칸이 보입니다! + [SerializeField] private Button applyButton; + + private CardUI _selectedCardUI; // 현재 클릭된 카드 저장용 + private void OnEnable() { PlayerLevelSystem.OnLevelUp += Show; + // ⭐ 버튼 클릭 시 OnApplyButtonClick 실행하도록 연결 + if (applyButton != null) applyButton.onClick.AddListener(OnApplyButtonClick); } private void OnDisable() { PlayerLevelSystem.OnLevelUp -= Show; + if (applyButton != null) applyButton.onClick.RemoveListener(OnApplyButtonClick); } void Show() @@ -23,67 +34,60 @@ public class LevelUpUIManager : MonoBehaviour panel.SetActive(true); Time.timeScale = 0f; + _selectedCardUI = null; + if (applyButton != null) applyButton.interactable = false; // 시작 땐 버튼 비활성 + foreach (Transform child in cardParent) Destroy(child.gameObject); int slotCount = 2; - // =============================== - // 🔒 방어 코드 - // =============================== - if (cardPool.Count == 0) - { - Debug.LogWarning("cardPool이 비어 있습니다."); - return; - } - - if (cardPrefabs.Length < slotCount) - { - Debug.LogError("cardPrefabs 개수가 slotCount보다 적습니다."); - return; - } - - // =============================== - // 카드 데이터 선택 - // =============================== + // ⭐ [에러 해결] selectedCards를 여기서 확실히 선언합니다! List selectedCards = new List(); if (cardPool.Count >= slotCount) { - List tempCardPool = new List(cardPool); - + List tempPool = new List(cardPool); for (int i = 0; i < slotCount; i++) { - int index = Random.Range(0, tempCardPool.Count); - selectedCards.Add(tempCardPool[index]); - tempCardPool.RemoveAt(index); + int idx = Random.Range(0, tempPool.Count); + selectedCards.Add(tempPool[idx]); + tempPool.RemoveAt(idx); } } - else + else // 카드 부족 시 순환 { - // ⭐ 카드 부족하면 순환 for (int i = 0; i < slotCount; i++) - { selectedCards.Add(cardPool[i % cardPool.Count]); - } } - // =============================== - // ⭐ 카드 프리팹 중복 제거 - // =============================== - List tempPrefabs = new List(cardPrefabs); - + // 카드 생성 및 셋업 for (int i = 0; i < slotCount; i++) { - int prefabIndex = Random.Range(0, tempPrefabs.Count); - CardUI prefab = tempPrefabs[prefabIndex]; - tempPrefabs.RemoveAt(prefabIndex); - - CardUI ui = Instantiate(prefab, cardParent); - ui.Setup(selectedCards[i], this); + // 프리팹 랜덤 선택 후 생성 + CardUI ui = Instantiate(cardPrefabs[Random.Range(0, cardPrefabs.Length)], cardParent); + ui.Setup(selectedCards[i], this); // ⭐ 이제 selectedCards 에러가 뜨지 않습니다! } } + // 카드를 클릭했을 때 호출 (선택 상태 표시) + public void OnCardClick(CardUI clickedUI) + { + if (_selectedCardUI != null) _selectedCardUI.SetSelected(false); + _selectedCardUI = clickedUI; + _selectedCardUI.SetSelected(true); + + if (applyButton != null) applyButton.interactable = true; // ⭐ 드디어 버튼 활성화! + } + + // APPLY 버튼을 눌렀을 때만 최종 적용! + private void OnApplyButtonClick() + { + if (_selectedCardUI == null) return; + _selectedCardUI.ApplyCurrentEffect(); + Close(); + } + public void Close() { Time.timeScale = 1f;