using UnityEngine; using System.Collections.Generic; namespace Colosseum.Skills { /// /// 스킬 데이터. 스킬의 기본 정보와 효과 목록을 관리합니다. /// [CreateAssetMenu(fileName = "NewSkill", menuName = "Colosseum/Skill")] public class SkillData : ScriptableObject { [Header("기본 정보")] [SerializeField] private string skillName; [TextArea(2, 4)] [SerializeField] private string description; [SerializeField] private Sprite icon; [Header("애니메이션")] [Tooltip("기본 Animator Controller의 'Skill' 상태에 덮어씌워질 클립")] [SerializeField] private AnimationClip skillClip; [Tooltip("종료 애니메이션 (선택)")] [SerializeField] private AnimationClip endClip; [Tooltip("애니메이션 재생 속도 (1 = 기본, 2 = 2배속)")] [Min(0.1f)] [SerializeField] private float animationSpeed = 1f; [Header("루트 모션")] [Tooltip("애니메이션의 이동/회전 데이터를 캐릭터에 적용")] [SerializeField] private bool useRootMotion = false; [Tooltip("루트 모션 적용 시 Y축 이동 무시 (중력과 충돌)")] [SerializeField] private bool ignoreRootMotionY = true; [Tooltip("스킬 시전 시 대상 위치로 점프 이동 (UseRootMotion + IgnoreRootMotionY=false 필요)")] [SerializeField] private bool jumpToTarget = false; [Header("행동 제한")] [Tooltip("이 스킬을 회피 상태로 취급할지 여부")] [SerializeField] private bool isEvadeSkill = false; [Tooltip("시전 중 이동 입력 차단 여부")] [SerializeField] private bool blockMovementWhileCasting = true; [Tooltip("시전 중 점프 입력 차단 여부")] [SerializeField] private bool blockJumpWhileCasting = true; [Tooltip("시전 중 다른 스킬 입력 차단 여부")] [SerializeField] private bool blockOtherSkillsWhileCasting = true; [Tooltip("시전 중 회피 입력 차단 여부")] [SerializeField] private bool blockEvadeWhileCasting = true; [Header("쿨타임 & 비용")] [Min(0f)] [SerializeField] private float cooldown = 1f; [Min(0f)] [SerializeField] private float manaCost = 0f; [Header("효과 목록")] [Tooltip("애니메이션 이벤트 OnEffect(index)로 발동. 리스트 순서 = 이벤트 인덱스")] [SerializeField] private List effects = new List(); // Properties public string SkillName => skillName; public string Description => description; public Sprite Icon => icon; public AnimationClip SkillClip => skillClip; public AnimationClip EndClip => endClip; public float AnimationSpeed => animationSpeed; public float Cooldown => cooldown; public float ManaCost => manaCost; public bool UseRootMotion => useRootMotion; public bool IgnoreRootMotionY => ignoreRootMotionY; public bool JumpToTarget => jumpToTarget; public bool IsEvadeSkill => isEvadeSkill; public bool BlockMovementWhileCasting => blockMovementWhileCasting; public bool BlockJumpWhileCasting => blockJumpWhileCasting; public bool BlockOtherSkillsWhileCasting => blockOtherSkillsWhileCasting; public bool BlockEvadeWhileCasting => blockEvadeWhileCasting; public IReadOnlyList Effects => effects; } }