오늘은 스킬 연출 설계를 조금 더 구조적으로 정리할 수 있는 방법에 대해 고민했다.
기존에는 스킬 사용 시 VFX, 애니메이션, 데미지 로직 등을 스크립트에서 순차적으로 호출해서 처리했는데, 이 방식은 디자인 변경에 유연하지 못하고 유지보수가 어렵다는 문제가 있었다.
그래서 생각한 개선 방안은 다음과 같다:
SkillDataSO에 Timeline을 직접 연결해두고, 스킬 사용 시 해당 Timeline이 자동 재생되도록 구성
이 방식의 장점은:
애니메이션, 이펙트, 사운드를 Timeline에서 한 번에 제어할 수 있다.
디자이너가 Timeline을 수정해도 로직을 건드리지 않고 연출을 바꿀 수 있다.
스킬마다 Timeline을 다르게 가져갈 수 있어 유연성과 재사용성이 뛰어나다.
이 과정에서 중요한 개념이 하나 등장한다: ExposedReference
public ExposedReference<Transform> target;
ExposedReference는 Timeline에서 외부의 실제 오브젝트(예: 공격 대상, 이펙트 타겟 등)를 참조하기 위한 구조다. Timeline은 PlayableAsset이기 때문에 직렬화된 데이터만 가지고 있는데, PlayableDirector가 실제 오브젝트를 런타임에 바인딩해준다.
즉, 타임라인 내부에서는 플레이어/몬스터 등의 오브젝트를 직접 모르기 때문에, 외부에서 연결해줘야 한다.
오늘은 연출 설계에 있어 Timeline을 적극적으로 활용하면 얼마나 시스템이 유연해지는지를 다시금 느꼈다. 단순히 타임라인을 사용하는 것을 넘어서, SkillData에 포함시켜 관리하는 방식은 구조적으로도 깔끔하고 팀 작업에서도 효율이 좋다.
Timeline + ExposedReference + SO 구조는 턴제 RPG에서 스킬 연출을 유연하게 구현하는 좋은 패턴이라 느꼈다.