# 스킬 이펙트 확정 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`)