[2025_10_27]다양한 미니게임이 있는 메타버스만들기-3(AnimatorOverrideController,RuntimeAnimatorController)

2025. 10. 27. 20:06TIL

개념 정리

RuntimeAnimatorController

  • 역할: Animator의 컨트롤러를 나타내는 부모 클래스
  • 특징: Animator와 AnimatorOverrideController를 모두 참조 가능
  • 용도: 컨트롤러 타입에 구애받지 않고 유연하게 애니메이터를 다룰 수 있음

AnimatorOverrideController

  • 역할: 기존 애니메이션 클립을 덮어쓰는 컨트롤러
  • 특징: RuntimeAnimatorController를 상속받음
  • 용도: 베이스 애니메이터의 구조는 유지하면서 특정 애니메이션만 교체

상속 관계

 
 
RuntimeAnimatorController (부모)
    ↑
AnimatorOverrideController (자식)

RuntimeAnimatorController 타입으로 선언하면 AnimatorOverrideController도 할당 가능 (다형성)

실제 사용 예시

Product ScriptableObject 구조

 
 
csharp
public enum ProductType { CharacterSkin, Vehicle }

[CreateAssetMenu(fileName = "New Product", menuName = "Shop/Product")]
public class Product : ScriptableObject 
{
    public int productID;
    public string productName;
    public Sprite productIcon;        // UI에 표시할 스프라이트
    public Sprite productSprite;      // 실제 적용될 스프라이트
    public RuntimeAnimatorController animatorOverride;  // 애니메이션 컨트롤러
    public int price;
    public ProductType type;
    public string description;
}

사용 시나리오

  1. ScriptableObject 생성: 상점에 판매할 스킨/탈것 아이템마다 Product 에셋 생성
  2. 애니메이션 할당: animatorOverride 필드에 AnimatorOverrideController 또는 Animator할당
  3. 런타임 적용: 플레이어가 스킨/탈것을 변경하면 해당 애니메이션으로 교체

장점

  • 유연성: RuntimeAnimatorController 타입 덕분에 일반 Animator나 Override 모두 사용 가능
  • 재사용성: 같은 베이스 애니메이터에서 클립만 바꿔 다양한 스킨 구현
  • 관리 용이: ScriptableObject로 아이템별 애니메이션을 독립적으로 관리

핵심 요약

  • AnimatorOverrideController: 특정 애니메이션 클립을 덮어쓰는 기능
  • RuntimeAnimatorController: 두 가지 컨트롤러를 모두 담을 수 있는 부모 타입
  • 활용: 플레이어 커스터마이징(스킨/탈것) 시스템에서 애니메이션 동적 교체