BurningTimesAi/프로젝트/EerieVillage/개발/spec/스킬_이펙트_확정_v1.md

9.0 KiB

스킬 이펙트 확정 SOT v1

PD 지시 2026-05-14: "지금까지 작업 된 스킬 이펙트 작업은 완성이야. 임의로 투사체의 판정 범위나 크기 등이 바뀌지 않도록 지금 상태를 잘 기록해."

확정 시점: 2026-05-14 EerieVillage stamp: 1a1de0c (직전 commit 1a1de0c 시점 .asset 13 종 + Effector 5 종 + ActiveSkillData 필드 일괄) 변경 금지 원칙: 본 문서 §3 13 스킬 핵심 필드는 PD 직접 명시 지시 없이 임의 변경 금지. 변경 시 본 문서 §4 갱신 + commit + PD 보고 의무.


1. 적용 범위

본 SOT 가 보호하는 자산:

분류 경로 비고
ActiveSkillData ScriptableObject 13 종 Assets/Resources/Skills/Active/*.asset 핵심 필드 §3 표
Effector 5 종 Assets/Scripts/Skills/Effectors/{ProjectileSpawner,LaserSpawner,LightningStrikeSpawner,MeleeAreaSpawner,Projectile,PiercingProjectile,HomingProjectile}.cs 박스↔이펙트 분리 원칙 §2
ActiveSkillData 필드 Assets/Scripts/Skills/Data/ActiveSkillData.cs 필드 추가는 허용·기존 필드 삭제 금지
HitboxDebug 공용 helper Assets/Scripts/Skills/Effectors/HitboxDebug.cs ShowDebugVisuals=true 유지

2. 박스↔이펙트 분리 원칙 (표준)

영역 정책
박스(판정) facing 좌/우 sign 만 반영 · FxRotation 미적용 · Layer 0 non-trigger 만 Wall
이펙트(시각) facing + FxRotation 그대로
runtime spawn 모두 HideFlags.DontSave (Scene 오염 방지)
Player Awake CleanupStalePooledSpawns 3중 진입점 (AfterSceneLoad · Awake · 1·3·10 frame)
Projectile.Awake _data==null 자기 destroy (1 frame 유예)
2차 판정 박스 EnableSecondHitbox 체크박스로 옵션 (MeleeAreaSpawner 적용·다른 spawner 후속)

3. 13 스킬 핵심 필드 (확정 stamp 1a1de0c)

Category 0=Projectile, 1=MeleeArea, 2=Setting, 3=Summon Trajectory 0=Line, 1=Homing, 2=Arc (Piercing)

A01 마법 화살 (Category 0 Projectile)

BaseCooldown=1.5  BaseDamage=4  HitboxSize=(1.5, 1)  OffsetDistance=0.5
Trajectory=0  HitFxScale=0.5

A02 파이어볼 (Category 0 Projectile)

BaseCooldown=1.5  BaseDamage=12  HitboxSize=(1.5, 1)  OffsetDistance=(0.5, 0)
Trajectory=0  MaxRange=8  ProjectileSpeed=6
DotDuration=3  DotInterval=0.5
HitFxScale=0.5  FxRotation=0  OffsetXY=(0,0)
DamageFrameDelay=0  EnableRepeatDamage=0  MaxHitCount=1  RepeatFrameInterval=30

A03 봉인 마법 (Category 0 Projectile)

BaseCooldown=1.5  BaseDamage=3  HitboxSize=(1.5, 1)  OffsetDistance=0.5
Trajectory=0  HitFxScale=0.5

A04 번개 충격 (Category 1 MeleeArea·LightningStrikeSpawner)

BaseCooldown=2.5  BaseDamage=15  HitboxSize=(1.2, 0.8)  OffsetDistance=(0, -0.2)
Trajectory=0  MaxRange=10  ProjectileSpeed=6
HitFxScale=0.2  FxRotation=0  OffsetXY=(0,0)
DamageFrameDelay=46  EnableRepeatDamage=0  MaxHitCount=1  RepeatFrameInterval=30

A05 좌/우 범위 베기 (Category 1 MeleeArea)

BaseCooldown=1.5  BaseDamage=10  HitboxSize=(4.8, 1.2)  OffsetDistance=(0, -0.2)
Trajectory=0  MaxRange=10  ProjectileSpeed=6
HitFxScale=0.5  FxRotation=0  OffsetXY=(0.2, -1.2)
DamageFrameDelay=10  EnableRepeatDamage=0  MaxHitCount=1  RepeatFrameInterval=30

A06 독 늪 소환 (Category 2 Setting)

BaseCooldown=10  BaseDamage=10  HitboxSize=(3, 1.5)  OffsetDistance=(0, 0)
Trajectory=0  MaxRange=10  ProjectileSpeed=6
DotDuration=5  DotInterval=1
HitFxScale=1  FxRotation=0  OffsetXY=(0,0)
DamageFrameDelay=0  EnableRepeatDamage=0  MaxHitCount=1  RepeatFrameInterval=30

A08 저주의 화살 (Category 0 Projectile)

BaseCooldown=0.8  BaseDamage=2  HitboxSize=(1.5, 0.6)  OffsetDistance=(0, 0)
Trajectory=0  MaxRange=10  ProjectileSpeed=8
ProjectileAngleOffset=180  TargetEnemyOnFire=1
HitFxScale=0.4  FxRotation=0  OffsetXY=(0,0)
DamageFrameDelay=0  EnableRepeatDamage=0  MaxHitCount=1  RepeatFrameInterval=30

A11 정령불 (Category 3 Summon)

BaseCooldown=15  BaseDamage=5  HitboxSize=(2.5, 2.5)  OffsetDistance=(0, 0)
Trajectory=0  MaxRange=10  ProjectileSpeed=6
ProjectileAngleOffset=0  TargetEnemyOnFire=0
DotInterval=1
HitFxScale=0.2  FxRotation=0  OffsetXY=(0, -0.8)
DamageFrameDelay=0  EnableRepeatDamage=0  MaxHitCount=1  RepeatFrameInterval=30

A12 정화의 빛 (Category 1 MeleeArea · 2차 박스 활성)

BaseCooldown=5  BaseDamage=15
1차: HitboxSize=(1.5, 5)  OffsetDistance=(0, 3)     # Player 위쪽 vertical 줄기
EnableSecondHitbox=1
2차: SecondHitboxSize=(1.5, 5)  SecondOffsetDistance=(0, -3)  # Player 아래쪽 vertical 줄기
Trajectory=0  MaxRange=10  ProjectileSpeed=6
HitFxScale=1  FxRotation=0  OffsetXY=(0,0)
DamageFrameDelay=0  EnableRepeatDamage=0  MaxHitCount=1  RepeatFrameInterval=30

A13 저주 구체 (Category 0 Projectile · Arc=Piercing)

BaseCooldown=2.5  BaseDamage=8  HitboxSize=(8, 8)  OffsetDistance=(0.5, 0)
Trajectory=2  MaxRange=6  ProjectileSpeed=2
DotInterval=0.2  (관통 매 0.2초 hit)
HitFxScale=0  FxRotation=0  OffsetXY=(0,0)
DamageFrameDelay=0  EnableRepeatDamage=0  MaxHitCount=1  RepeatFrameInterval=30

A14 얼음 창 (Category 0 Projectile)

BaseCooldown=1.5  BaseDamage=5  HitboxSize=(1.5, 1)  OffsetDistance=0.5
Trajectory=0  HitFxScale=0.5

A15 추적 레이저 (Category 0 Projectile · Homing)

BaseCooldown=1.5  BaseDamage=3  HitboxSize=(1.5, 1)  OffsetDistance=(0.5, 0)
Trajectory=1  MaxRange=6  ProjectileSpeed=5
DotDuration=2  DotInterval=0.5
HitFxScale=0.5  FxRotation=0  OffsetXY=(0,0)
DamageFrameDelay=0  EnableRepeatDamage=0  MaxHitCount=1  RepeatFrameInterval=30

A10 분신 (Clone·Category 3 Summon·CloneEffector·BT12-Dev-Clone 2026-05-15·PD 결정 stamp 2026-05-15)

BaseCooldown=25  BaseDamage=0  HitboxSize=(0, 0)  OffsetDistance=(0, 0)
Trajectory=0  MinionLifetime=12  (12초 지속·Singleton 1기·PD 직접 결정 2026-05-15)
AttributeTags=0  TypeTags=0
ProjectilePrefab=null  OnHitFxPrefab=null  ExtraHitFxPrefab=null  CastFxPrefab=null
OnDotFxPrefab=null
DotDuration=0  DotInterval=0.5
HitFxScale=1  FxRotation=0  OffsetXY=(0,0)
DamageFrameDelay=0  EnableRepeatDamage=0  MaxHitCount=1  RepeatFrameInterval=30
# PD 명세 5항목 (코드 하드코딩 영역·.asset 영역 변경 불요):
#  - spawn 위치: facing 반대 1유닛 (CloneInstance.SpawnOrReplace·facing 고정)
#  - sprite alpha: 0.5
#  - 동일 스킬 사용: OnPlayerSkillFired hook (PlayerSkillInventory)
#  - damage 50% 반감: ActiveSkillRuntime.CalculateEffectiveDamage + IsCloneFireActive 분기
#  - 0.5초 딜레이: CloneInstance._pendingQueue (unscaledTime 기반)
# PD 2026-05-15 직접 결정 4건:
#  - BaseCooldown 25초 (PM 1차 30초 → PD 조정 25초)
#  - MinionLifetime 12초 (영구 1기 → 12초 자동 소멸·Singleton 유지)
#  - facing 고정 (spawn 시점 facing 고정·Player 이동 시 분신 위치·방향 불변)
#  - 무적 = Collider 미부착 (적 투사체·벽·player·enemy 모두 통과)
#  - Lv 업 시 분신 수 증가 X · 추후 지속시간↑+플레이어 참조 데미지 비율(%)↑ (balance-designer 후속 수치 확정)
# BaseDamage 0 = 분신 자체 damage X (Effector 재호출 시 Player damage * 0.5)

A_Laser 용염 레이저 (Dragonfire Laser·Category 1 MeleeArea·LaserSpawner)

BaseCooldown=3  BaseDamage=5  HitboxSize=(10, 1.2)  OffsetDistance=(-0.4, -0.1)
Trajectory=0  MaxRange=10  ProjectileSpeed=6
HitFxScale=0.25  FxRotation=90  OffsetXY=(0,0)
DamageFrameDelay=10  EnableRepeatDamage=1  MaxHitCount=7  RepeatFrameInterval=10

4. 변경 이력

일시 변경 EerieVillage commit
2026-05-14 본 SOT 신설 (확정 stamp) 1a1de0c
2026-05-14 A06·A11 박스 시각화 추가 (PoisonSwampHitbox_Debug·SpiritFireHitbox_Debug) · A11 OverlapBox 전환 (HitboxSize 사용) · A11 DotInterval 기반 피해 간격 · A11 소멸 0.5초 전 페이드 (alpha 1→0·scale 1→0.5) — PD 발화 정합 (본 commit)
2026-05-15 §3 A10 분신 (Clone) 신설 — Category 3 Summon · CloneEffector + CloneInstance + PlayerSkillInventory.OnPlayerSkillFired hook + 0.5초 지연 큐 + IsCloneFireActive 분기 (damage 50% 반감) · spawn 위치 facing 반대 1유닛 · sprite alpha 0.5 · BaseCooldown 30 PM 1차 추정. BT12-Dev-Clone PD 명세 5항목 정합 + C49 1단계 (개발팀장 Opus 설계) 시범 (후속 EerieVillage commit)
2026-05-15 §3 A10 PD 결정 4건 반영 — BaseCooldown 30→25·MinionLifetime 0(영구)→12초 자동 소멸·facing 고정·무적 Collider 미부착·Lv 업 시 분신 수 X·지속시간+데미지 비율(%) ↑ (balance 후속). BT12-Dev-Clone PD 직접 결정 2026-05-15 (후속 EerieVillage commit)

5. 환경 셋업·테스트

  • 테스트 키: 1 (A02)·2 (A04)·3 (A05)·4 (A_Laser)·5 (A13) — TestSkillFireOn1to5
  • 기본 공격 자동 발사: OFF (StartingCardIds 빈 배열·PD 지시 2026-05-14)
  • 적 HP: 99999 (테스트용·Enemy.prefab RandomMaxHPRange (99999, 99999))
  • 박스 시각화: ON (HitboxDebug.ShowDebugVisuals=true)