기능 수정 본

회복 기능,적 아이템 드랍,등등
This commit is contained in:
윤기주_playm 2026-01-30 01:11:10 +09:00
parent 7fc5571229
commit 6e02e36997
54 changed files with 175205 additions and 3241 deletions

6
.vsconfig Normal file
View File

@ -0,0 +1,6 @@
{
"version": "1.0",
"components": [
"Microsoft.VisualStudio.Workload.ManagedGame"
]
}

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,137 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &2446303383318420890
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3025799782783094990}
- component: {fileID: 5181629165223454255}
- component: {fileID: 8155481349403660824}
- component: {fileID: 7074192792704812393}
m_Layer: 5
m_Name: Button
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3025799782783094990
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2446303383318420890}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1.35, y: 1.4755213, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4453836354605041504}
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: 11, y: 6.8989}
m_SizeDelta: {x: 424.81, y: 912.0662}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &5181629165223454255
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2446303383318420890}
m_CullTransparentMesh: 1
--- !u!114 &8155481349403660824
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2446303383318420890}
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: 0}
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!114 &7074192792704812393
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2446303383318420890}
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: 0.29803923}
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.3529412}
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: 8155481349403660824}
m_OnClick:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 2915375020328885252}
m_TargetAssemblyTypeName: CardUI, Assembly-CSharp
m_MethodName: OnClick
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!1 &2917573029234252771
GameObject:
m_ObjectHideFlags: 0
@ -75,138 +207,6 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &8853331006327642263
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5476827160552467812}
- component: {fileID: 7525686119533752030}
- component: {fileID: 7345011398688830183}
- component: {fileID: 8524170200920108267}
m_Layer: 5
m_Name: Button (Legacy)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5476827160552467812
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8853331006327642263}
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: 4453836354605041504}
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.119384766, y: -0.87420654}
m_SizeDelta: {x: -263.68042, y: 60.145813}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7525686119533752030
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8853331006327642263}
m_CullTransparentMesh: 1
--- !u!114 &7345011398688830183
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8853331006327642263}
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: 0}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 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!114 &8524170200920108267
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8853331006327642263}
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: 7345011398688830183}
m_OnClick:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 2915375020328885252}
m_TargetAssemblyTypeName: CardUI, Assembly-CSharp
m_MethodName: OnClick
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!1 &8890404456406163843
GameObject:
m_ObjectHideFlags: 0
@ -240,13 +240,13 @@ RectTransform:
m_Children:
- {fileID: 8819185472527345783}
- {fileID: 2668485627625879991}
- {fileID: 5476827160552467812}
- {fileID: 3025799782783094990}
m_Father: {fileID: 0}
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: 960, y: 1080}
m_SizeDelta: {x: 600, y: 9}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &5751080633427690888
MonoBehaviour:

View File

@ -75,7 +75,7 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &8853331006327642263
--- !u!1 &5389475549025128418
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -83,66 +83,66 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5476827160552467812}
- component: {fileID: 7525686119533752030}
- component: {fileID: 7345011398688830183}
- component: {fileID: 8524170200920108267}
- component: {fileID: 386906002540535627}
- component: {fileID: 767080374659898848}
- component: {fileID: 3237586295723358724}
- component: {fileID: 4429606043910925480}
m_Layer: 5
m_Name: Button (Legacy)
m_Name: Button
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5476827160552467812
--- !u!224 &386906002540535627
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8853331006327642263}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_GameObject: {fileID: 5389475549025128418}
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_LocalScale: {x: 0.6843825, y: -0.85169774, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4453836354605041504}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: -7.1887207, y: 20.371094}
m_SizeDelta: {x: -1233.2982, y: -1023.4315}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 1, y: 21.0337}
m_SizeDelta: {x: 495.47, y: 867.5}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7525686119533752030
--- !u!222 &767080374659898848
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8853331006327642263}
m_GameObject: {fileID: 5389475549025128418}
m_CullTransparentMesh: 1
--- !u!114 &7345011398688830183
--- !u!114 &3237586295723358724
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8853331006327642263}
m_GameObject: {fileID: 5389475549025128418}
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.3490566, g: 0.3490566, b: 0.3490566, a: 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: 1a2eee74e66d4884f911b81bad97ee3c, type: 3}
m_Type: 0
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
@ -151,13 +151,13 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &8524170200920108267
--- !u!114 &4429606043910925480
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8853331006327642263}
m_GameObject: {fileID: 5389475549025128418}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
@ -172,11 +172,11 @@ MonoBehaviour:
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_NormalColor: {r: 1, g: 1, b: 1, a: 0}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 0}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 0}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
@ -191,7 +191,7 @@ MonoBehaviour:
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 7345011398688830183}
m_TargetGraphic: {fileID: 3237586295723358724}
m_OnClick:
m_PersistentCalls:
m_Calls:
@ -240,13 +240,13 @@ RectTransform:
m_Children:
- {fileID: 5013696931507722397}
- {fileID: 8819185472527345783}
- {fileID: 5476827160552467812}
- {fileID: 386906002540535627}
m_Father: {fileID: 0}
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: 960, y: 1080}
m_SizeDelta: {x: 600, y: 900}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &6218283559150764409
MonoBehaviour:

View File

