feat: 긴급회피 스킬 슬롯 추가 및 검 모델 prefab 교체

- Left Ctrl에 Evade 액션 바인딩 추가 (InputSystem_Actions)
- PlayerSkillInput skillSlots 6→7개로 확장, 슬롯 6에 Evade 연결
- Prefab_Player_Default 긴급회피 스킬 슬롯 할당
- 검 무기 모델 fbx → prefab으로 교체
- 구르기 스킬 아이콘, 베기 스킬 이펙트 데이터 수정

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-17 10:43:49 +09:00
parent a347d9360d
commit 5ca0fdabf7
11 changed files with 162 additions and 95 deletions

View File

@@ -14,7 +14,7 @@ MonoBehaviour:
m_EditorClassIdentifier: Colosseum.Game::Colosseum.Skills.SkillData
skillName: "\uAD6C\uB974\uAE30"
description:
icon: {fileID: 21300000, guid: 2b3889a2bb9beb444adf6734821e1c02, type: 3}
icon: {fileID: 21300000, guid: eafcc94eae3865944b93e64c4e281aa0, type: 3}
skillClip: {fileID: -14460799136228694, guid: d6d51384d6dd17a419c1d8e2a1c0c875, type: 3}
endClip: {fileID: 0}
useRootMotion: 1

View File

@@ -23,5 +23,3 @@ MonoBehaviour:
manaCost: 5
effects:
- {fileID: 11400000, guid: e23fca57309ab2b4faa5c380118cd07e, type: 2}
- {fileID: 11400000, guid: 75bac55a016a0da46899806f58b76ce3, type: 2}
- {fileID: 11400000, guid: 0e496b26a1dbf40488ce54cb4fe9c27b, type: 2}

View File

@@ -16,7 +16,7 @@ MonoBehaviour:
description:
icon: {fileID: 21300000, guid: 70e07ab1b9f326b4bae30fe839d609ea, type: 3}
weaponSlot: 0
weaponPrefab: {fileID: 1631607032641582, guid: 92cfe4029ea2b754caa0b3f00d52d41a, type: 3}
weaponPrefab: {fileID: 1631607032641582, guid: 888f3d986f4ea1a4491c1ffca7e660c9, type: 3}
positionOffset: {x: 0, y: 0, z: 0}
rotationOffset: {x: 0, y: 0, z: 0}
scale: {x: 1, y: 1, z: 1}

View File

@@ -1,83 +0,0 @@
fileFormatVersion: 2
guid: c6e2f484ffcec214da9c765711b562f4
timeCreated: 1554785616
licenseType: Store
ModelImporter:
serializedVersion: 19
fileIDToRecycleName:
100000: //RootNode
400000: //RootNode
2300000: //RootNode
3300000: //RootNode
4300000: SM_Wep_Sword_01
9500000: //RootNode
materials:
importMaterials: 0
materialName: 0
materialSearch: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
importBlendShapes: 0
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
optimizeMeshForGPU: 0
keepQuads: 0
weldVertices: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVPackMargin: 4
useFileScale: 1
tangentSpace:
normalSmoothAngle: 0
normalImportMode: 1
tangentImportMode: 3
importAnimation: 0
copyAvatar: 0
humanDescription:
serializedVersion: 2
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
rootMotionBoneName:
rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1}
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
animationType: 0
humanoidOversampling: 1
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,81 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1631607032641582
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4561571508225656}
- component: {fileID: 33122181552623900}
- component: {fileID: 23019494539852092}
m_Layer: 0
m_Name: "Model_Weapon_\uAC80"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4561571508225656
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1631607032641582}
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_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &33122181552623900
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1631607032641582}
m_Mesh: {fileID: 4300000, guid: a29e10a78af23e243949a44795e2787f, type: 3}
--- !u!23 &23019494539852092
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1631607032641582}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: ea128b040f8b0af4c9d2de400aaff30a, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 888f3d986f4ea1a4491c1ffca7e660c9
timeCreated: 1554786157
licenseType: Store
NativeFormatImporter:
mainObjectFileID: 100100000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -312,11 +312,12 @@ MonoBehaviour:
ShowTopMostFoldoutHeaderGroup: 1
skillSlots:
- {fileID: 11400000, guid: b7f09e0e899c8fc4bb2cc9204cc6eb4a, type: 2}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 11400000, guid: 2ed15dca92a165046b6df17b28f64874, type: 2}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
skillController: {fileID: 6912018896034183004}
networkController: {fileID: 0}
weaponEquipment: {fileID: 0}

View File

