using UnityEngine; /* 사용법: 1. Project에서 Create → Skill/SkillData로 스킬 에셋 생성, 레벨별 수치 입력 2. Create → Skill/WeaponSkillSet로 무기별 스킬 묶음 생성 3. Create → Skill/DebuffData로 디버프 에셋 생성 (필요시) 4. 플레이어에 SkillModule + 필요한 Effect 컴포넌트들 부착 (DamageEffect, AreaEffect, ZoneEffect, BuffEffect, ProjectileEffect) 5. 디버프 받는 대상에 StatusEffectReceiver + IDamageable 구현 부착 6. 무기 변경 시 LoadWeaponSkills(skillSet) 호출 7. 입력 시 SkillInput(slotIndex, inputState) 호출 8. Remote 스킬 범위 확인 시 AreaConfirmInput(inputState) 호출 ActivationType (발동 방식): Instant — 즉시 발동 Charge — 누르고 있으면 차징, 놓으면 발동 Cast — 시전 시간 후 자동 발동 (피격/회피 시 취소) Channel — 시전 동안 지속적으로 효과 반복 (피격/회피 시 취소) CastMethod (발동 위치): Self — 자기 중심 발동 (키 입력 즉시 ActivationType 흐름 시작) Remote — 원격 발동 (마우스로 위치 선택 → 확인 후 ActivationType 흐름 시작) TargetType (효과 방식): Single → DamageEffect Area → AreaEffect Self → BuffEffect Projectile → ProjectileEffect Zone → ZoneEffect (설치형) 조합 예시: Instant + Self → 즉시 자기 주변 발동 Instant + Remote → 위치 선택 후 즉시 발동 Cast + Remote → 위치 선택 → 캐스팅 → 완료 시 해당 위치에 발동 Channel + Remote → 위치 선택 → 해당 위치에서 채널링 Charge + Remote → 위치 선택 → 차징 → 릴리스 시 해당 위치에 발동 */ [CreateAssetMenu(menuName = "Skill/SkillData")] public class SkillData : UseableEntry { [Header("스킬 분류")] public SkillType SkillType; public ActivationType ActivationType; public CastMethod CastMethod; public TargetType TargetType; [Header("애니메이션")] public string AnimTrigger; [Header("이펙트")] public GameObject AttackEffectPrefab; public GameObject CastEffectPrefab; [Header("범위 지정 (Remote용)")] public GameObject AreaIndicatorPrefab; [Header("설치형 (Zone)")] public GameObject ZonePrefab; [Header("디버프")] public DebuffData[] AppliedDebuffs; [Header("레벨별 수치")] public SkillLevelData[] Levels; [Header("키 액션 설정")] public string InputActionName; public SkillLevelData GetLevelData(int level) { int idx = Mathf.Clamp(level - 1, 0, Levels.Length - 1); return Levels[idx]; } public override IUseableRuntime CreateRuntime() => new SkillInstance(this); } [System.Serializable] public class SkillLevelData { public float Damage; public float Range; public float Cooldown; public float ManaCost; public float Duration; public float ChargeTimeMax; public float CastTime; public float ChannelDuration; public float TickInterval; public float TickDamage; public float ActionDuration; // Attack 상태 지속 시간 (스킬 발동 후 Idle 복귀까지) } public enum SkillType { Active, Passive } public enum ActivationType { Instant, Charge, Cast, Channel } public enum CastMethod { Self, Remote } public enum TargetType { Self, Single, Area, Projectile, Zone }