@ -0,0 +1,149 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1171483609561952824
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7683987262845606673}
- component: {fileID: 2541981002438371362}
- component: {fileID: 467663747974855486}
- component: {fileID: 6953187407887973198}
- component: {fileID: 8267757760536181506}
- component: {fileID: 6930922015344191577}
m_Layer: 8
m_Name: Heal Potion
m_TagString: Item
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &7683987262845606673
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1171483609561952824}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 17.420921, y: 8.09, z: 15.23}
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!33 &2541981002438371362
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1171483609561952824}
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &467663747974855486
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1171483609561952824}
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: 10303, guid: 0000000000000000f000000000000000, type: 0}
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!135 &6953187407887973198
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1171483609561952824}
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_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!114 &8267757760536181506
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1171483609561952824}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 758b9b96b3e92b147861fa83856e31c9, type: 3}
m_Name:
m_EditorClassIdentifier:
healAmount: 30
--- !u!54 &6930922015344191577
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1171483609561952824}
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: 80
m_CollisionDetection: 0

View File

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

View File

@ -0,0 +1,121 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &7603101133414256123
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5216897380834477129}
- component: {fileID: 8833972876663021627}
- component: {fileID: 2113351772197486994}
- component: {fileID: 6772475815529408483}
- component: {fileID: 9112013798456009864}
m_Layer: 8
m_Name: Heal Town
m_TagString: Item
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5216897380834477129
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7603101133414256123}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 23.559322, y: 8, z: 6.02}
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!33 &8833972876663021627
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7603101133414256123}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &2113351772197486994
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7603101133414256123}
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: 10303, guid: 0000000000000000f000000000000000, type: 0}
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!114 &6772475815529408483
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7603101133414256123}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: de0cc0f35b02e054faf0780c75d0a720, type: 3}
m_Name:
m_EditorClassIdentifier:
cooldown: 5
--- !u!65 &9112013798456009864
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7603101133414256123}
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: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: afefc46797d7fb34b8210dba61af983f
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c47eef4d0a2e0df45b2a6e92e2aa66f5
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a11694886bde2ed42af34ddd31ee32d0
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1fbfd75b80aeb46449e6c38eb785b6a0
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f5b76388c366cf3428ff8a59ae647dd2
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -33,7 +33,7 @@ AnimatorState:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: AttackAnime3
m_Speed: 1
m_Speed: 1.2
m_CycleOffset: 0
m_Transitions:
- {fileID: -2090382829867684222}
@ -223,7 +223,7 @@ AnimatorState:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: AttackAnime1
m_Speed: 1
m_Speed: 1.5
m_CycleOffset: 0
m_Transitions:
- {fileID: 1629256297439573789}
@ -720,7 +720,7 @@ AnimatorState:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: AttackAnime2
m_Speed: 1
m_Speed: 1.35
m_CycleOffset: 0
m_Transitions:
- {fileID: -5909019315416023657}

View File

@ -9,22 +9,14 @@ public class PlayerAttack : MonoBehaviour
[SerializeField] private PlayerHealth playerHealth;
[SerializeField] private WeaponHitBox weaponHitBox;
[Header("--- 일반 공격 설정 ---")]
[Header("--- 설정 ---")]
[SerializeField] private float attackCooldown = 0.5f;
[Header("--- 단계별 투척 정확도(Spread) 설정 ---")]
[Tooltip("Lv1 (0~1초) 투척 시 오차 범위 (값이 클수록 빗나감)")]
[SerializeField] private float level1Spread = 15f;
[Tooltip("Lv2 (1~2초) 투척 시 오차 범위")]
[SerializeField] private float level2Spread = 7f;
[Tooltip("Lv3 (풀차징) 투척 시 오차 범위 (0이면 100% 명중)")]
[SerializeField] private float level3Spread = 0f;
[SerializeField] private float fullChargeTime = 2f;
[SerializeField] private float fullChargeTime = 2f; // 차징 기준 시간
private float _lastAttackTime, _chargeTimer;
private bool _isCharging;
// UI에서 차징 상태와 진행도를 확인하기 위한 통로
// UI와 이동 스크립트에서 참조하는 통로
public float ChargeProgress => Mathf.Clamp01(_chargeTimer / fullChargeTime);
public bool IsCharging => _isCharging;
@ -34,11 +26,10 @@ public class PlayerAttack : MonoBehaviour
{
_chargeTimer += Time.deltaTime;
// 차징 중 우클릭(1) 시 즉시 취소
if (Input.GetMouseButtonDown(1))
{
CancelCharging();
Debug.Log("차징 취소됨: 아이들 상태로 복귀");
Debug.Log("차징 취소됨");
}
}
}
@ -72,32 +63,36 @@ public class PlayerAttack : MonoBehaviour
pAnim.TriggerThrow();
pAnim.SetCharging(false);
// ⭐ [업그레이드] 정밀 조준을 위한 레이캐스트 방식
// 1. 레이캐스트 정밀 조준
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Plane groundPlane = new Plane(Vector3.up, transform.position); // 캐릭터 발밑 높이의 가상 평면
Plane groundPlane = new Plane(Vector3.up, transform.position);
float rayDistance;
Vector3 targetDirection = transform.forward; // 기본값은 캐릭터 정면
Vector3 targetDirection = transform.forward;
if (groundPlane.Raycast(ray, out rayDistance))
{
Vector3 pointOnGround = ray.GetPoint(rayDistance); // 마우스가 가리키는 실제 땅 지점
Vector3 pointOnGround = ray.GetPoint(rayDistance);
targetDirection = (pointOnGround - transform.position).normalized;
targetDirection.y = 0; // 수평 발사 보정
targetDirection.y = 0;
}
// 마우스 방향으로 캐릭터 즉시 회전
if (targetDirection != Vector3.zero) transform.rotation = Quaternion.LookRotation(targetDirection);
// ⭐ [수정] 인스펙터에서 설정한 단계별 정확도(Spread) 적용
// 2. ⭐ [핵심 수정] 무기 컨피그에서 데이터 직접 가져오기
// 차징 시간에 따라 단계를 나눕니다. (1초 미만 Lv1, 1~2초 Lv2, 2초 이상 Lv3)
int lv = _chargeTimer >= 2f ? 3 : (_chargeTimer >= 1f ? 2 : 1);
float currentSpread = (lv == 3) ? level3Spread : (lv == 2 ? level2Spread : level1Spread);
// 최종 투척 방향 계산 (Spread 적용)
// WeaponConfig에 있는 GetSpread와 GetForce 함수를 사용합니다.
float currentSpread = interaction.CurrentWeapon.Config.GetSpread(lv);
float throwForce = interaction.CurrentWeapon.Config.GetForce(lv);
// 3. 정확도(Spread)가 적용된 최종 방향 계산
Vector3 finalThrowDir = Quaternion.Euler(0, Random.Range(-currentSpread, currentSpread), 0) * targetDirection;
interaction.CurrentWeapon.OnThrown(finalThrowDir, interaction.CurrentWeapon.Config.GetForce(lv), lv, stats);
// 무기 던지기 실행
interaction.CurrentWeapon.OnThrown(finalThrowDir, throwForce, lv, stats);
// 상태 초기화
interaction.ClearCurrentWeapon();
stats.ResetWeight();
_isCharging = false;