@@ -2,7 +2,7 @@
// <auto-generated>
// This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator
// version 1.18.0
// from Assets/Scripts/InputSystem_Actions.inputactions
// from Assets/_Game/Scripts/InputSystem_Actions.inputactions
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -16,7 +16,7 @@ using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Utilities;
/// <summary>
/// Provides programmatic access to <see cref="InputActionAsset" />, <see cref="InputActionMap" />, <see cref="InputAction" /> and <see cref="InputControlScheme" /> instances defined in asset "Assets/Scripts/InputSystem_Actions.inputactions".
/// Provides programmatic access to <see cref="InputActionAsset" />, <see cref="InputActionMap" />, <see cref="InputAction" /> and <see cref="InputControlScheme" /> instances defined in asset "Assets/_Game/Scripts/InputSystem_Actions.inputactions".
/// </summary>
/// <remarks>
/// This class is source generated and any manual edits will be discarded if the associated asset is reimported or modified.
@@ -208,6 +208,15 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""Evade"",
""type"": ""Button"",
""id"": ""e9ae2f2b-7ce7-4104-9394-f2f3f599e595"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
}
],
""bindings"": [
@@ -573,6 +582,17 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
""action"": ""Skill 6"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""f0f459a5-504a-425c-ae51-c6353269c277"",
""path"": ""<Keyboard>/ctrl"",
""interactions"": """",
""processors"": """",
""groups"": """",
""action"": ""Evade"",
""isComposite"": false,
""isPartOfComposite"": false
}
]
},
@@ -1171,6 +1191,7 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
m_Player_Skill4 = m_Player.FindAction("Skill 4", throwIfNotFound: true);
m_Player_Skill5 = m_Player.FindAction("Skill 5", throwIfNotFound: true);
m_Player_Skill6 = m_Player.FindAction("Skill 6", throwIfNotFound: true);
m_Player_Evade = m_Player.FindAction("Evade", throwIfNotFound: true);
// UI
m_UI = asset.FindActionMap("UI", throwIfNotFound: true);
m_UI_Navigate = m_UI.FindAction("Navigate", throwIfNotFound: true);
@@ -1277,6 +1298,7 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
private readonly InputAction m_Player_Skill4;
private readonly InputAction m_Player_Skill5;
private readonly InputAction m_Player_Skill6;
private readonly InputAction m_Player_Evade;
/// <summary>
/// Provides access to input actions defined in input action map "Player".
/// </summary>
@@ -1341,6 +1363,10 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
/// </summary>
public InputAction @Skill6 => m_Wrapper.m_Player_Skill6;
/// <summary>
/// Provides access to the underlying input action "Player/Evade".
/// </summary>
public InputAction @Evade => m_Wrapper.m_Player_Evade;
/// <summary>
/// Provides access to the underlying input action map instance.
/// </summary>
public InputActionMap Get() { return m_Wrapper.m_Player; }
@@ -1405,6 +1431,9 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
@Skill6.started += instance.OnSkill6;
@Skill6.performed += instance.OnSkill6;
@Skill6.canceled += instance.OnSkill6;
@Evade.started += instance.OnEvade;
@Evade.performed += instance.OnEvade;
@Evade.canceled += instance.OnEvade;
}
/// <summary>
@@ -1455,6 +1484,9 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
@Skill6.started -= instance.OnSkill6;
@Skill6.performed -= instance.OnSkill6;
@Skill6.canceled -= instance.OnSkill6;
@Evade.started -= instance.OnEvade;
@Evade.performed -= instance.OnEvade;
@Evade.canceled -= instance.OnEvade;
}
/// <summary>
@@ -1846,6 +1878,13 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnSkill6(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "Evade" is either <see cref="UnityEngine.InputSystem.InputAction.started" />, <see cref="UnityEngine.InputSystem.InputAction.performed" /> or <see cref="UnityEngine.InputSystem.InputAction.canceled" />.
/// </summary>
/// <seealso cref="UnityEngine.InputSystem.InputAction.started" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnEvade(InputAction.CallbackContext context);
}
/// <summary>
/// Interface to implement callback methods for all input action callbacks associated with input actions defined by "UI" which allows adding and removing callbacks.

View File

@@ -122,6 +122,15 @@
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "Evade",
"type": "Button",
"id": "e9ae2f2b-7ce7-4104-9394-f2f3f599e595",
"expectedControlType": "",
"processors": "",
"interactions": "",
"initialStateCheck": false
}
],
"bindings": [
@@ -487,6 +496,17 @@
"action": "Skill 6",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "f0f459a5-504a-425c-ae51-c6353269c277",
"path": "<Keyboard>/ctrl",
"interactions": "",
"processors": "",
"groups": "",
"action": "Evade",
"isComposite": false,
"isPartOfComposite": false
}
]
},

View File

@@ -14,8 +14,8 @@ namespace Colosseum.Player
public class PlayerSkillInput : NetworkBehaviour
{
[Header("Skill Slots")]
[Tooltip("각 슬롯에 등록할 스킬 데이터 (6개)")]
[SerializeField] private SkillData[] skillSlots = new SkillData[6];
[Tooltip("각 슬롯에 등록할 스킬 데이터 (6개 + 긴급회피)")]
[SerializeField] private SkillData[] skillSlots = new SkillData[7];
[Header("References")]
[Tooltip("SkillController (없으면 자동 검색)")]
@@ -76,6 +76,7 @@ namespace Colosseum.Player
inputActions.Player.Skill4.performed += _ => OnSkillInput(3);
inputActions.Player.Skill5.performed += _ => OnSkillInput(4);
inputActions.Player.Skill6.performed += _ => OnSkillInput(5);
inputActions.Player.Evade.performed += _ => OnSkillInput(6);
}
public override void OnNetworkDespawn()
@@ -88,6 +89,7 @@ namespace Colosseum.Player
inputActions.Player.Skill4.performed -= _ => OnSkillInput(3);
inputActions.Player.Skill5.performed -= _ => OnSkillInput(4);
inputActions.Player.Skill6.performed -= _ => OnSkillInput(5);
inputActions.Player.Evade.performed -= _ => OnSkillInput(6);
inputActions.Disable();
}
}