⏱ 1 min read
애니메이션 클립 재사용 방안

광장 캐릭터 수에 비례해 AnimationClip이 중복 인스턴스화되는 버그를 Memory Profiler로 특정. 근본 원인(FxClipEventRuntime)을 디버깅.
Problem
광장 화면에 같은 캐릭터가 여러 명 등장할 때, AnimationClip 메모리가 캐릭터 수에 정비례해서 증가하는 현상이 발견됐다.
측정값:
- 동일 캐릭터 10개 — AnimationClip 400MB (캐릭터당 40MB × 10)
- 기대치 — 40MB (클립 공유 시)
재현: Unity Memory Profiler 스냅샷에서 CH_MelonSoda_A001_Emotion_Happy_01 클립이 472.4 KB짜리 인스턴스로 5개 이상 동시에 올라와 있는 것을 확인.
Issue Analysis
- 01
Issue Analysis
CookieIngameAnimatorController
└─ FxClipEventRuntime (Clip 기반 EventFX)
└─ Instantiate(clipAsset) ← 원본 Release 후 복사본 생성FxClipEventRuntime이 이벤트 FX 처리를 위해 AnimationClip을Instantiate로 복사하고 원본을 해제하는 구조였다. 캐릭터 인스턴스마다 이 과정이 반복되어, 동일한 클립 에셋이 캐릭터 수만큼 독립 복사본으로 메모리에 상주.- AnimatorOverrideController 없이 원본 클립을 직접 복사 → Addressables 공유 참조 끊김
- 광장 유저 수 증가에 따라 메모리가 선형적으로 증가
- 02
Solution Approach
캐릭터 A ─┐
캐릭터 B ─┼─ 각자의 AnimatorOverrideController → 공유 AnimationClip 에셋 참조
캐릭터 C ─┘
기획/아트팀 협의 결과: 인게임/광장 캐릭터에 Clip 기반 EventFX를 사용하지 않는 방향으로 제거 진행.
Conclusion
결과
| 수정 전 | 수정 후 | |
|---|---|---|
| 동일 캐릭터 10개 AnimationClip | ~400 MB | ~40 MB |
| 원인 | FxClipEventRuntime Instantiate 누적 | — |
Tradeoffs & Future Work
Tradeoffs
- 클립 기반 EventFX 기능 자체를 제거하는 방향 — 해당 기능이 인게임에서 실제로 필요한지 여부를 기획팀과 확인 필요했음
- AnimatorOverrideController 공유 구조 전환 시 클립 런타임 교체 로직 재검토 필요