EerieVillage/Assets/Scripts/Skills/Data/ActiveSkillData.cs

137 lines
4.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
namespace EerieVillage.Skills
{
/// <summary>
/// 액티브 스킬 ScriptableObject 데이터.
/// BT12-Dev v1 §2-2 정합. ActiveCategory 6종·ActiveTrigger 3종.
/// </summary>
[CreateAssetMenu(fileName = "Active_", menuName = "EerieVillage/Skills/Active")]
public class ActiveSkillData : SkillDataAsset
{
[Header("액티브 전용")]
/// <summary>카테고리 (A~F) — Projectile·MeleeArea·PlacementPersistent·Minion·Debuff·SpecialJudge</summary>
public ActiveCategory Category;
/// <summary>발동 트리거 — OnTime·OnHit·OnKill</summary>
public ActiveTrigger Trigger;
[Tooltip("Lv.1 기본 쿨다운 (초). balance/01 v0.2 BaseCooldown 1.5s 참조")]
public float BaseCooldown = 1.5f;
[Tooltip("Lv.1 기본 대미지 (쿼터 단위). balance/01 v0.2 BaseDamage 10 참조")]
public int BaseDamage = 10;
[Tooltip("판정 박스 기본 크기 (A·B 카테고리). balance/01 v0.2 AttackBoxSize 1.5x1.0 참조")]
public Vector2 HitboxSize = new Vector2(1.5f, 1.0f);
[Tooltip("투사체 발사 오프셋 거리 (A 카테고리)")]
public float OffsetDistance = 0.5f;
[Tooltip("투사체 전용 (A 카테고리). 궤적 타입 — Line·Homing·Arc")]
public ProjectileTrajectory Trajectory = ProjectileTrajectory.Line;
[Tooltip("소환 전용 (D 카테고리). 소환물 프리팹 참조")]
public GameObject MinionPrefab;
[Tooltip("연쇄 타격 횟수 (Homing 등 연쇄 계열)")]
public int ChainCount = 0;
[Tooltip("DoT 지속 시간 (초)")]
public float DotDuration = 0f;
[Tooltip("DoT 타격 간격 (초)")]
public float DotInterval = 0.5f;
[Tooltip("기절 지속 시간 (초)")]
public float StunDuration = 0f;
[Tooltip("감속 지속 시간 (초)")]
public float SlowDuration = 0f;
[Tooltip("감속 배율 (0.5 = 50% 감속)")]
[Range(0f, 1f)]
public float SlowMultiplier = 0.5f;
[Tooltip("넉백 힘")]
public float KnockbackForce = 0f;
[Tooltip("동시 최대 인스턴스 수 (C·D 카테고리)")]
public int MaxConcurrent = 1;
[Tooltip("소환물 수명 (초, D 카테고리)")]
public float MinionLifetime = 10f;
[Tooltip("오라 주기 (초, E 카테고리 아우라형)")]
public float AuraTickInterval = 0.5f;
[Tooltip("오라 반경 (E 카테고리 아우라형)")]
public float AuraRadius = 3f;
[Tooltip("크리티컬 대미지 배율")]
public float CritDamageMultiplier = 2.0f;
[Tooltip("무적 프레임 부여 시간 (초, F 카테고리)")]
public float IFrameDuration = 0f;
[Tooltip("상태이상 스택 한도 (E 카테고리)")]
public int DebuffStackLimit = 3;
[Tooltip("확률 판정 전용 (F 카테고리). 발동 확률 0~1")]
[Range(0f, 1f)]
public float FireProbability = 1.0f;
/// <summary>BT12-Dev 2026-05-10 PD — 사정거리 5단계 (Camera width 배수)</summary>
[Tooltip("사정거리 5단계 — Camera 가로 배수 (Short 0.2·MediumShort 0.5·Medium 0.667·MediumLong 1.0·Long 1.5)")]
public RangeTier Range = RangeTier.Medium;
// BT12-Dev 2026-05-13 — 스킬 이펙트 prefab 3 + DoT damage multiplier (PD 지시: A02 파이어볼 이펙트 구현)
[Header("스킬 이펙트 (Phase 2-E)")]
[Tooltip("투사체 prefab — 부재 시 Resources/Skills/Projectiles/Default fallback")]
public GameObject ProjectilePrefab;
[Tooltip("적중 시 Instantiate 되는 ParticleSystem prefab (적 위치)")]
public GameObject OnHitFxPrefab;
[Tooltip("DoT 적용 시 적 자식으로 Instantiate 되는 ParticleSystem prefab")]
public GameObject OnDotFxPrefab;
[Tooltip("DoT damage = BaseDamage × DotDamageMultiplier (예: 0.25 = 25%)")]
[Range(0f, 5f)]
public float DotDamageMultiplier = 0.25f;
}
public enum RangeTier { Short, MediumShort, Medium, MediumLong, Long }
/// <summary>
/// 액티브 스킬 카테고리 (A~F). BT12-Dev v1 §2-2 정합.
/// </summary>
public enum ActiveCategory
{
/// <summary>A. 투사체</summary>
Projectile,
/// <summary>B. 근접·범위</summary>
MeleeArea,
/// <summary>C. 설치·지속</summary>
PlacementPersistent,
/// <summary>D. 소환</summary>
Minion,
/// <summary>E. 상태이상</summary>
Debuff,
/// <summary>F. 특수 판정</summary>
SpecialJudge
}
/// <summary>
/// 투사체 궤적 타입. BT12-Dev v1 §2-2 정합.
/// </summary>
public enum ProjectileTrajectory
{
/// <summary>직선</summary>
Line,
/// <summary>유도</summary>
Homing,
/// <summary>곡선</summary>
Arc
}
}