기능 수정 본
회복 기능,적 아이템 드랍,등등
6
.vsconfig
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"version": "1.0",
|
||||||
|
"components": [
|
||||||
|
"Microsoft.VisualStudio.Workload.ManagedGame"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,137 @@
|
||||||
%YAML 1.1
|
%YAML 1.1
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
%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
|
--- !u!1 &2917573029234252771
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|
@ -75,138 +207,6 @@ MonoBehaviour:
|
||||||
m_FillOrigin: 0
|
m_FillOrigin: 0
|
||||||
m_UseSpriteMesh: 0
|
m_UseSpriteMesh: 0
|
||||||
m_PixelsPerUnitMultiplier: 1
|
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
|
--- !u!1 &8890404456406163843
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|
@ -240,13 +240,13 @@ RectTransform:
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 8819185472527345783}
|
- {fileID: 8819185472527345783}
|
||||||
- {fileID: 2668485627625879991}
|
- {fileID: 2668485627625879991}
|
||||||
- {fileID: 5476827160552467812}
|
- {fileID: 3025799782783094990}
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
m_AnchoredPosition: {x: 0, y: 0}
|
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}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!114 &5751080633427690888
|
--- !u!114 &5751080633427690888
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ MonoBehaviour:
|
||||||
m_FillOrigin: 0
|
m_FillOrigin: 0
|
||||||
m_UseSpriteMesh: 0
|
m_UseSpriteMesh: 0
|
||||||
m_PixelsPerUnitMultiplier: 1
|
m_PixelsPerUnitMultiplier: 1
|
||||||
--- !u!1 &8853331006327642263
|
--- !u!1 &5389475549025128418
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
|
@ -83,66 +83,66 @@ GameObject:
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
serializedVersion: 6
|
serializedVersion: 6
|
||||||
m_Component:
|
m_Component:
|
||||||
- component: {fileID: 5476827160552467812}
|
- component: {fileID: 386906002540535627}
|
||||||
- component: {fileID: 7525686119533752030}
|
- component: {fileID: 767080374659898848}
|
||||||
- component: {fileID: 7345011398688830183}
|
- component: {fileID: 3237586295723358724}
|
||||||
- component: {fileID: 8524170200920108267}
|
- component: {fileID: 4429606043910925480}
|
||||||
m_Layer: 5
|
m_Layer: 5
|
||||||
m_Name: Button (Legacy)
|
m_Name: Button
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
||||||
m_StaticEditorFlags: 0
|
m_StaticEditorFlags: 0
|
||||||
m_IsActive: 1
|
m_IsActive: 1
|
||||||
--- !u!224 &5476827160552467812
|
--- !u!224 &386906002540535627
|
||||||
RectTransform:
|
RectTransform:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 8853331006327642263}
|
m_GameObject: {fileID: 5389475549025128418}
|
||||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
m_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_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 4453836354605041504}
|
m_Father: {fileID: 4453836354605041504}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 0}
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
m_AnchorMax: {x: 1, y: 1}
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
m_AnchoredPosition: {x: -7.1887207, y: 20.371094}
|
m_AnchoredPosition: {x: 1, y: 21.0337}
|
||||||
m_SizeDelta: {x: -1233.2982, y: -1023.4315}
|
m_SizeDelta: {x: 495.47, y: 867.5}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!222 &7525686119533752030
|
--- !u!222 &767080374659898848
|
||||||
CanvasRenderer:
|
CanvasRenderer:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 8853331006327642263}
|
m_GameObject: {fileID: 5389475549025128418}
|
||||||
m_CullTransparentMesh: 1
|
m_CullTransparentMesh: 1
|
||||||
--- !u!114 &7345011398688830183
|
--- !u!114 &3237586295723358724
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 8853331006327642263}
|
m_GameObject: {fileID: 5389475549025128418}
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_EditorHideFlags: 0
|
m_EditorHideFlags: 0
|
||||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
m_Material: {fileID: 0}
|
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_RaycastTarget: 1
|
||||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
m_Maskable: 1
|
m_Maskable: 1
|
||||||
m_OnCullStateChanged:
|
m_OnCullStateChanged:
|
||||||
m_PersistentCalls:
|
m_PersistentCalls:
|
||||||
m_Calls: []
|
m_Calls: []
|
||||||
m_Sprite: {fileID: 21300000, guid: 1a2eee74e66d4884f911b81bad97ee3c, type: 3}
|
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
m_Type: 0
|
m_Type: 1
|
||||||
m_PreserveAspect: 0
|
m_PreserveAspect: 0
|
||||||
m_FillCenter: 1
|
m_FillCenter: 1
|
||||||
m_FillMethod: 4
|
m_FillMethod: 4
|
||||||
|
|
@ -151,13 +151,13 @@ MonoBehaviour:
|
||||||
m_FillOrigin: 0
|
m_FillOrigin: 0
|
||||||
m_UseSpriteMesh: 0
|
m_UseSpriteMesh: 0
|
||||||
m_PixelsPerUnitMultiplier: 1
|
m_PixelsPerUnitMultiplier: 1
|
||||||
--- !u!114 &8524170200920108267
|
--- !u!114 &4429606043910925480
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 8853331006327642263}
|
m_GameObject: {fileID: 5389475549025128418}
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_EditorHideFlags: 0
|
m_EditorHideFlags: 0
|
||||||
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
|
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
|
||||||
|
|
@ -172,11 +172,11 @@ MonoBehaviour:
|
||||||
m_SelectOnRight: {fileID: 0}
|
m_SelectOnRight: {fileID: 0}
|
||||||
m_Transition: 1
|
m_Transition: 1
|
||||||
m_Colors:
|
m_Colors:
|
||||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
m_NormalColor: {r: 1, g: 1, b: 1, a: 0}
|
||||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
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: 1}
|
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: 1}
|
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.5019608}
|
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0}
|
||||||
m_ColorMultiplier: 1
|
m_ColorMultiplier: 1
|
||||||
m_FadeDuration: 0.1
|
m_FadeDuration: 0.1
|
||||||
m_SpriteState:
|
m_SpriteState:
|
||||||
|
|
@ -191,7 +191,7 @@ MonoBehaviour:
|
||||||
m_SelectedTrigger: Selected
|
m_SelectedTrigger: Selected
|
||||||
m_DisabledTrigger: Disabled
|
m_DisabledTrigger: Disabled
|
||||||
m_Interactable: 1
|
m_Interactable: 1
|
||||||
m_TargetGraphic: {fileID: 7345011398688830183}
|
m_TargetGraphic: {fileID: 3237586295723358724}
|
||||||
m_OnClick:
|
m_OnClick:
|
||||||
m_PersistentCalls:
|
m_PersistentCalls:
|
||||||
m_Calls:
|
m_Calls:
|
||||||
|
|
@ -240,13 +240,13 @@ RectTransform:
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 5013696931507722397}
|
- {fileID: 5013696931507722397}
|
||||||
- {fileID: 8819185472527345783}
|
- {fileID: 8819185472527345783}
|
||||||
- {fileID: 5476827160552467812}
|
- {fileID: 386906002540535627}
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
m_AnchoredPosition: {x: 0, y: 0}
|
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}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !u!114 &6218283559150764409
|
--- !u!114 &6218283559150764409
|
||||||
MonoBehaviour:
|
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_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: AttackAnime3
|
m_Name: AttackAnime3
|
||||||
m_Speed: 1
|
m_Speed: 1.2
|
||||||
m_CycleOffset: 0
|
m_CycleOffset: 0
|
||||||
m_Transitions:
|
m_Transitions:
|
||||||
- {fileID: -2090382829867684222}
|
- {fileID: -2090382829867684222}
|
||||||
|
|
@ -223,7 +223,7 @@ AnimatorState:
|
||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: AttackAnime1
|
m_Name: AttackAnime1
|
||||||
m_Speed: 1
|
m_Speed: 1.5
|
||||||
m_CycleOffset: 0
|
m_CycleOffset: 0
|
||||||
m_Transitions:
|
m_Transitions:
|
||||||
- {fileID: 1629256297439573789}
|
- {fileID: 1629256297439573789}
|
||||||
|
|
@ -720,7 +720,7 @@ AnimatorState:
|
||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: AttackAnime2
|
m_Name: AttackAnime2
|
||||||
m_Speed: 1
|
m_Speed: 1.35
|
||||||
m_CycleOffset: 0
|
m_CycleOffset: 0
|
||||||
m_Transitions:
|
m_Transitions:
|
||||||
- {fileID: -5909019315416023657}
|
- {fileID: -5909019315416023657}
|
||||||
|
|
|
||||||
|
|
@ -9,22 +9,14 @@ public class PlayerAttack : MonoBehaviour
|
||||||
[SerializeField] private PlayerHealth playerHealth;
|
[SerializeField] private PlayerHealth playerHealth;
|
||||||
[SerializeField] private WeaponHitBox weaponHitBox;
|
[SerializeField] private WeaponHitBox weaponHitBox;
|
||||||
|
|
||||||
[Header("--- 일반 공격 설정 ---")]
|
[Header("--- 설정 ---")]
|
||||||
[SerializeField] private float attackCooldown = 0.5f;
|
[SerializeField] private float attackCooldown = 0.5f;
|
||||||
|
[SerializeField] private float fullChargeTime = 2f; // 차징 기준 시간
|
||||||
[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;
|
|
||||||
|
|
||||||
private float _lastAttackTime, _chargeTimer;
|
private float _lastAttackTime, _chargeTimer;
|
||||||
private bool _isCharging;
|
private bool _isCharging;
|
||||||
|
|
||||||
// UI에서 차징 상태와 진행도를 확인하기 위한 통로
|
// UI와 이동 스크립트에서 참조하는 통로
|
||||||
public float ChargeProgress => Mathf.Clamp01(_chargeTimer / fullChargeTime);
|
public float ChargeProgress => Mathf.Clamp01(_chargeTimer / fullChargeTime);
|
||||||
public bool IsCharging => _isCharging;
|
public bool IsCharging => _isCharging;
|
||||||
|
|
||||||
|
|
@ -34,11 +26,10 @@ public class PlayerAttack : MonoBehaviour
|
||||||
{
|
{
|
||||||
_chargeTimer += Time.deltaTime;
|
_chargeTimer += Time.deltaTime;
|
||||||
|
|
||||||
// 차징 중 우클릭(1) 시 즉시 취소
|
|
||||||
if (Input.GetMouseButtonDown(1))
|
if (Input.GetMouseButtonDown(1))
|
||||||
{
|
{
|
||||||
CancelCharging();
|
CancelCharging();
|
||||||
Debug.Log("차징 취소됨: 아이들 상태로 복귀");
|
Debug.Log("차징 취소됨");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -72,32 +63,36 @@ public class PlayerAttack : MonoBehaviour
|
||||||
pAnim.TriggerThrow();
|
pAnim.TriggerThrow();
|
||||||
pAnim.SetCharging(false);
|
pAnim.SetCharging(false);
|
||||||
|
|
||||||
// ⭐ [업그레이드] 정밀 조준을 위한 레이캐스트 방식
|
// 1. 레이캐스트 정밀 조준
|
||||||
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
|
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;
|
float rayDistance;
|
||||||
|
Vector3 targetDirection = transform.forward;
|
||||||
Vector3 targetDirection = transform.forward; // 기본값은 캐릭터 정면
|
|
||||||
|
|
||||||
if (groundPlane.Raycast(ray, out rayDistance))
|
if (groundPlane.Raycast(ray, out rayDistance))
|
||||||
{
|
{
|
||||||
Vector3 pointOnGround = ray.GetPoint(rayDistance); // 마우스가 가리키는 실제 땅 지점
|
Vector3 pointOnGround = ray.GetPoint(rayDistance);
|
||||||
targetDirection = (pointOnGround - transform.position).normalized;
|
targetDirection = (pointOnGround - transform.position).normalized;
|
||||||
targetDirection.y = 0; // 수평 발사 보정
|
targetDirection.y = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 마우스 방향으로 캐릭터 즉시 회전
|
|
||||||
if (targetDirection != Vector3.zero) transform.rotation = Quaternion.LookRotation(targetDirection);
|
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);
|
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;
|
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();
|
interaction.ClearCurrentWeapon();
|
||||||
stats.ResetWeight();
|
stats.ResetWeight();
|
||||||
_isCharging = false;
|
_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;
|
using UnityEngine;
|
||||||
|
|
||||||
// ⭐ 이 코드가 있으면 스크립트를 붙일 때 컴포넌트 2개가 자동으로 추가됩니다!
|
|
||||||
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
|
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
|
||||||
public class PureUnityFan : MonoBehaviour
|
public class PureUnityFan : MonoBehaviour
|
||||||
{
|
{
|
||||||
[Header("--- 참조 ---")]
|
[Header("--- 참조 ---")]
|
||||||
[SerializeField] private PlayerAttack attackScript; // PlayerAttack 스크립트 연결
|
[SerializeField] private PlayerAttack attackScript;
|
||||||
|
[SerializeField] private PlayerInteraction interaction;
|
||||||
|
|
||||||
[Header("--- 부채꼴 설정 ---")]
|
[Header("--- 부채꼴 설정 ---")]
|
||||||
[SerializeField] private float radius = 5f; // 부채꼴의 길이 (반지름)
|
[SerializeField] private float radius = 5f;
|
||||||
[SerializeField] private int segments = 40; // 부드러움 정도 (높을수록 세련됨)
|
[SerializeField] private int segments = 40;
|
||||||
[SerializeField] private Color fanColor = new Color(1f, 0.9f, 0f, 0.4f); // 노란색 반투명
|
[SerializeField] private Color fanColor = new Color(1f, 0.9f, 0f, 0.4f);
|
||||||
|
[Tooltip("풀차징 시에도 유지할 최소 부채꼴 각도 (너무 얇으면 안 보일 수 있음)")]
|
||||||
|
[SerializeField] private float minAngle = 2f; // ⭐ [추가] 최소 두께 설정
|
||||||
|
|
||||||
private Mesh _mesh;
|
private Mesh _mesh;
|
||||||
private MeshFilter _meshFilter;
|
private MeshFilter _meshFilter;
|
||||||
|
|
@ -22,15 +24,15 @@ public class PureUnityFan : MonoBehaviour
|
||||||
_meshFilter = GetComponent<MeshFilter>();
|
_meshFilter = GetComponent<MeshFilter>();
|
||||||
_meshRenderer = GetComponent<MeshRenderer>();
|
_meshRenderer = GetComponent<MeshRenderer>();
|
||||||
_meshFilter.mesh = _mesh;
|
_meshFilter.mesh = _mesh;
|
||||||
|
|
||||||
// ⭐ 머테리얼에 유저님이 설정한 색상을 입힙니다.
|
|
||||||
_meshRenderer.material.color = fanColor;
|
_meshRenderer.material.color = fanColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
// 1. 차징 중이 아닐 때는 부채꼴을 숨깁니다.
|
// 1. 참조 확인 및 예외 처리
|
||||||
if (attackScript == null || !attackScript.IsCharging)
|
if (attackScript == null || interaction == null) return;
|
||||||
|
|
||||||
|
if (!attackScript.IsCharging || interaction.CurrentWeapon == null)
|
||||||
{
|
{
|
||||||
_meshRenderer.enabled = false;
|
_meshRenderer.enabled = false;
|
||||||
return;
|
return;
|
||||||
|
|
@ -38,27 +40,45 @@ public class PureUnityFan : MonoBehaviour
|
||||||
|
|
||||||
_meshRenderer.enabled = true;
|
_meshRenderer.enabled = true;
|
||||||
|
|
||||||
// 2. 차징 진행도에 따라 각도를 좁힙니다. (시작 60도 -> 풀차징 5도)
|
// 2. 점진적 보간(Lerp)을 통한 부드러운 정확도 계산
|
||||||
float currentAngle = Mathf.Lerp(60f, 5f, attackScript.ChargeProgress);
|
float progress = attackScript.ChargeProgress; // 0.0 ~ 1.0
|
||||||
|
float smoothSpread;
|
||||||
|
|
||||||
// 3. 실시간으로 메쉬(도형)를 새로 그립니다.
|
var config = interaction.CurrentWeapon.Config;
|
||||||
CreateFanMesh(currentAngle);
|
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)
|
private void CreateFanMesh(float angle)
|
||||||
{
|
{
|
||||||
|
// 메쉬 생성 로직 (기존과 동일)
|
||||||
int vertexCount = segments + 2;
|
int vertexCount = segments + 2;
|
||||||
Vector3[] vertices = new Vector3[vertexCount];
|
Vector3[] vertices = new Vector3[vertexCount];
|
||||||
int[] triangles = new int[segments * 3];
|
int[] triangles = new int[segments * 3];
|
||||||
|
|
||||||
vertices[0] = Vector3.zero; // 부채꼴의 시작점 (캐릭터 발밑)
|
vertices[0] = Vector3.zero;
|
||||||
float halfAngle = angle / 2f;
|
float halfAngle = angle / 2f;
|
||||||
|
|
||||||
for (int i = 0; i <= segments; i++)
|
for (int i = 0; i <= segments; i++)
|
||||||
{
|
{
|
||||||
float currAngle = Mathf.Lerp(-halfAngle, halfAngle, (float)i / segments);
|
float currAngle = Mathf.Lerp(-halfAngle, halfAngle, (float)i / segments);
|
||||||
float rad = currAngle * Mathf.Deg2Rad;
|
float rad = currAngle * Mathf.Deg2Rad;
|
||||||
// 캐릭터 정면 방향으로 부채꼴의 꼭짓점들을 배치합니다.
|
|
||||||
vertices[i + 1] = new Vector3(Mathf.Sin(rad), 0, Mathf.Cos(rad)) * radius;
|
vertices[i + 1] = new Vector3(Mathf.Sin(rad), 0, Mathf.Cos(rad)) * radius;
|
||||||
|
|
||||||
if (i < segments)
|
if (i < segments)
|
||||||
|
|
@ -72,6 +92,6 @@ public class PureUnityFan : MonoBehaviour
|
||||||
_mesh.Clear();
|
_mesh.Clear();
|
||||||
_mesh.vertices = vertices;
|
_mesh.vertices = vertices;
|
||||||
_mesh.triangles = triangles;
|
_mesh.triangles = triangles;
|
||||||
_mesh.RecalculateNormals(); // 빛 반사를 위해 법선 벡터 재계산
|
_mesh.RecalculateNormals();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,34 +1,37 @@
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI; // ⭐ Image 컴포넌트 사용을 위해 필수!
|
||||||
using TMPro; // ⭐ TextMeshPro 사용을 위해 필수!
|
using TMPro;
|
||||||
|
|
||||||
public class HPUibar : MonoBehaviour
|
public class HPUibar : MonoBehaviour
|
||||||
{
|
{
|
||||||
|
[Header("--- 참조 ---")]
|
||||||
[SerializeField] private MonoBehaviour healthSource;
|
[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()
|
private void Start()
|
||||||
{
|
{
|
||||||
// 1. 플레이어, 더미, 몬스터, 적 체력 스크립트 모두 대응 가능하도록 연결
|
// 1. 체력 소스 연결 (플레이어, 더미, 몬스터 등 모두 대응)
|
||||||
if (healthSource is PlayerHealth ph) ph.OnHealthChanged += UpdateUI;
|
if (healthSource is PlayerHealth ph) ph.OnHealthChanged += UpdateUI;
|
||||||
else if (healthSource is TrainingDummy td) td.OnHealthChanged += UpdateUI;
|
else if (healthSource is TrainingDummy td) td.OnHealthChanged += UpdateUI;
|
||||||
else if (healthSource is EnemyHealth eh) eh.OnHealthChanged += UpdateUI; // 추가
|
else if (healthSource is EnemyHealth eh) eh.OnHealthChanged += UpdateUI;
|
||||||
else if (healthSource is MonsterClass mc) mc.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)
|
private void UpdateUI(float current, float max)
|
||||||
{
|
{
|
||||||
// 슬라이더 바 업데이트
|
// 2. ⭐ [핵심 수정] 이미지의 fillAmount를 0 ~ 1 사이 값으로 조절합니다.
|
||||||
if (hpSlider != null && max > 0)
|
if (hpFillImage != null && max > 0)
|
||||||
{
|
{
|
||||||
hpSlider.value = current / max;
|
hpFillImage.fillAmount = current / max;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ⭐ 글자 업데이트: "현재 체력 / 최대 체력" 형식
|
// 텍스트 업데이트
|
||||||
// Mathf.CeilToInt를 써서 소수점 없이 정수로 예쁘게 보여줍니다.
|
|
||||||
if (hpText != null)
|
if (hpText != null)
|
||||||
{
|
{
|
||||||
hpText.text = $"{Mathf.CeilToInt(current)} / {Mathf.CeilToInt(max)}";
|
hpText.text = $"{Mathf.CeilToInt(current)} / {Mathf.CeilToInt(max)}";
|
||||||
|
|
@ -37,12 +40,14 @@ public class HPUibar : MonoBehaviour
|
||||||
|
|
||||||
private void LateUpdate()
|
private void LateUpdate()
|
||||||
{
|
{
|
||||||
|
// 체력바가 항상 카메라를 바라보게 함 (빌보드 효과)
|
||||||
if (Camera.main != null)
|
if (Camera.main != null)
|
||||||
transform.LookAt(transform.position + Camera.main.transform.forward);
|
transform.LookAt(transform.position + Camera.main.transform.forward);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
private void OnDestroy()
|
||||||
{
|
{
|
||||||
|
// 이벤트 해제 (메모리 누수 방지)
|
||||||
if (healthSource is PlayerHealth ph) ph.OnHealthChanged -= UpdateUI;
|
if (healthSource is PlayerHealth ph) ph.OnHealthChanged -= UpdateUI;
|
||||||
else if (healthSource is TrainingDummy td) td.OnHealthChanged -= UpdateUI;
|
else if (healthSource is TrainingDummy td) td.OnHealthChanged -= UpdateUI;
|
||||||
else if (healthSource is EnemyHealth eh) eh.OnHealthChanged -= UpdateUI;
|
else if (healthSource is EnemyHealth eh) eh.OnHealthChanged -= UpdateUI;
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,10 @@ using System;
|
||||||
public class PlayerHealth : MonoBehaviour, IDamageable
|
public class PlayerHealth : MonoBehaviour, IDamageable
|
||||||
{
|
{
|
||||||
[SerializeField] private Stats stats;
|
[SerializeField] private Stats stats;
|
||||||
[SerializeField] private Animator animator; // ⭐ 애니메이터 연결용
|
[SerializeField] private Animator animator;
|
||||||
|
|
||||||
public bool IsDead { get; private set; }
|
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 OnHit, OnDead;
|
||||||
public event Action<float, float> OnHealthChanged;
|
public event Action<float, float> OnHealthChanged;
|
||||||
|
|
@ -21,43 +21,46 @@ public class PlayerHealth : MonoBehaviour, IDamageable
|
||||||
_currentHealth = stats.MaxHealth;
|
_currentHealth = stats.MaxHealth;
|
||||||
OnHealthChanged?.Invoke(_currentHealth, stats.MaxHealth);
|
OnHealthChanged?.Invoke(_currentHealth, stats.MaxHealth);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 애니메이터가 할당 안 되어 있으면 가져오기
|
|
||||||
if (animator == null) animator = GetComponent<Animator>();
|
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)
|
public void TakeDamage(float amount)
|
||||||
{
|
{
|
||||||
if (IsDead) return;
|
if (IsDead) return;
|
||||||
|
|
||||||
_currentHealth = Mathf.Max(0, _currentHealth - amount);
|
_currentHealth = Mathf.Max(0, _currentHealth - amount);
|
||||||
OnHealthChanged?.Invoke(_currentHealth, stats.MaxHealth);
|
OnHealthChanged?.Invoke(_currentHealth, stats.MaxHealth);
|
||||||
OnHit?.Invoke();
|
OnHit?.Invoke();
|
||||||
|
|
||||||
// ⭐ 피격 경직 시작
|
|
||||||
if (!IsDead) StartHit();
|
if (!IsDead) StartHit();
|
||||||
|
|
||||||
if (_currentHealth <= 0) Die();
|
if (_currentHealth <= 0) Die();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void StartHit()
|
private void StartHit()
|
||||||
{
|
{
|
||||||
isHit = true;
|
isHit = true;
|
||||||
|
if (animator != null) animator.Play("HitAnime", 0, 0f);
|
||||||
// 피격 애니메이션 재생 (이름이 다르면 수정하세요)
|
|
||||||
if (animator != null) animator.Play("Player_Hit", 0, 0f);
|
|
||||||
|
|
||||||
// ⭐ 안전장치: 0.4초 뒤에는 무조건 경직 해제
|
|
||||||
CancelInvoke(nameof(OnHitEnd));
|
CancelInvoke(nameof(OnHitEnd));
|
||||||
Invoke(nameof(OnHitEnd), 0.05f);
|
Invoke(nameof(OnHitEnd), 0.05f);
|
||||||
}
|
}
|
||||||
|
public void OnHitEnd() { isHit = false; }
|
||||||
// ⭐ 애니메이션 이벤트 혹은 Invoke로 호출f
|
|
||||||
public void OnHitEnd()
|
|
||||||
{
|
|
||||||
isHit = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Die()
|
private void Die()
|
||||||
{
|
{
|
||||||
IsDead = true;
|
IsDead = true;
|
||||||
|
|
@ -65,4 +68,14 @@ public class PlayerHealth : MonoBehaviour, IDamageable
|
||||||
Cursor.lockState = CursorLockMode.None;
|
Cursor.lockState = CursorLockMode.None;
|
||||||
OnDead?.Invoke();
|
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,34 +13,49 @@ public class PlayerInteraction : MonoBehaviour
|
||||||
|
|
||||||
public void TryInteract()
|
public void TryInteract()
|
||||||
{
|
{
|
||||||
// 1. 주변에 아이템이 있는지 확인합니다.
|
|
||||||
Collider[] hits = Physics.OverlapSphere(transform.position, interactRange, itemLayer);
|
Collider[] hits = Physics.OverlapSphere(transform.position, interactRange, itemLayer);
|
||||||
|
|
||||||
foreach (var hit in hits)
|
foreach (var hit in hits)
|
||||||
{
|
{
|
||||||
|
// 1. 무기 상호작용
|
||||||
if (hit.TryGetComponent<EquippableItem>(out var item))
|
if (hit.TryGetComponent<EquippableItem>(out var item))
|
||||||
{
|
{
|
||||||
// 2. 힘(Strength) 조건이 맞는지 체크합니다.
|
|
||||||
if (playerStats.Strength >= item.Config.RequiredStrength)
|
if (playerStats.Strength >= item.Config.RequiredStrength)
|
||||||
{
|
{
|
||||||
// 3. 이미 무기를 들고 있다면 바닥에 버립니다.
|
EquipWeapon(item);
|
||||||
if (_currentWeapon != null) _currentWeapon.OnDropped(transform.forward);
|
break;
|
||||||
|
}
|
||||||
// 4. 새로운 무기를 장착합니다.
|
else
|
||||||
_currentWeapon = item;
|
|
||||||
_currentWeapon.OnPickedUp(handSlot);
|
|
||||||
|
|
||||||
// ⭐ [추가] 무기를 줍는 순간 황금빛 하이라이트를 끕니다.
|
|
||||||
if (item.TryGetComponent<ItemHighlight>(out var highlight))
|
|
||||||
{
|
{
|
||||||
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;
|
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;
|
public void ClearCurrentWeapon() => _currentWeapon = null;
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,16 @@
|
||||||
|
|
||||||
public class PlayerMovement : MonoBehaviour
|
public class PlayerMovement : MonoBehaviour
|
||||||
{
|
{
|
||||||
|
[Header("--- 참조 ---")]
|
||||||
[SerializeField] private Stats stats;
|
[SerializeField] private Stats stats;
|
||||||
[SerializeField] private PlayerHealth health;
|
[SerializeField] private PlayerHealth health;
|
||||||
[SerializeField] private PlayerAnimator pAnim;
|
[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 Vector3 _moveDir;
|
||||||
private bool _isSprinting;
|
private bool _isSprinting;
|
||||||
|
|
@ -20,15 +27,32 @@ public class PlayerMovement : MonoBehaviour
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 이동 처리
|
// 1. 기본 이동 속도 결정
|
||||||
float speed = _isSprinting ? stats.CurrentRunSpeed : stats.CurrentMoveSpeed;
|
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);
|
transform.Translate(_moveDir * speed * Time.deltaTime, Space.World);
|
||||||
|
|
||||||
// ⭐ 애니메이션 연동: Speed 값 전송 (0:정지, 0.5:걷기, 1.0:뛰기)
|
// 4. ⭐ 애니메이션 연동
|
||||||
if (pAnim != null)
|
if (pAnim != null)
|
||||||
{
|
{
|
||||||
// 입력이 있을 때만 0.5(걷기) 또는 1.0(뛰기) 전송
|
|
||||||
float animVal = _moveDir.magnitude > 0.1f ? (_isSprinting ? 1.0f : 0.5f) : 0f;
|
float animVal = _moveDir.magnitude > 0.1f ? (_isSprinting ? 1.0f : 0.5f) : 0f;
|
||||||
|
|
||||||
|
// ⭐ 차징 중이면 걷는 애니메이션 속도도 살짝 늦춰서 묵직함을 더함
|
||||||
|
if (attackScript != null && attackScript.IsCharging)
|
||||||
|
{
|
||||||
|
animVal *= 0.5f;
|
||||||
|
}
|
||||||
|
|
||||||
pAnim.UpdateMove(animVal);
|
pAnim.UpdateMove(animVal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,43 +10,17 @@ public class Stats : MonoBehaviour
|
||||||
[SerializeField] private float baseStrength = 10f;
|
[SerializeField] private float baseStrength = 10f;
|
||||||
[SerializeField] private float baseAttackDamage = 10f;
|
[SerializeField] private float baseAttackDamage = 10f;
|
||||||
|
|
||||||
/* =========================
|
|
||||||
* 보너스 능력치 (카드 / 레벨업)
|
|
||||||
* ========================= */
|
|
||||||
[Header("--- 보너스 능력치 ---")]
|
[Header("--- 보너스 능력치 ---")]
|
||||||
public float bonusMaxHealth;
|
public float bonusMaxHealth;
|
||||||
public float bonusMoveSpeed;
|
public float bonusMoveSpeed;
|
||||||
public float bonusStrength;
|
public float bonusStrength;
|
||||||
public float bonusAttackDamage;
|
public float bonusAttackDamage;
|
||||||
|
|
||||||
/* =========================
|
[Header("--- 밸런스 설정 ---")]
|
||||||
* 밸런스 설정
|
|
||||||
* ========================= */
|
|
||||||
[Header("--- 밸런스 설정 (인스펙터) ---")]
|
|
||||||
[Tooltip("무게 1당 줄어드는 이동 속도")]
|
|
||||||
[SerializeField] private float weightToSpeedPenalty = 0.1f;
|
[SerializeField] private float weightToSpeedPenalty = 0.1f;
|
||||||
[SerializeField] private float runSpeedMultiplier = 1.5f;
|
[SerializeField] private float runSpeedMultiplier = 1.5f;
|
||||||
|
|
||||||
private float _weightPenalty = 0f;
|
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 Strength => baseStrength + bonusStrength;
|
||||||
public float BaseAttackDamage => baseAttackDamage + bonusAttackDamage;
|
public float BaseAttackDamage => baseAttackDamage + bonusAttackDamage;
|
||||||
|
|
||||||
public float CurrentMoveSpeed =>
|
// ⭐ [에러 해결] PlayerMovement.cs에서 사용하는 속도 프로퍼티
|
||||||
Mathf.Max(1f, baseMoveSpeed + bonusMoveSpeed - _weightPenalty);
|
public float CurrentMoveSpeed => Mathf.Max(1f, baseMoveSpeed + bonusMoveSpeed - _weightPenalty);
|
||||||
|
|
||||||
public float CurrentRunSpeed => CurrentMoveSpeed * runSpeedMultiplier;
|
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 AddMaxHealth(float value) => bonusMaxHealth += value;
|
||||||
public void AddMoveSpeed(float value) => bonusMoveSpeed += value;
|
public void AddMoveSpeed(float value) => bonusMoveSpeed += value;
|
||||||
public void AddStrength(float value) => bonusStrength += value;
|
public void AddStrength(float value) => bonusStrength += value;
|
||||||
public void AddAttackDamage(float value) => bonusAttackDamage += value;
|
public void AddAttackDamage(float value) => bonusAttackDamage += value;
|
||||||
|
|
||||||
public void UpdateWeaponWeight(float requiredStrength)
|
public void UpdateWeaponWeight(float requiredStrength) => _weightPenalty = requiredStrength * weightToSpeedPenalty;
|
||||||
=> _weightPenalty = requiredStrength * weightToSpeedPenalty;
|
|
||||||
|
|
||||||
public void ResetWeight() => _weightPenalty = 0f;
|
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("차징 단계별 설정 (인스펙터 수정)")]
|
[Header("차징 단계별 설정 (인스펙터 수정)")]
|
||||||
[SerializeField] private float forceLv1 = 10f;
|
[SerializeField] private float forceLv1 = 10f;
|
||||||
[SerializeField] private float spreadLv1 = 25f; //
|
[SerializeField] private float spreadLv1 = 25f;
|
||||||
[SerializeField] private float forceLv2 = 18f;
|
[SerializeField] private float forceLv2 = 18f;
|
||||||
[SerializeField] private float spreadLv2 = 8f;
|
[SerializeField] private float spreadLv2 = 8f;
|
||||||
[SerializeField] private float forceLv3 = 28f;
|
[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 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
|
chargingBool: IsCharging
|
||||||
throwTrigger: Throw
|
throwTrigger: Throw
|
||||||
forceLv1: 10
|
forceLv1: 10
|
||||||
spreadLv1: 25
|
spreadLv1: 40.7
|
||||||
forceLv2: 18
|
forceLv2: 18
|
||||||
spreadLv2: 8
|
spreadLv2: 21.41
|
||||||
forceLv3: 28
|
forceLv3: 28
|
||||||
spreadLv3: 0
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ public class CardUI : MonoBehaviour
|
||||||
private CardData cardData;
|
private CardData cardData;
|
||||||
private LevelUpUIManager uiManager;
|
private LevelUpUIManager uiManager;
|
||||||
|
|
||||||
// ⭐ [핵심] 이 버튼이 직접 기억할 능력치 메모지
|
|
||||||
private StatType s1, s2;
|
private StatType s1, s2;
|
||||||
private int v1, v2;
|
private int v1, v2;
|
||||||
private bool isRandomCard = false;
|
private bool isRandomCard = false;
|
||||||
|
|
@ -24,24 +23,13 @@ public class CardUI : MonoBehaviour
|
||||||
if (randomData != null)
|
if (randomData != null)
|
||||||
{
|
{
|
||||||
isRandomCard = true;
|
isRandomCard = true;
|
||||||
|
|
||||||
// ⭐ 파일에 저장하는 게 아니라, 이 '버튼'의 변수에 직접 저장합니다.
|
|
||||||
// 이렇게 하면 버튼마다 다른 숫자를 가질 수 있습니다.
|
|
||||||
s1 = randomData.possibleStats[Random.Range(0, randomData.possibleStats.Length)];
|
s1 = randomData.possibleStats[Random.Range(0, randomData.possibleStats.Length)];
|
||||||
do
|
do { s2 = randomData.possibleStats[Random.Range(0, randomData.possibleStats.Length)]; } while (s1 == s2);
|
||||||
{
|
|
||||||
s2 = randomData.possibleStats[Random.Range(0, randomData.possibleStats.Length)];
|
|
||||||
} while (s1 == s2);
|
|
||||||
|
|
||||||
v1 = Random.Range(randomData.minValue, randomData.maxValue + 1);
|
v1 = Random.Range(randomData.minValue, randomData.maxValue + 1);
|
||||||
v2 = -Random.Range(randomData.minValue, randomData.maxValue + 1);
|
v2 = -Random.Range(randomData.minValue, randomData.maxValue + 1);
|
||||||
|
|
||||||
effectText.text = $"{s1} +{v1}\n{s2} {v2}";
|
effectText.text = $"{s1} +{v1}\n{s2} {v2}";
|
||||||
}
|
}
|
||||||
else
|
else { effectText.text = cardData.GetText(); }
|
||||||
{
|
|
||||||
effectText.text = cardData.GetText();
|
|
||||||
}
|
|
||||||
iconImage.sprite = cardData.icon;
|
iconImage.sprite = cardData.icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -50,7 +38,6 @@ public class CardUI : MonoBehaviour
|
||||||
if (isRandomCard)
|
if (isRandomCard)
|
||||||
{
|
{
|
||||||
Debug.Log($"[CardClick] clicked = {gameObject.name}");
|
Debug.Log($"[CardClick] clicked = {gameObject.name}");
|
||||||
// ⭐ 내가(버튼이) 기억하고 있는 그 수치를 플레이어에게 적용합니다.
|
|
||||||
RandomStatCardData randomData = cardData as RandomStatCardData;
|
RandomStatCardData randomData = cardData as RandomStatCardData;
|
||||||
randomData.ApplyToPlayer(s1, v1);
|
randomData.ApplyToPlayer(s1, v1);
|
||||||
randomData.ApplyToPlayer(s2, v2);
|
randomData.ApplyToPlayer(s2, v2);
|
||||||
|
|
@ -59,6 +46,11 @@ public class CardUI : MonoBehaviour
|
||||||
{
|
{
|
||||||
cardData.Execute();
|
cardData.Execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ⭐ [추가] 카드 선택 직후 플레이어의 체력 UI를 강제로 동기화합니다.
|
||||||
|
// 씬에서 PlayerHealth 스크립트를 찾아 갱신 함수를 실행합니다.
|
||||||
|
FindObjectOfType<PlayerHealth>()?.RefreshHealthUI();
|
||||||
|
|
||||||
uiManager.Close();
|
uiManager.Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -30,6 +30,14 @@ public class MonsterClass : MonoBehaviour, IDamageable
|
||||||
[SerializeField] protected ParticleSystem hitEffect;
|
[SerializeField] protected ParticleSystem hitEffect;
|
||||||
[SerializeField] protected Transform impactSpawnPoint;
|
[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()
|
protected virtual void Start()
|
||||||
{
|
{
|
||||||
currentHP = maxHP;
|
currentHP = maxHP;
|
||||||
|
|
@ -39,14 +47,12 @@ public class MonsterClass : MonoBehaviour, IDamageable
|
||||||
OnHealthChanged?.Invoke(currentHP, maxHP);
|
OnHealthChanged?.Invoke(currentHP, maxHP);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ⭐ 핵심: 부모에서 virtual을 붙여야 NormalMonster에서 에러가 안 납니다.
|
|
||||||
public virtual void TakeDamage(float amount) { OnDamaged(amount); }
|
public virtual void TakeDamage(float amount) { OnDamaged(amount); }
|
||||||
|
|
||||||
public virtual void OnDamaged(float damage)
|
public virtual void OnDamaged(float damage)
|
||||||
{
|
{
|
||||||
if (isDead) return;
|
if (isDead) return;
|
||||||
currentHP -= damage;
|
currentHP -= damage;
|
||||||
Debug.Log($"{gameObject.name} 피격! 체력: {{{currentHP}/{maxHP}}}");
|
|
||||||
OnHealthChanged?.Invoke(currentHP, maxHP);
|
OnHealthChanged?.Invoke(currentHP, maxHP);
|
||||||
|
|
||||||
if (currentHP <= 0) { Die(); return; }
|
if (currentHP <= 0) { Die(); return; }
|
||||||
|
|
@ -69,18 +75,57 @@ public class MonsterClass : MonoBehaviour, IDamageable
|
||||||
if (isDead) return;
|
if (isDead) return;
|
||||||
isDead = true;
|
isDead = true;
|
||||||
|
|
||||||
// ⭐ 핵심 수정: 애니메이션 신호 기다리지 말고 즉시 처리
|
|
||||||
Debug.Log($"{gameObject.name} 사망! 경험치 {expReward} 지급 및 1.5초 후 파괴.");
|
|
||||||
OnMonsterKilled?.Invoke(expReward);
|
OnMonsterKilled?.Invoke(expReward);
|
||||||
|
|
||||||
|
// 몬스터 사망 시 아이템 드랍
|
||||||
|
TryDropItems();
|
||||||
|
|
||||||
if (agent && agent.isOnNavMesh) { agent.isStopped = true; agent.velocity = Vector3.zero; }
|
if (agent && agent.isOnNavMesh) { agent.isStopped = true; agent.velocity = Vector3.zero; }
|
||||||
animator.Play(Monster_Die, 0, 0f);
|
animator.Play(Monster_Die, 0, 0f);
|
||||||
if (deathSound) audioSource.PlayOneShot(deathSound);
|
if (deathSound) audioSource.PlayOneShot(deathSound);
|
||||||
|
|
||||||
// 1.5초 뒤 자동 삭제 (이벤트 씹힘 방지)
|
|
||||||
Destroy(gameObject, 1.5f);
|
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() { }
|
public void OnDeathAnimEnd() { }
|
||||||
}
|
}
|
||||||
|
|
@ -6,18 +6,19 @@ using UnityEngine.UI;
|
||||||
|
|
||||||
public class PlayerLevelSystem : MonoBehaviour
|
public class PlayerLevelSystem : MonoBehaviour
|
||||||
{
|
{
|
||||||
[Header("레벨")]
|
[Header("--- 참조 ---")]
|
||||||
|
[SerializeField] private Stats stats;
|
||||||
|
[SerializeField] private PlayerHealth pHealth;
|
||||||
|
|
||||||
|
[Header("레벨 설정")]
|
||||||
public int level = 1;
|
public int level = 1;
|
||||||
public int currentExp = 0;
|
public int currentExp = 0;
|
||||||
|
|
||||||
[Header("레벨업 경험치 테이블")]
|
|
||||||
[Tooltip("index 0 = Lv1 → Lv2 필요 경험치")]
|
|
||||||
[SerializeField] private int[] expTable;
|
[SerializeField] private int[] expTable;
|
||||||
|
|
||||||
[Header("UI")]
|
[Header("UI")]
|
||||||
[SerializeField] private Image expFillImage;
|
[SerializeField] private Image expFillImage;
|
||||||
[SerializeField] private TextMeshProUGUI expText;
|
[SerializeField] private TextMeshProUGUI expText;
|
||||||
[SerializeField] private TextMeshProUGUI levelText; // ⭐ 추가
|
[SerializeField] private TextMeshProUGUI levelText;
|
||||||
|
|
||||||
public static System.Action OnLevelUp;
|
public static System.Action OnLevelUp;
|
||||||
|
|
||||||
|
|
@ -26,10 +27,7 @@ public class PlayerLevelSystem : MonoBehaviour
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
int index = level - 1;
|
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];
|
return expTable[index];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -47,39 +45,51 @@ public class PlayerLevelSystem : MonoBehaviour
|
||||||
|
|
||||||
void GainExp(int amount)
|
void GainExp(int amount)
|
||||||
{
|
{
|
||||||
Debug.Log($"몬스터 처치! 얻은 경험치: {amount}");
|
|
||||||
currentExp += amount;
|
currentExp += amount;
|
||||||
|
|
||||||
while (currentExp >= RequiredExp)
|
while (currentExp >= RequiredExp)
|
||||||
{
|
{
|
||||||
Debug.Log("레벨업 조건 달성! Show 호출 준비");
|
|
||||||
currentExp -= RequiredExp;
|
currentExp -= RequiredExp;
|
||||||
LevelUp();
|
LevelUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateExpUI();
|
UpdateExpUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LevelUp()
|
void LevelUp()
|
||||||
{
|
{
|
||||||
if (level >= expTable.Length + 1)
|
if (level >= expTable.Length + 1) { currentExp = 0; return; }
|
||||||
{
|
|
||||||
currentExp = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
level++;
|
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()
|
void UpdateExpUI()
|
||||||
{
|
{
|
||||||
float fill = (float)currentExp / RequiredExp;
|
float fill = (float)currentExp / RequiredExp;
|
||||||
expFillImage.fillAmount = fill;
|
if (expFillImage != null) expFillImage.fillAmount = fill;
|
||||||
|
if (expText != null) expText.text = $"{currentExp} / {RequiredExp}";
|
||||||
expText.text = $"{currentExp} / {RequiredExp}";
|
if (levelText != null) levelText.text = $"Lv. {level}";
|
||||||
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
|
fileFormatVersion: 2
|
||||||
guid: 80a98722dc81068418fae0cc878518fe
|
guid: dc43be502c015fe4d9dd9b3809009d34
|
||||||
TextureImporter:
|
TextureImporter:
|
||||||
internalIDToNameTable: []
|
internalIDToNameTable: []
|
||||||
externalObjects: {}
|
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
|
fileFormatVersion: 2
|
||||||
guid: 0a231f2474aacc8489d3af0eca4e04a4
|
guid: e2e87e71ff36bb7468e02533671a6a33
|
||||||
TextureImporter:
|
TextureImporter:
|
||||||
internalIDToNameTable: []
|
internalIDToNameTable: []
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 13
|
serializedVersion: 13
|
||||||
mipmaps:
|
mipmaps:
|
||||||
mipMapMode: 0
|
mipMapMode: 0
|
||||||
enableMipMap: 1
|
enableMipMap: 0
|
||||||
sRGBTexture: 1
|
sRGBTexture: 1
|
||||||
linearTexture: 0
|
linearTexture: 0
|
||||||
fadeOut: 0
|
fadeOut: 0
|
||||||
|
|
@ -37,13 +37,13 @@ TextureImporter:
|
||||||
filterMode: 1
|
filterMode: 1
|
||||||
aniso: 1
|
aniso: 1
|
||||||
mipBias: 0
|
mipBias: 0
|
||||||
wrapU: 0
|
wrapU: 1
|
||||||
wrapV: 0
|
wrapV: 1
|
||||||
wrapW: 0
|
wrapW: 0
|
||||||
nPOTScale: 1
|
nPOTScale: 0
|
||||||
lightmap: 0
|
lightmap: 0
|
||||||
compressionQuality: 50
|
compressionQuality: 50
|
||||||
spriteMode: 0
|
spriteMode: 1
|
||||||
spriteExtrude: 1
|
spriteExtrude: 1
|
||||||
spriteMeshType: 1
|
spriteMeshType: 1
|
||||||
alignment: 0
|
alignment: 0
|
||||||
|
|
@ -52,9 +52,9 @@ TextureImporter:
|
||||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||||
spriteGenerateFallbackPhysicsShape: 1
|
spriteGenerateFallbackPhysicsShape: 1
|
||||||
alphaUsage: 1
|
alphaUsage: 1
|
||||||
alphaIsTransparency: 0
|
alphaIsTransparency: 1
|
||||||
spriteTessellationDetail: -1
|
spriteTessellationDetail: -1
|
||||||
textureType: 0
|
textureType: 8
|
||||||
textureShape: 1
|
textureShape: 1
|
||||||
singleChannelComponent: 0
|
singleChannelComponent: 0
|
||||||
flipbookRows: 1
|
flipbookRows: 1
|
||||||
|
|
@ -99,7 +99,7 @@ TextureImporter:
|
||||||
outline: []
|
outline: []
|
||||||
physicsShape: []
|
physicsShape: []
|
||||||
bones: []
|
bones: []
|
||||||
spriteID:
|
spriteID: 5e97eb03825dee720800000000000000
|
||||||
internalID: 0
|
internalID: 0
|
||||||
vertices: []
|
vertices: []
|
||||||
indices:
|
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:
|
|
||||||