View File

@ -0,0 +1,24 @@
using UnityEngine;
using Cinemachine;
public class CinemachineShake : MonoBehaviour
{
public static CinemachineShake Instance { get; private set; }
private CinemachineImpulseSource _impulseSource;
private void Awake()
{
Instance = this;
_impulseSource = GetComponent<CinemachineImpulseSource>();
}
// ⭐ 힘 부족 시 호출할 도리도리 (좌우 흔들림)
public void ShakeNoNo()
{
if (_impulseSource == null) return;
// Vector3.right 방향으로 신호를 주어 좌우로 흔들리게 합니다.
_impulseSource.GenerateImpulse(Vector3.right * 0.5f);
Debug.Log("<color=red>[Shake]</color> 힘 수치 부족! 도리도리 실행");
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: df5024494d479b4498082208d661953d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,16 +1,18 @@
using UnityEngine;
// ⭐ 이 코드가 있으면 스크립트를 붙일 때 컴포넌트 2개가 자동으로 추가됩니다!
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
public class PureUnityFan : MonoBehaviour
{
[Header("--- 참조 ---")]
[SerializeField] private PlayerAttack attackScript; // PlayerAttack 스크립트 연결
[SerializeField] private PlayerAttack attackScript;
[SerializeField] private PlayerInteraction interaction;
[Header("--- 부채꼴 설정 ---")]
[SerializeField] private float radius = 5f; // 부채꼴의 길이 (반지름)
[SerializeField] private int segments = 40; // 부드러움 정도 (높을수록 세련됨)
[SerializeField] private Color fanColor = new Color(1f, 0.9f, 0f, 0.4f); // 노란색 반투명
[SerializeField] private float radius = 5f;
[SerializeField] private int segments = 40;
[SerializeField] private Color fanColor = new Color(1f, 0.9f, 0f, 0.4f);
[Tooltip("풀차징 시에도 유지할 최소 부채꼴 각도 (너무 얇으면 안 보일 수 있음)")]
[SerializeField] private float minAngle = 2f; // ⭐ [추가] 최소 두께 설정
private Mesh _mesh;
private MeshFilter _meshFilter;
@ -22,15 +24,15 @@ public class PureUnityFan : MonoBehaviour
_meshFilter = GetComponent<MeshFilter>();
_meshRenderer = GetComponent<MeshRenderer>();
_meshFilter.mesh = _mesh;
// ⭐ 머테리얼에 유저님이 설정한 색상을 입힙니다.
_meshRenderer.material.color = fanColor;
}
private void Update()
{
// 1. 차징 중이 아닐 때는 부채꼴을 숨깁니다.
if (attackScript == null || !attackScript.IsCharging)
// 1. 참조 확인 및 예외 처리
if (attackScript == null || interaction == null) return;
if (!attackScript.IsCharging || interaction.CurrentWeapon == null)
{
_meshRenderer.enabled = false;
return;
@ -38,27 +40,45 @@ public class PureUnityFan : MonoBehaviour
_meshRenderer.enabled = true;
// 2. 차징 진행도에 따라 각도를 좁힙니다. (시작 60도 -> 풀차징 5도)
float currentAngle = Mathf.Lerp(60f, 5f, attackScript.ChargeProgress);
// 2. 점진적 보간(Lerp)을 통한 부드러운 정확도 계산
float progress = attackScript.ChargeProgress; // 0.0 ~ 1.0
float smoothSpread;
// 3. 실시간으로 메쉬(도형)를 새로 그립니다.
CreateFanMesh(currentAngle);
var config = interaction.CurrentWeapon.Config;
float s1 = config.GetSpread(1); // 시작 정확도
float s2 = config.GetSpread(2); // 중간 정확도
float s3 = config.GetSpread(3); // 최종 정확도 (0)
if (progress < 0.5f)
{
smoothSpread = Mathf.Lerp(s1, s2, progress * 2f);
}
else
{
smoothSpread = Mathf.Lerp(s2, s3, (progress - 0.5f) * 2f);
}
// 3. ⭐ [핵심 수정] 계산된 각도가 설정한 최소 각도보다 작아지지 않도록 제한
// (WeaponConfig에서 0을 반환하더라도, UI는 최소 minAngle만큼은 유지함)
float targetAngle = Mathf.Max(smoothSpread * 2f, minAngle);
CreateFanMesh(targetAngle);
}
private void CreateFanMesh(float angle)
{
// 메쉬 생성 로직 (기존과 동일)
int vertexCount = segments + 2;
Vector3[] vertices = new Vector3[vertexCount];
int[] triangles = new int[segments * 3];
vertices[0] = Vector3.zero; // 부채꼴의 시작점 (캐릭터 발밑)
vertices[0] = Vector3.zero;
float halfAngle = angle / 2f;
for (int i = 0; i <= segments; i++)
{
float currAngle = Mathf.Lerp(-halfAngle, halfAngle, (float)i / segments);
float rad = currAngle * Mathf.Deg2Rad;
// 캐릭터 정면 방향으로 부채꼴의 꼭짓점들을 배치합니다.
vertices[i + 1] = new Vector3(Mathf.Sin(rad), 0, Mathf.Cos(rad)) * radius;
if (i < segments)
@ -72,6 +92,6 @@ public class PureUnityFan : MonoBehaviour
_mesh.Clear();
_mesh.vertices = vertices;
_mesh.triangles = triangles;
_mesh.RecalculateNormals(); // 빛 반사를 위해 법선 벡터 재계산
_mesh.RecalculateNormals();
}
}

View File

@ -1,34 +1,37 @@
using UnityEngine;
using UnityEngine.UI;
using TMPro; // ⭐ TextMeshPro 사용을 위해 필수!
using UnityEngine.UI; // ⭐ Image 컴포넌트 사용을 위해 필수!
using TMPro;
public class HPUibar : MonoBehaviour
{
[Header("--- 참조 ---")]
[SerializeField] private MonoBehaviour healthSource;
[SerializeField] private Slider hpSlider;
[SerializeField] private TextMeshProUGUI hpText; // ⭐ 유저님이 만든 그 텍스트를 여기에 연결하세요!
// ⭐ [수정] Slider 대신 Image 타입을 사용합니다.
[SerializeField] private Image hpFillImage;
[SerializeField] private TextMeshProUGUI hpText;
private void Start()
{
// 1. 플레이어, 더미, 몬스터, 적 체력 스크립트 모두 대응 가능하도록 연결
// 1. 체력 소스 연결 (플레이어, 더미, 몬스터 등 모두 대응)
if (healthSource is PlayerHealth ph) ph.OnHealthChanged += UpdateUI;
else if (healthSource is TrainingDummy td) td.OnHealthChanged += UpdateUI;
else if (healthSource is EnemyHealth eh) eh.OnHealthChanged += UpdateUI; // 추가
else if (healthSource is MonsterClass mc) mc.OnHealthChanged += UpdateUI; // 추가
else if (healthSource is EnemyHealth eh) eh.OnHealthChanged += UpdateUI;
else if (healthSource is MonsterClass mc) mc.OnHealthChanged += UpdateUI;
if (hpSlider != null) hpSlider.value = 1f;
// 시작 시 풀피로 설정
if (hpFillImage != null) hpFillImage.fillAmount = 1f;
}
private void UpdateUI(float current, float max)
{
// 슬라이더 바 업데이트
if (hpSlider != null && max > 0)
// 2. ⭐ [핵심 수정] 이미지의 fillAmount를 0 ~ 1 사이 값으로 조절합니다.
if (hpFillImage != null && max > 0)
{
hpSlider.value = current / max;
hpFillImage.fillAmount = current / max;
}
// ⭐ 글자 업데이트: "현재 체력 / 최대 체력" 형식
// Mathf.CeilToInt를 써서 소수점 없이 정수로 예쁘게 보여줍니다.
// 텍스트 업데이트
if (hpText != null)
{
hpText.text = $"{Mathf.CeilToInt(current)} / {Mathf.CeilToInt(max)}";
@ -37,12 +40,14 @@ public class HPUibar : MonoBehaviour
private void LateUpdate()
{
// 체력바가 항상 카메라를 바라보게 함 (빌보드 효과)
if (Camera.main != null)
transform.LookAt(transform.position + Camera.main.transform.forward);
}
private void OnDestroy()
{
// 이벤트 해제 (메모리 누수 방지)
if (healthSource is PlayerHealth ph) ph.OnHealthChanged -= UpdateUI;
else if (healthSource is TrainingDummy td) td.OnHealthChanged -= UpdateUI;
else if (healthSource is EnemyHealth eh) eh.OnHealthChanged -= UpdateUI;

View File

@ -4,10 +4,10 @@ using System;
public class PlayerHealth : MonoBehaviour, IDamageable
{
[SerializeField] private Stats stats;
[SerializeField] private Animator animator; // ⭐ 애니메이터 연결용
[SerializeField] private Animator animator;
public bool IsDead { get; private set; }
public bool isHit { get; private set; } // ⭐ 공격 스크립트에서 참조할 변수
public bool isHit { get; private set; }
public event Action OnHit, OnDead;
public event Action<float, float> OnHealthChanged;
@ -21,43 +21,46 @@ public class PlayerHealth : MonoBehaviour, IDamageable
_currentHealth = stats.MaxHealth;
OnHealthChanged?.Invoke(_currentHealth, stats.MaxHealth);
}
// 애니메이터가 할당 안 되어 있으면 가져오기
if (animator == null) animator = GetComponent<Animator>();
}
// ⭐ [최종 수정] 최대 체력 변동 시 호출: 피는 안 채우되, 그릇(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}");
}
}
}
// ... (TakeDamage 등 나머지 기존 코드 유지)
public void TakeDamage(float amount)
{
if (IsDead) return;
_currentHealth = Mathf.Max(0, _currentHealth - amount);
OnHealthChanged?.Invoke(_currentHealth, stats.MaxHealth);
OnHit?.Invoke();
// ⭐ 피격 경직 시작
if (!IsDead) StartHit();
if (_currentHealth <= 0) Die();
}
private void StartHit()
{
isHit = true;
// 피격 애니메이션 재생 (이름이 다르면 수정하세요)
if (animator != null) animator.Play("Player_Hit", 0, 0f);
// ⭐ 안전장치: 0.4초 뒤에는 무조건 경직 해제
if (animator != null) animator.Play("HitAnime", 0, 0f);
CancelInvoke(nameof(OnHitEnd));
Invoke(nameof(OnHitEnd), 0.05f);
}
// ⭐ 애니메이션 이벤트 혹은 Invoke로 호출f
public void OnHitEnd()
{
isHit = false;
}
public void OnHitEnd() { isHit = false; }
private void Die()
{
IsDead = true;
@ -65,4 +68,14 @@ public class PlayerHealth : MonoBehaviour, IDamageable
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);
}
}

View File

@ -0,0 +1,29 @@
using UnityEngine;
public class HealthAltar : MonoBehaviour
{
[Header("--- 제단 설정 ---")]
[SerializeField] private float cooldown = 60f; // 재사용 대기시간
private float _nextUseTime = 0f;
// PlayerInteraction에서 호출할 함수
public void Use(PlayerHealth target)
{
if (target == null) return;
if (Time.time >= _nextUseTime)
{
// 제단은 강력하니까 풀피로 채워줍니다.
target.Heal(9999f);
_nextUseTime = Time.time + cooldown; // 쿨타임 설정
Debug.Log("<color=cyan>[Altar]</color> 제단 사용! 기운이 넘칩니다.");
}
else
{
float remaining = Mathf.Ceil(_nextUseTime - Time.time);
Debug.Log($"<color=yellow>[Altar]</color> 아직 기운이 모이지 않았습니다. ({remaining}초 남음)");
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: de0cc0f35b02e054faf0780c75d0a720
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,18 @@
using UnityEngine;
public class HealthPotion : MonoBehaviour
{
[Header("--- 포션 설정 ---")]
[SerializeField] private float healAmount = 30f; // 회복량
// PlayerInteraction에서 호출할 함수
public void Use(PlayerHealth target)
{
if (target == null) return;
target.Heal(healAmount); // 플레이어 체력 회복
Debug.Log($"<color=green>[Potion]</color> 체력 {healAmount} 회복!");
Destroy(gameObject); // 사용 후 아이템 삭제
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 758b9b96b3e92b147861fa83856e31c9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -13,34 +13,49 @@ public class PlayerInteraction : MonoBehaviour
public void TryInteract()
{
// 1. 주변에 아이템이 있는지 확인합니다.
Collider[] hits = Physics.OverlapSphere(transform.position, interactRange, itemLayer);
foreach (var hit in hits)
{
// 1. 무기 상호작용
if (hit.TryGetComponent<EquippableItem>(out var item))
{
// 2. 힘(Strength) 조건이 맞는지 체크합니다.
if (playerStats.Strength >= item.Config.RequiredStrength)
{
// 3. 이미 무기를 들고 있다면 바닥에 버립니다.
if (_currentWeapon != null) _currentWeapon.OnDropped(transform.forward);
// 4. 새로운 무기를 장착합니다.
_currentWeapon = item;
_currentWeapon.OnPickedUp(handSlot);
// ⭐ [추가] 무기를 줍는 순간 황금빛 하이라이트를 끕니다.
if (item.TryGetComponent<ItemHighlight>(out var highlight))
EquipWeapon(item);
break;
}
else
{
highlight.StopHighlight();
// ⭐ [핵심 수정] 힘이 부족하면 카메라를 흔듭니다!
CinemachineShake.Instance?.ShakeNoNo();
Debug.Log($"힘 부족! 필요: {item.Config.RequiredStrength}, 현재: {playerStats.Strength}");
continue;
}
}
playerStats.UpdateWeaponWeight(item.Config.RequiredStrength);
// 2. 포션 상호작용
if (hit.TryGetComponent<HealthPotion>(out var potion))
{
potion.Use(GetComponent<PlayerHealth>());
break;
}
// 3. 제단 상호작용
if (hit.TryGetComponent<HealthAltar>(out var altar))
{
altar.Use(GetComponent<PlayerHealth>());
break;
}
}
}
private void EquipWeapon(EquippableItem item)
{
if (_currentWeapon != null) _currentWeapon.OnDropped(transform.forward);
_currentWeapon = item;
_currentWeapon.OnPickedUp(handSlot);
playerStats.UpdateWeaponWeight(item.Config.RequiredStrength);
}
public void ClearCurrentWeapon() => _currentWeapon = null;

View File

@ -2,9 +2,16 @@
public class PlayerMovement : MonoBehaviour
{
[Header("--- 참조 ---")]
[SerializeField] private Stats stats;
[SerializeField] private PlayerHealth health;
[SerializeField] private PlayerAnimator pAnim;
[SerializeField] private PlayerAttack attackScript; // ⭐ 차징 상태 확인용 추가
[Header("--- 차징 감속 설정 ---")]
[Range(0.1f, 1f)]
[Tooltip("풀차징 시 원래 속도의 몇 %로 줄일지 설정 (0.3 = 30% 속도)")]
[SerializeField] private float minSpeedMultiplier = 0.3f; //
private Vector3 _moveDir;
private bool _isSprinting;
@ -20,15 +27,32 @@ public class PlayerMovement : MonoBehaviour
return;
}
// 이동 처리
// 1. 기본 이동 속도 결정
float speed = _isSprinting ? stats.CurrentRunSpeed : stats.CurrentMoveSpeed;
// 2. ⭐ [추가] 차징 진행도에 따른 점진적 감속 로직
if (attackScript != null && attackScript.IsCharging)
{
// ChargeProgress ($0 \sim 1$)에 따라 1.0(정상)에서 minSpeedMultiplier(최소)까지 부드럽게 감소
// 예: 풀차징 시 원래 속도의 30%만 사용
float speedReduction = Mathf.Lerp(1.0f, minSpeedMultiplier, attackScript.ChargeProgress);
speed *= speedReduction;
}
// 3. 이동 처리
transform.Translate(_moveDir * speed * Time.deltaTime, Space.World);
// ⭐ 애니메이션 연동: Speed 값 전송 (0:정지, 0.5:걷기, 1.0:뛰기)
// 4. ⭐ 애니메이션 연동
if (pAnim != null)
{
// 입력이 있을 때만 0.5(걷기) 또는 1.0(뛰기) 전송
float animVal = _moveDir.magnitude > 0.1f ? (_isSprinting ? 1.0f : 0.5f) : 0f;
// ⭐ 차징 중이면 걷는 애니메이션 속도도 살짝 늦춰서 묵직함을 더함
if (attackScript != null && attackScript.IsCharging)
{
animVal *= 0.5f;
}
pAnim.UpdateMove(animVal);
}
}

View File

@ -10,43 +10,17 @@ public class Stats : MonoBehaviour
[SerializeField] private float baseStrength = 10f;
[SerializeField] private float baseAttackDamage = 10f;
/* =========================
* ( / )
* ========================= */
[Header("--- 보너스 능력치 ---")]
public float bonusMaxHealth;
public float bonusMoveSpeed;
public float bonusStrength;
public float bonusAttackDamage;
/* =========================
*
* ========================= */
[Header("--- 밸런스 설정 (인스펙터) ---")]
[Tooltip("무게 1당 줄어드는 이동 속도")]
[Header("--- 밸런스 설정 ---")]
[SerializeField] private float weightToSpeedPenalty = 0.1f;
[SerializeField] private float runSpeedMultiplier = 1.5f;
private float _weightPenalty = 0f;
/* =========================
* ( / )
* ========================= */
[Header("--- 최종 능력치 (Read Only) ---")]
[SerializeField] private float finalMaxHealth;
[SerializeField] private float finalMoveSpeed;
[SerializeField] private float finalStrength;
[SerializeField] private float finalAttackDamage;
private void Update()
{
// ⭐ 인스펙터 표시용 계산
finalMaxHealth = MaxHealth;
finalMoveSpeed = CurrentMoveSpeed;
finalStrength = Strength;
finalAttackDamage = BaseAttackDamage;
}
/* =========================
*
* ========================= */
@ -54,21 +28,38 @@ public class Stats : MonoBehaviour
public float Strength => baseStrength + bonusStrength;
public float BaseAttackDamage => baseAttackDamage + bonusAttackDamage;
public float CurrentMoveSpeed =>
Mathf.Max(1f, baseMoveSpeed + bonusMoveSpeed - _weightPenalty);
// ⭐ [에러 해결] 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}");
}
public void AddMaxHealth(float value) => bonusMaxHealth += value;
public void AddMoveSpeed(float value) => bonusMoveSpeed += value;
public void AddStrength(float value) => bonusStrength += value;
public void AddAttackDamage(float value) => bonusAttackDamage += value;
public void UpdateWeaponWeight(float requiredStrength)
=> _weightPenalty = requiredStrength * weightToSpeedPenalty;
public void UpdateWeaponWeight(float requiredStrength) => _weightPenalty = requiredStrength * weightToSpeedPenalty;
public void ResetWeight() => _weightPenalty = 0f;
[Header("--- 최종 능력치 (Read Only) ---")]
[SerializeField] private float finalMaxHealth;
[SerializeField] private float finalMoveSpeed;
[SerializeField] private float finalStrength;
[SerializeField] private float finalAttackDamage;
}

View File

@ -21,12 +21,19 @@ public class WeaponConfig : ScriptableObject
[Header("차징 단계별 설정 (인스펙터 수정)")]
[SerializeField] private float forceLv1 = 10f;
[SerializeField] private float spreadLv1 = 25f; //
[SerializeField] private float spreadLv1 = 25f;
[SerializeField] private float forceLv2 = 18f;
[SerializeField] private float spreadLv2 = 8f;
[SerializeField] private float forceLv3 = 28f;
[SerializeField] private float spreadLv3 = 0f;
// Lv3 Spread는 인스펙터에서 보이지 않게 하거나, 로직에서 무시하도록 처리합니다.
// ⭐ 힘(Force)은 단계별로 가져옵니다.
public float GetForce(int lv) => lv == 3 ? forceLv3 : (lv == 2 ? forceLv2 : forceLv1);
public float GetSpread(int lv) => lv == 3 ? spreadLv3 : (lv == 2 ? spreadLv2 : spreadLv1);
// ⭐ [수정] 정확도(Spread) 로직: 3단계는 무조건 0(직선) 반환!
public float GetSpread(int lv)
{
if (lv == 3) return 0f; // 풀차징은 무조건 일자로 날아감
return (lv == 2) ? spreadLv2 : spreadLv1;
}
}

View File

@ -18,8 +18,7 @@ MonoBehaviour:
chargingBool: IsCharging
throwTrigger: Throw
forceLv1: 10
spreadLv1: 25
spreadLv1: 40.7
forceLv2: 18
spreadLv2: 8
spreadLv2: 21.41
forceLv3: 28
spreadLv3: 0

View File

@ -10,7 +10,6 @@ public class CardUI : MonoBehaviour
private CardData cardData;
private LevelUpUIManager uiManager;
// ⭐ [핵심] 이 버튼이 직접 기억할 능력치 메모지
private StatType s1, s2;
private int v1, v2;
private bool isRandomCard = false;
@ -24,24 +23,13 @@ public class CardUI : MonoBehaviour
if (randomData != null)
{
isRandomCard = true;
// ⭐ 파일에 저장하는 게 아니라, 이 '버튼'의 변수에 직접 저장합니다.
// 이렇게 하면 버튼마다 다른 숫자를 가질 수 있습니다.
s1 = randomData.possibleStats[Random.Range(0, randomData.possibleStats.Length)];
do
{
s2 = randomData.possibleStats[Random.Range(0, randomData.possibleStats.Length)];
} while (s1 == s2);
do { s2 = randomData.possibleStats[Random.Range(0, randomData.possibleStats.Length)]; } while (s1 == s2);
v1 = Random.Range(randomData.minValue, randomData.maxValue + 1);
v2 = -Random.Range(randomData.minValue, randomData.maxValue + 1);
effectText.text = $"{s1} +{v1}\n{s2} {v2}";
}
else
{
effectText.text = cardData.GetText();
}
else { effectText.text = cardData.GetText(); }
iconImage.sprite = cardData.icon;
}
@ -50,7 +38,6 @@ public class CardUI : MonoBehaviour
if (isRandomCard)
{
Debug.Log($"[CardClick] clicked = {gameObject.name}");
// ⭐ 내가(버튼이) 기억하고 있는 그 수치를 플레이어에게 적용합니다.
RandomStatCardData randomData = cardData as RandomStatCardData;
randomData.ApplyToPlayer(s1, v1);
randomData.ApplyToPlayer(s2, v2);
@ -59,6 +46,11 @@ public class CardUI : MonoBehaviour
{
cardData.Execute();
}
// ⭐ [추가] 카드 선택 직후 플레이어의 체력 UI를 강제로 동기화합니다.
// 씬에서 PlayerHealth 스크립트를 찾아 갱신 함수를 실행합니다.
FindObjectOfType<PlayerHealth>()?.RefreshHealthUI();
uiManager.Close();
}
}

