15. EffectSystem
왜 필요한가
시각 이펙트(VFX)와 상태 효과(버프/디버프)는 책임이 다르다. 이 둘을 한 클래스에 섞으면 재사용이 어렵다. Framework는 IVfxSystem(시각)과 EffectStack(상태 효과)을 분리한다.
언제 사용하는가
- 파티클/비주얼 이펙트 재생 ->
IVfxSystem - 지속 시간이 있는 상태 효과(버프/디버프) 관리 ->
EffectStack
프로젝트에서 어떤 역할인가
Effect -> Stat/Audio 등 다른 System과의 결합(예: 특정 효과가 Stat을 변경)은 Runtime이 제공하지 않는다. 이는 Game Layer 책임이다 (EffectModifierBinder는 이 이유로 Runtime에서 제거됨).
실제 게임에서는 언제 호출되는가
스킬 시전 시 VFX 재생, 상태이상 부여 시 EffectStack에 추가.
코드 예제
[Inject] private IVfxSystem _vfx;
[Inject] private EffectStack _effects;
_vfx.Play("Hit_Fire", position);
_effects.Add(new PoisonEffect(duration: 5f));
// Effect -> Stat 연동은 Game Layer에서 직접 구현
관련 Sample
Samples/Effect/EffectSystemSample.cs
Best Practice
Effect가 Stat을 바꿔야 한다면 Game Layer의 Controller/Service에서 EffectStack 이벤트를 구독해 IStatSystem을 호출한다. Runtime에 바인더를 만들지 않는다.
자주 하는 실수
- Effect -> Stat/Audio 자동 바인딩을 Framework Runtime에 요청/구현
- 시각 이펙트와 상태 효과를 하나의 클래스에 혼합
실습 과제
- 간단한 상태 효과(예: 5초간 이동속도 감소)를
EffectStack에 추가해본다. - 해당 효과가 만료될 때 VFX를 재생하도록 Game Layer에서 연결해본다.
이전 문서 / 다음 문서
이전: 14_AudioSystem.md 다음: 16_StatSystem.md
관련 API
MCP_Index.md Effect 섹션