Table of Contents

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에 요청/구현
  • 시각 이펙트와 상태 효과를 하나의 클래스에 혼합

실습 과제

  1. 간단한 상태 효과(예: 5초간 이동속도 감소)를 EffectStack에 추가해본다.
  2. 해당 효과가 만료될 때 VFX를 재생하도록 Game Layer에서 연결해본다.

이전 문서 / 다음 문서

이전: 14_AudioSystem.md 다음: 16_StatSystem.md

관련 API

MCP_Index.md Effect 섹션