View File

@ -30,6 +30,14 @@ public class MonsterClass : MonoBehaviour, IDamageable
[SerializeField] protected ParticleSystem hitEffect;
[SerializeField] protected Transform impactSpawnPoint;
[Header("--- 드랍 설정 ---")]
[SerializeField] private GameObject potionPrefab;
[SerializeField][Range(0f, 100f)] private float potionDropChance = 30f;
[Space(10)]
[SerializeField] private GameObject[] weaponPrefabs;
[SerializeField][Range(0f, 100f)] private float weaponDropChance = 5f;
protected virtual void Start()
{
currentHP = maxHP;
@ -39,14 +47,12 @@ public class MonsterClass : MonoBehaviour, IDamageable
OnHealthChanged?.Invoke(currentHP, maxHP);
}
// ⭐ 핵심: 부모에서 virtual을 붙여야 NormalMonster에서 에러가 안 납니다.
public virtual void TakeDamage(float amount) { OnDamaged(amount); }
public virtual void OnDamaged(float damage)
{
if (isDead) return;
currentHP -= damage;
Debug.Log($"{gameObject.name} 피격! 체력: {{{currentHP}/{maxHP}}}");
OnHealthChanged?.Invoke(currentHP, maxHP);
if (currentHP <= 0) { Die(); return; }
@ -69,18 +75,57 @@ public class MonsterClass : MonoBehaviour, IDamageable
if (isDead) return;
isDead = true;
// ⭐ 핵심 수정: 애니메이션 신호 기다리지 말고 즉시 처리
Debug.Log($"{gameObject.name} 사망! 경험치 {expReward} 지급 및 1.5초 후 파괴.");
OnMonsterKilled?.Invoke(expReward);
// 몬스터 사망 시 아이템 드랍
TryDropItems();
if (agent && agent.isOnNavMesh) { agent.isStopped = true; agent.velocity = Vector3.zero; }
animator.Play(Monster_Die, 0, 0f);
if (deathSound) audioSource.PlayOneShot(deathSound);
// 1.5초 뒤 자동 삭제 (이벤트 씹힘 방지)
Destroy(gameObject, 1.5f);
}
// 에러 방지용으로 남겨만 둠
private void TryDropItems()
{
// 1. 포션 드랍 체크
if (potionPrefab != null && UnityEngine.Random.Range(0f, 100f) <= potionDropChance)
{
SpawnItem(potionPrefab);
}
// 2. 무기 드랍 체크
if (weaponPrefabs != null && weaponPrefabs.Length > 0 && UnityEngine.Random.Range(0f, 100f) <= weaponDropChance)
{
int randomIndex = UnityEngine.Random.Range(0, weaponPrefabs.Length);
SpawnItem(weaponPrefabs[randomIndex]);
}
}
// ⭐ [최종 수정] 아이템 생성 함수
private void SpawnItem(GameObject prefab)
{
Vector3 spawnPos = transform.position + Vector3.up * 0.5f;
GameObject item = Instantiate(prefab, spawnPos, Quaternion.identity);
// ✅ [유저 요청] 인스펙터 변수 없이 '프리팹의 원래 크기'를 그대로 적용합니다.
item.transform.localScale = prefab.transform.localScale;
// 아이템이 몬스터 몸 안에서 나오는 느낌을 위해 살짝 위로만 튀게 합니다.
if (item.TryGetComponent<Rigidbody>(out var rb))
{
// 위로 톡 튀어오르게 함 (마찰력 등은 유저님이 리지드바디에서 설정한 대로 돌아감)
Vector3 popDir = Vector3.up * 3f + UnityEngine.Random.insideUnitSphere * 0.5f;
rb.AddForce(popDir, ForceMode.Impulse);
// 무기일 경우만 약간의 회전을 줘서 역동적으로 떨어지게 합니다.
if (prefab != potionPrefab)
{
rb.AddTorque(UnityEngine.Random.insideUnitSphere * 5f, ForceMode.Impulse);
}
}
}
public void OnDeathAnimEnd() { }
}

