기능 수정 본
회복 기능,적 아이템 드랍,등등
6
.vsconfig
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.VisualStudio.Workload.ManagedGame"
|
||||
]
|
||||
}
|
||||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
149
Assets/1.myPrefab/Heal Potion.prefab
Normal 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
|
||||
7
Assets/1.myPrefab/Heal Potion.prefab.meta
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5d18660a7620e4e48bb1462c7e0e1187
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
121
Assets/1.myPrefab/Heal Town.prefab
Normal 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}
|
||||
7
Assets/1.myPrefab/Heal Town.prefab.meta
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 33af596d13aac764b9e7392d5b186c0f
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
1265
Assets/1.myPrefab/Player Canvas.prefab
Normal file
7
Assets/1.myPrefab/Player Canvas.prefab.meta
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 170402bbc3664ad4e883fa0a805efcb0
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/4.PlayerAnimation/Player Anime.meta
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 275b0cebac700c948b353301c79799d5
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
64063
Assets/4.PlayerAnimation/Player Anime/AttackAnime1.anim
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: afefc46797d7fb34b8210dba61af983f
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
23376
Assets/4.PlayerAnimation/Player Anime/AttackAnime2.anim
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c47eef4d0a2e0df45b2a6e92e2aa66f5
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
33118
Assets/4.PlayerAnimation/Player Anime/AttackAnime3.anim
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: a11694886bde2ed42af34ddd31ee32d0
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
19145
Assets/4.PlayerAnimation/Player Anime/ThrowAnime1.anim
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1fbfd75b80aeb46449e6c38eb785b6a0
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
32726
Assets/4.PlayerAnimation/Player Anime/ThrowAnime2.anim
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f5b76388c366cf3428ff8a59ae647dd2
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
24
Assets/5.TestScript/CamShake.cs
Normal 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> 힘 수치 부족! 도리도리 실행");
|
||||
}
|
||||
}
|
||||
11
Assets/5.TestScript/CamShake.cs.meta
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: df5024494d479b4498082208d661953d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
29
Assets/5.TestScript/HealthAltar.cs
Normal 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}초 남음)");
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/5.TestScript/HealthAltar.cs.meta
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: de0cc0f35b02e054faf0780c75d0a720
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
18
Assets/5.TestScript/HealthPotion.cs
Normal 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); // 사용 후 아이템 삭제
|
||||
}
|
||||
}
|
||||
11
Assets/5.TestScript/HealthPotion.cs.meta
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 758b9b96b3e92b147861fa83856e31c9
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -13,35 +13,50 @@ 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))
|
||||
{
|
||||
highlight.StopHighlight();
|
||||
}
|
||||
|
||||
playerStats.UpdateWeaponWeight(item.Config.RequiredStrength);
|
||||
EquipWeapon(item);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
// ⭐ [핵심 수정] 힘이 부족하면 카메라를 흔듭니다!
|
||||
CinemachineShake.Instance?.ShakeNoNo();
|
||||
Debug.Log($"힘 부족! 필요: {item.Config.RequiredStrength}, 현재: {playerStats.Strength}");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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() { }
|
||||
}
|
||||
|
|
@ -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}";
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 380 KiB |
|
Before Width: | Height: | Size: 717 KiB |
|
|
@ -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
|
After Width: | Height: | Size: 216 KiB |
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 80a98722dc81068418fae0cc878518fe
|
||||
guid: dc43be502c015fe4d9dd9b3809009d34
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
Before Width: | Height: | Size: 514 KiB |
|
Before Width: | Height: | Size: 318 KiB |
|
|
@ -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:
|
||||
BIN
Assets/8.Image/LevelIcon.png
Normal file
|
After Width: | Height: | Size: 258 KiB |
|
|
@ -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:
|
||||
|
Before Width: | Height: | Size: 414 KiB |
|
|
@ -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:
|
||||