98 lines
3.2 KiB
C#
98 lines
3.2 KiB
C#
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 : ScriptableObject
|
|
{
|
|
[Header("기본 정보")]
|
|
public string SkillName;
|
|
[TextArea] public string Description;
|
|
public Sprite Icon;
|
|
|
|
[Header("스킬 분류")]
|
|
public SkillType SkillType;
|
|
public ActivationType ActivationType;
|
|
public CastMethod CastMethod;
|
|
public TargetType TargetType;
|
|
|
|
[Header("애니메이션")]
|
|
public string AnimTrigger;
|
|
|
|
[Header("이펙트")]
|
|
public GameObject EffectPrefab;
|
|
|
|
[Header("범위 지정 (Remote용)")]
|
|
public GameObject AreaIndicatorPrefab;
|
|
|
|
[Header("설치형 (Zone)")]
|
|
public GameObject ZonePrefab;
|
|
|
|
[Header("디버프")]
|
|
public DebuffData[] AppliedDebuffs;
|
|
|
|
[Header("레벨별 수치")]
|
|
public SkillLevelData[] Levels;
|
|
|
|
public SkillLevelData GetLevelData(int level)
|
|
{
|
|
int idx = Mathf.Clamp(level - 1, 0, Levels.Length - 1);
|
|
return Levels[idx];
|
|
}
|
|
}
|
|
|
|
[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 enum SkillType { Active, Passive }
|
|
public enum ActivationType { Instant, Charge, Cast, Channel }
|
|
public enum CastMethod { Self, Remote }
|
|
public enum TargetType { Self, Single, Area, Projectile, Zone }
|