View File

@ -6,18 +6,19 @@ using UnityEngine.UI;
public class PlayerLevelSystem : MonoBehaviour
{
[Header("레벨")]
[Header("--- 참조 ---")]
[SerializeField] private Stats stats;
[SerializeField] private PlayerHealth pHealth;
[Header("레벨 설정")]
public int level = 1;
public int currentExp = 0;
[Header("레벨업 경험치 테이블")]
[Tooltip("index 0 = Lv1 → Lv2 필요 경험치")]
[SerializeField] private int[] expTable;
[Header("UI")]
[SerializeField] private Image expFillImage;
[SerializeField] private TextMeshProUGUI expText;
[SerializeField] private TextMeshProUGUI levelText; // ⭐ 추가
[SerializeField] private TextMeshProUGUI levelText;
public static System.Action OnLevelUp;
@ -26,10 +27,7 @@ public class PlayerLevelSystem : MonoBehaviour
get
{
int index = level - 1;
if (index >= expTable.Length)
return expTable[expTable.Length - 1];
if (index >= expTable.Length) return expTable[expTable.Length - 1];
return expTable[index];
}
}
@ -47,39 +45,51 @@ public class PlayerLevelSystem : MonoBehaviour
void GainExp(int amount)
{
Debug.Log($"몬스터 처치! 얻은 경험치: {amount}");
currentExp += amount;
while (currentExp >= RequiredExp)
{
Debug.Log("레벨업 조건 달성! Show 호출 준비");
currentExp -= RequiredExp;
LevelUp();
}
UpdateExpUI();
}
void LevelUp()
{
if (level >= expTable.Length + 1)
{
currentExp = 0;
return;
}
if (level >= expTable.Length + 1) { currentExp = 0; return; }
level++;
Debug.Log($"🎉 레벨 업! 현재 레벨: {level}");
Debug.Log($"🎉 [LevelSystem] 레벨 업! 현재 레벨: {level}");
OnLevelUp?.Invoke(); // ⭐ 레벨업 알림
// 1. 기초 스탯 먼저 상승 (체력 +1000, 힘 +100 - 유저님 설정값)
if (stats != null) stats.AddBaseLevelUpStats(1000f, 100f);
// 2. ⭐ [핵심] 늘어난 스탯으로 피 채우고 UI 즉시 갱신 함수 호출
if (pHealth != null)
{
pHealth.RefreshHealthUI();
}
else
{
Debug.LogError("[LevelSystem] pHealth 참조가 비어있습니다! 인스펙터에 PlayerHealth를 드래그해서 넣어주세요.");
}
// 3. 1.5초 대기 후 카드 선택 UI 팝업
StartCoroutine(DelayedCardPopup());
}
private IEnumerator DelayedCardPopup()
{
yield return new WaitForSeconds(1.5f);
Debug.Log("1.5초 경과: 카드 UI 팝업 실행");
OnLevelUp?.Invoke();
}
void UpdateExpUI()
{
float fill = (float)currentExp / RequiredExp;
expFillImage.fillAmount = fill;
expText.text = $"{currentExp} / {RequiredExp}";
levelText.text = $"Lv. {level}"; // ⭐ 레벨 표시
if (expFillImage != null) expFillImage.fillAmount = fill;
if (expText != null) expText.text = $"{currentExp} / {RequiredExp}";
if (levelText != null) levelText.text = $"Lv. {level}";
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 380 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 717 KiB

View File

@ -1,114 +0,0 @@
fileFormatVersion: 2
guid: 2f21371ce2c9e594eb9328cc03ad11d3
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/8.Image/HP_Bar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 80a98722dc81068418fae0cc878518fe
guid: dc43be502c015fe4d9dd9b3809009d34
TextureImporter:
internalIDToNameTable: []
externalObjects: {}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 514 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 318 KiB

View File

@ -1,114 +0,0 @@
fileFormatVersion: 2
guid: 021113da211eb9449be8f6b80d55b4ef
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

View File

@ -1,12 +1,12 @@
fileFormatVersion: 2
guid: 0a231f2474aacc8489d3af0eca4e04a4
guid: e2e87e71ff36bb7468e02533671a6a33
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@ -99,7 +99,7 @@ TextureImporter:
outline: []
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 414 KiB

View File

@ -1,114 +0,0 @@
fileFormatVersion: 2
guid: 9d01141fb485e3d46ab27acaa9135971
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant: