스킬 시스템 구현

- 애니메이션 이벤트 기반 스킬 시스템 추가
  - SkillData: 스킬 데이터 (클립, 쿨타임, 효과 목록)
  - SkillController: 스킬 실행 및 애니메이션 제어
  - AnimatorOverrideController로 단일 State에서 다양한 스킬 재생

- 스킬 효과 시스템
  - DamageEffect, HealEffect, BuffEffect
  - KnockbackEffect, SoundEffect, SpawnEffect
  - 범위 공격 및 팀 구분 지원

- Team 컴포넌트로 아군/적 구분

- 스킬 중 이동 제한
  - IsPlayingAnimation으로 애니메이션 종료까지 이동 불가
  - OnSkillEnd 호출 시 다음 스킬 시전 가능

- 입력 시스템에 스킬 슬롯 6개 추가

- 애니메이션 에셋 추가 및 정리
  - AnimationSwordCombat 패키지 추가 (검 공격 애니메이션)
  - PlayerAnimationController에 Skill 상태 추가
  - External_Used 폴더 구조 정리

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-10 12:08:52 +09:00
parent 86903a09f0
commit eff23471d7
719 changed files with 485114 additions and 756 deletions

View File

@@ -2,7 +2,7 @@
// <auto-generated>
// This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator
// version 1.18.0
// from Assets/InputSystem_Actions.inputactions
// from Assets/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/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/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.
@@ -110,29 +110,11 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
""interactions"": """",
""initialStateCheck"": true
},
{
""name"": ""Attack"",
""type"": ""Button"",
""id"": ""6c2ab1b8-8984-453a-af3d-a3c78ae1679a"",
""expectedControlType"": ""Button"",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""Interact"",
""type"": ""Button"",
""id"": ""852140f2-7766-474d-8707-702459ba45f3"",
""expectedControlType"": ""Button"",
""processors"": """",
""interactions"": ""Hold"",
""initialStateCheck"": false
},
{
""name"": ""Crouch"",
""type"": ""Button"",
""id"": ""27c5f898-bc57-4ee1-8800-db469aca5fe3"",
""expectedControlType"": ""Button"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
@@ -168,7 +150,61 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
""name"": ""Sprint"",
""type"": ""Button"",
""id"": ""641cd816-40e6-41b4-8c3d-04687c349290"",
""expectedControlType"": ""Button"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""Skill 1"",
""type"": ""Button"",
""id"": ""9452c224-4f16-4c08-81ab-1fd93758655d"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""Skill 2"",
""type"": ""Button"",
""id"": ""c69f22e6-feba-4a7f-b549-363ab436f2e6"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""Skill 3"",
""type"": ""Button"",
""id"": ""b64f129f-8e8c-4912-930e-1e03ccd1c0d3"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""Skill 4"",
""type"": ""Button"",
""id"": ""008e1aea-1560-4e1d-94af-5c00ba3c63f1"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""Skill 5"",
""type"": ""Button"",
""id"": ""6d4ebdf2-855a-42e6-bb28-f59260f3609c"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
},
{
""name"": ""Skill 6"",
""type"": ""Button"",
""id"": ""85a08d84-cbdd-41d0-a5da-848c907fe73e"",
""expectedControlType"": """",
""processors"": """",
""interactions"": """",
""initialStateCheck"": false
@@ -340,72 +376,6 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""143bb1cd-cc10-4eca-a2f0-a3664166fe91"",
""path"": ""<Gamepad>/buttonWest"",
""interactions"": """",
""processors"": """",
""groups"": "";Gamepad"",
""action"": ""Attack"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""05f6913d-c316-48b2-a6bb-e225f14c7960"",
""path"": ""<Mouse>/leftButton"",
""interactions"": """",
""processors"": """",
""groups"": "";Keyboard&Mouse"",
""action"": ""Attack"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""886e731e-7071-4ae4-95c0-e61739dad6fd"",
""path"": ""<Touchscreen>/primaryTouch/tap"",
""interactions"": """",
""processors"": """",
""groups"": "";Touch"",
""action"": ""Attack"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""ee3d0cd2-254e-47a7-a8cb-bc94d9658c54"",
""path"": ""<Joystick>/trigger"",
""interactions"": """",
""processors"": """",
""groups"": ""Joystick"",
""action"": ""Attack"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""8255d333-5683-4943-a58a-ccb207ff1dce"",
""path"": ""<XRController>/{PrimaryAction}"",
""interactions"": """",
""processors"": """",
""groups"": ""XR"",
""action"": ""Attack"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""b3c1c7f0-bd20-4ee7-a0f1-899b24bca6d7"",
""path"": ""<Keyboard>/enter"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard&Mouse"",
""action"": ""Attack"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""cbac6039-9c09-46a1-b5f2-4e5124ccb5ed"",
@@ -516,28 +486,6 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""1c04ea5f-b012-41d1-a6f7-02e963b52893"",
""path"": ""<Keyboard>/e"",
""interactions"": """",
""processors"": """",
""groups"": ""Keyboard&Mouse"",
""action"": ""Interact"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""b3f66d0b-7751-423f-908b-a11c5bd95930"",
""path"": ""<Gamepad>/buttonNorth"",
""interactions"": """",
""processors"": """",
""groups"": ""Gamepad"",
""action"": ""Interact"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""4f4649ac-64a8-4a73-af11-b3faef356a4d"",
@@ -559,6 +507,72 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
""action"": ""Crouch"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""c32f06b7-f876-4a00-abde-1dcf2240dce0"",
""path"": ""<Mouse>/leftButton"",
""interactions"": """",
""processors"": """",
""groups"": """",
""action"": ""Skill 1"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""1dd61bb8-f4aa-476d-9dae-740b2dd98c4e"",
""path"": ""<Mouse>/rightButton"",
""interactions"": """",
""processors"": """",
""groups"": """",
""action"": ""Skill 2"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""3ca887ff-6fa6-4c91-b5fa-893c6010b76c"",
""path"": ""<Keyboard>/1"",
""interactions"": """",
""processors"": """",
""groups"": """",
""action"": ""Skill 3"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""ab74c35a-1cdf-43a0-af20-9c63ee3eb6f4"",
""path"": ""<Keyboard>/2"",
""interactions"": """",
""processors"": """",
""groups"": """",
""action"": ""Skill 4"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""0b969e4e-c753-4ee9-ae95-07ee9bc599b0"",
""path"": ""<Keyboard>/3"",
""interactions"": """",
""processors"": """",
""groups"": """",
""action"": ""Skill 5"",
""isComposite"": false,
""isPartOfComposite"": false
},
{
""name"": """",
""id"": ""c46de897-5a2b-4f5f-bae7-ba326eb465e8"",
""path"": ""<Keyboard>/4"",
""interactions"": """",
""processors"": """",
""groups"": """",
""action"": ""Skill 6"",
""isComposite"": false,
""isPartOfComposite"": false
}
]
},
@@ -1146,13 +1160,17 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
m_Player = asset.FindActionMap("Player", throwIfNotFound: true);
m_Player_Move = m_Player.FindAction("Move", throwIfNotFound: true);
m_Player_Look = m_Player.FindAction("Look", throwIfNotFound: true);
m_Player_Attack = m_Player.FindAction("Attack", throwIfNotFound: true);
m_Player_Interact = m_Player.FindAction("Interact", throwIfNotFound: true);
m_Player_Crouch = m_Player.FindAction("Crouch", throwIfNotFound: true);
m_Player_Jump = m_Player.FindAction("Jump", throwIfNotFound: true);
m_Player_Previous = m_Player.FindAction("Previous", throwIfNotFound: true);
m_Player_Next = m_Player.FindAction("Next", throwIfNotFound: true);
m_Player_Sprint = m_Player.FindAction("Sprint", throwIfNotFound: true);
m_Player_Skill1 = m_Player.FindAction("Skill 1", throwIfNotFound: true);
m_Player_Skill2 = m_Player.FindAction("Skill 2", throwIfNotFound: true);
m_Player_Skill3 = m_Player.FindAction("Skill 3", throwIfNotFound: true);
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);
// UI
m_UI = asset.FindActionMap("UI", throwIfNotFound: true);
m_UI_Navigate = m_UI.FindAction("Navigate", throwIfNotFound: true);
@@ -1248,13 +1266,17 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
private List<IPlayerActions> m_PlayerActionsCallbackInterfaces = new List<IPlayerActions>();
private readonly InputAction m_Player_Move;
private readonly InputAction m_Player_Look;
private readonly InputAction m_Player_Attack;
private readonly InputAction m_Player_Interact;
private readonly InputAction m_Player_Crouch;
private readonly InputAction m_Player_Jump;
private readonly InputAction m_Player_Previous;
private readonly InputAction m_Player_Next;
private readonly InputAction m_Player_Sprint;
private readonly InputAction m_Player_Skill1;
private readonly InputAction m_Player_Skill2;
private readonly InputAction m_Player_Skill3;
private readonly InputAction m_Player_Skill4;
private readonly InputAction m_Player_Skill5;
private readonly InputAction m_Player_Skill6;
/// <summary>
/// Provides access to input actions defined in input action map "Player".
/// </summary>
@@ -1275,14 +1297,6 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
/// </summary>
public InputAction @Look => m_Wrapper.m_Player_Look;
/// <summary>
/// Provides access to the underlying input action "Player/Attack".
/// </summary>
public InputAction @Attack => m_Wrapper.m_Player_Attack;
/// <summary>
/// Provides access to the underlying input action "Player/Interact".
/// </summary>
public InputAction @Interact => m_Wrapper.m_Player_Interact;
/// <summary>
/// Provides access to the underlying input action "Player/Crouch".
/// </summary>
public InputAction @Crouch => m_Wrapper.m_Player_Crouch;
@@ -1303,6 +1317,30 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
/// </summary>
public InputAction @Sprint => m_Wrapper.m_Player_Sprint;
/// <summary>
/// Provides access to the underlying input action "Player/Skill1".
/// </summary>
public InputAction @Skill1 => m_Wrapper.m_Player_Skill1;
/// <summary>
/// Provides access to the underlying input action "Player/Skill2".
/// </summary>
public InputAction @Skill2 => m_Wrapper.m_Player_Skill2;
/// <summary>
/// Provides access to the underlying input action "Player/Skill3".
/// </summary>
public InputAction @Skill3 => m_Wrapper.m_Player_Skill3;
/// <summary>
/// Provides access to the underlying input action "Player/Skill4".
/// </summary>
public InputAction @Skill4 => m_Wrapper.m_Player_Skill4;
/// <summary>
/// Provides access to the underlying input action "Player/Skill5".
/// </summary>
public InputAction @Skill5 => m_Wrapper.m_Player_Skill5;
/// <summary>
/// Provides access to the underlying input action "Player/Skill6".
/// </summary>
public InputAction @Skill6 => m_Wrapper.m_Player_Skill6;
/// <summary>
/// Provides access to the underlying input action map instance.
/// </summary>
public InputActionMap Get() { return m_Wrapper.m_Player; }
@@ -1334,12 +1372,6 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
@Look.started += instance.OnLook;
@Look.performed += instance.OnLook;
@Look.canceled += instance.OnLook;
@Attack.started += instance.OnAttack;
@Attack.performed += instance.OnAttack;
@Attack.canceled += instance.OnAttack;
@Interact.started += instance.OnInteract;
@Interact.performed += instance.OnInteract;
@Interact.canceled += instance.OnInteract;
@Crouch.started += instance.OnCrouch;
@Crouch.performed += instance.OnCrouch;
@Crouch.canceled += instance.OnCrouch;
@@ -1355,6 +1387,24 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
@Sprint.started += instance.OnSprint;
@Sprint.performed += instance.OnSprint;
@Sprint.canceled += instance.OnSprint;
@Skill1.started += instance.OnSkill1;
@Skill1.performed += instance.OnSkill1;
@Skill1.canceled += instance.OnSkill1;
@Skill2.started += instance.OnSkill2;
@Skill2.performed += instance.OnSkill2;
@Skill2.canceled += instance.OnSkill2;
@Skill3.started += instance.OnSkill3;
@Skill3.performed += instance.OnSkill3;
@Skill3.canceled += instance.OnSkill3;
@Skill4.started += instance.OnSkill4;
@Skill4.performed += instance.OnSkill4;
@Skill4.canceled += instance.OnSkill4;
@Skill5.started += instance.OnSkill5;
@Skill5.performed += instance.OnSkill5;
@Skill5.canceled += instance.OnSkill5;
@Skill6.started += instance.OnSkill6;
@Skill6.performed += instance.OnSkill6;
@Skill6.canceled += instance.OnSkill6;
}
/// <summary>
@@ -1372,12 +1422,6 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
@Look.started -= instance.OnLook;
@Look.performed -= instance.OnLook;
@Look.canceled -= instance.OnLook;
@Attack.started -= instance.OnAttack;
@Attack.performed -= instance.OnAttack;
@Attack.canceled -= instance.OnAttack;
@Interact.started -= instance.OnInteract;
@Interact.performed -= instance.OnInteract;
@Interact.canceled -= instance.OnInteract;
@Crouch.started -= instance.OnCrouch;
@Crouch.performed -= instance.OnCrouch;
@Crouch.canceled -= instance.OnCrouch;
@@ -1393,6 +1437,24 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
@Sprint.started -= instance.OnSprint;
@Sprint.performed -= instance.OnSprint;
@Sprint.canceled -= instance.OnSprint;
@Skill1.started -= instance.OnSkill1;
@Skill1.performed -= instance.OnSkill1;
@Skill1.canceled -= instance.OnSkill1;
@Skill2.started -= instance.OnSkill2;
@Skill2.performed -= instance.OnSkill2;
@Skill2.canceled -= instance.OnSkill2;
@Skill3.started -= instance.OnSkill3;
@Skill3.performed -= instance.OnSkill3;
@Skill3.canceled -= instance.OnSkill3;
@Skill4.started -= instance.OnSkill4;
@Skill4.performed -= instance.OnSkill4;
@Skill4.canceled -= instance.OnSkill4;
@Skill5.started -= instance.OnSkill5;
@Skill5.performed -= instance.OnSkill5;
@Skill5.canceled -= instance.OnSkill5;
@Skill6.started -= instance.OnSkill6;
@Skill6.performed -= instance.OnSkill6;
@Skill6.canceled -= instance.OnSkill6;
}
/// <summary>
@@ -1708,20 +1770,6 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnLook(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "Attack" 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 OnAttack(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "Interact" 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 OnInteract(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "Crouch" 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" />
@@ -1756,6 +1804,48 @@ public partial class @InputSystem_Actions: IInputActionCollection2, IDisposable
/// <seealso cref="UnityEngine.InputSystem.InputAction.performed" />
/// <seealso cref="UnityEngine.InputSystem.InputAction.canceled" />
void OnSprint(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "Skill 1" 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 OnSkill1(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "Skill 2" 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 OnSkill2(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "Skill 3" 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 OnSkill3(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "Skill 4" 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 OnSkill4(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "Skill 5" 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 OnSkill5(InputAction.CallbackContext context);
/// <summary>
/// Method invoked when associated input action "Skill 6" 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 OnSkill6(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.