프록시(Proxy), 프록시 테이블(Proxy Table) 및 선택기 테이블(Chooser Table) 에셋을 복합적으로 사용하여 다이내믹 에셋 선택 로직을 빌드해 프로젝트의 변수를 기반으로 애니메이션을 구동할 수 있습니다. 예를 들어, 프록시 및 프록시 테이블 에셋을 사용하면 다양한 무기 세트 같은, 캐릭터에 로드하고 사용할 애니메이션 세트 종류를 선택할 수 있습니다. 또는 선택기 테이블을 사용하면 개별 애니메이션 에셋을 동적으로 선택할 수 있는데, 예를 들면 프로젝트의 컨텍스트 변수를 사용하여 캐릭터의 적중 위치에 맞춰 다른 적중 반응을 적용할 수 있습니다.
이 문서에서는 언리얼 엔진에서의 다이내믹 애니메이션 선택 시스템 구성에 대해 자세히 알아볼 수 있습니다.
이 문서에서는 애니메이션 시퀀스, 몽타주 또는 AnimInstance 클래스 같은 애니메이션 관련 에셋을 선택하기 위한 선택기 및 프록시 테이블 사용 방법을 중점적으로 다루고 있지만, 시스템 자체는 일반적인 시스템으로 모든 타입의 에셋이나 오브젝트, 클래스를 선택하는 데 사용할 수 있습니다.
전제 조건
선택기(Chooser) 플러그인을 활성화합니다. 메뉴 바의 편집(Edit) > 플러그인(Plugins)으로 이동하여 애니메이션(Animation) 섹션에서 선택기(Chooser) 플러그인을 찾거나 검색창을 사용합니다. 플러그인을 활성화하고 에디터를 재시작합니다.
런타임 시 컨텍스트 상황에 따라 동적으로 선택하려는 애니메이션 세트가 프로젝트에 포함되어 있어야 합니다. 고유한 코스메틱 애니메이션 세트나 컨텍스트 애니메이션 시나리오와 같은 관련 게임플레이 애니메이션 또는 무기 같은 장착할 수 있는 아이템과 관련된 애니메이션 세트 등이 여기에 해당합니다.
다이내믹 애니메이션 선택 로직을 빌드할 수 있는 함수형 애니메이션 블루프린트가 프로젝트에 포함되어 있어야 합니다.
애니메이션 선택 시스템 구성하기
이 섹션에서는 런타임 시 프로젝트의 컨텍스트에 따라 적중 반응 애니메이션 재생을 동적으로 선택할 수 있도록 프로젝트에서 애니메이션 선택기 시스템을 설정하는 방법에 대해 살펴봅니다.
프록시 에셋 생성하기
프록시 에셋(Proxy Asset)은 어떤 프록시 테이블(Proxy Table) 에셋이 활성화되어 있는지에 대한 컨텍스트 정보와 기타 관련 변수를 저장하는 데 사용됩니다.
프록시 에셋을 생성하려면 콘텐츠 브라우저에서 (+) 추가(Add)를 클릭하고 기타(Miscellaneous) > 프록시 에셋(Proxy Asset)으로 이동합니다.
유휴, 걷기, 달리기 세트와 같이, 캐릭터를 구동하기 위해 동적으로 애니메이션을 선택하려는 각 애니메이션 세트에 대한 프록시 에셋을 생성합니다.
프록시 에셋을 생성한 다음에는 각 에셋을 열어 세팅에 액세스합니다.
각 프록시 에셋의 타입(Type) 프로퍼티를 사용하려는 애니메이션 에셋 타입으로 설정합니다. 여기서는 AnimSequenceBase로 설정합니다.
(+)추가(Add)를 클릭하고 컨텍스트 오브젝트 타입 클래스(Context Object Type Class) 옵션을 선택하여 새 인덱스(Index) 배열을 추가함으로써 컨텍스트 데이터(Context Data) 프로퍼티를 애니메이션 블루프린트(Animation Blueprint) 옵션으로 설정합니다.
해당 인덱스 배열의 세팅을 확장하고 클래스(Class) 프로퍼티를 해당 애니메이션 블루프린트(여기서는 ABP_Manny)로 설정합니다. 그런 다음, 디렉션(Direction) 프로퍼티가 읽기(Read)로 설정되어 있는지 확인합니다.
애니메이션 블루프린트 구성
프록시 에셋을 구성한 다음에는 런타임 중에 활성 프록시를 저장하기 위해 캐릭터의 애니메이션 블루프린트에 변수를 생성해야 합니다. 이 변수를 생성하려면 캐릭터 애니메이션 블루프린트를 열고 내 블루프린트(My Blueprint) 패널에서 (+)추가(Add)를 사용하여 새 변수를 생성합니다. 그런 다음, 그 변수 타입을 프록시 테이블 오브젝트 레퍼런스(Proxy Table Object Reference)로 설정합니다. 변수를 생성한 다음에는 애니메이션 블루프린트를 저장하고 컴파일합니다.
프록시 테이블 변수는 애니메이션 그래프의 Evaluate Proxy 노드에서 런타임 시 활성 프록시 테이블을 결정하는 데 사용됩니다.
프록시 테이블 에셋 생성하기
프록시 테이블(Proxy Table) 에셋은 런타임 시 동적으로 선택할 수 있는 애니메이션 에셋 세트를 저장하는 데 사용됩니다. 예를 들어, 한 프록시 테이블에는 캐릭터의 유휴 애니메이션을 저장하고 다른 프록시 테이블에는 걷기 또는 달리기 애니메이션 세트를 저장할 수 있습니다.
프록시 테이블 에셋을 생성하려면 콘텐츠 브라우저에서 (+)추가(Add)를 클릭하고 기타(Miscellaneous) > 프록시 테이블(Proxy Table)로 이동합니다.
비무장 캐릭터 및 권총이나 소총을 들고 있는 캐릭터에 대한 로코모션 애니메이션 같이 다양한 애니메이션 세트가 필요한 모든 컨텍스트 상황에 대해 프록시 테이블 에셋을 생성합니다.
프록시 테이블 에셋을 생성한 다음에는 에셋을 열어 프록시 테이블의 값에 액세스합니다.
프록시 테이블에서 (+)Add Row(행 추가)를 사용하여 각 프록시 에셋(Proxy Asset)에 대한 항목을 추가합니다. 그런 다음 값(Values) 열을 사용하여 세트에서 관련 애니메이션 에셋을 할당할 수 있습니다.
다음 워크플로 예시에서는 ProxyTable_Unarmed 에셋의 ProxyAsset_Idle 및 ProxyAsset_Walk 행에 각각 Unarmed_Idle 및 Unarmed_Walk 애니메이션이 할당되어 있습니다. 그리고 ProxyTable_Pistol 에셋의 동일한 프록시 에셋 행에 각각 Pistol_Idle 및 Pistol_Walk 애니메이션이 할당되어 있습니다.
값 열에는 더 다이내믹한 애니메이션 선택 시스템을 구현하기 위해 클래스(Class) 레퍼런스, 선택기 에셋(Chooser Asset) 또는 룩업 프록시(Lookup Proxy)를 포함할 수도 있습니다.
런타임 시 프록시 테이블 사용하기
Sequence Player 노드에서 애니메이션 노드 함수를 사용하여 런타임 시 프록시 테이블 에셋을 사용할 수 있습니다. 프록시 테이블 에셋 선택을 위한 새 함수를 생성하려면, Sequence Player 노드를 선택하고 On Update 바인딩에 새 함수를 추가합니다.
On Update 노드에서 Evaluate Proxy 노드를 추가합니다.
그런 다음, 추가한 노드를 선택하고 프록시(Proxy) 프로퍼티에서 드롭다운 메뉴를 사용하여 프록시 에셋을 선택합니다.
그런 다음, 그 결과를 변수로 승격하고 출력을 Sequence Player 노드에 연결합니다.
그러면 이제 선택기 테이블 등의 다양한 방법을 사용하여 Evaluate Proxy 노드에 활성 프록시 테이블 에셋을 설정하여 캐릭터를 구동하는 애니메이션 세트를 동적으로 변경할 수 있습니다.
선택기 테이블 에셋 생성하기
선택기 에셋은 컨텍스트에 따라 선택하고 재생할 수 있는 다양한 반복 애니메이션으로 구성된 애니메이션 데이터 세트를 저장하는 데 사용됩니다 예를 들어, 선택기 테이블에는 적중 반응 애니메이션 세트가 포함될 수 있는데, 각 항목은 팔, 다리, 가슴, 머리 등 적중되는 신체 부위에 따라 반응하는 애니메이션으로, 적중 위치와 같은 컨텍스트 변수를 기반으로 선택될 수 있습니다.
선택기 테이블 에셋을 생성하려면 콘텐츠 브라우저에서 (+)추가(Add)를 클릭하고 기타(Miscellaneous) > 선택기 테이블(Chooser Table)로 이동합니다.
선택기 테이블을 생성한 다음에는 에셋을 열어 프로퍼티에 액세스할 수 있습니다.
(+)추가(Add)를 사용하여 컨텍스트 데이터(Context Data) 프로퍼티에 새 배열 요소를 생성하고 프로퍼티를 컨텍스트 오브젝트 타입 클래스(Context Object Type Class) 옵션으로 설정합니다. 그런 다음, 인덱스 배열을 확장하고 클래스(Class) 프로퍼티를 캐릭터의 애니메이션 블루프린트로 설정하고 디렉션(Direction) 프로퍼티가 읽기(Read)로 설정되어 있는지 확인합니다. 그런 다음, 출력 오브젝트 타입(Output Object Type)을 사용하려는 애니메이션 에셋으로 설정할 수 있습니다. 이 워크플로 예시에서는 애니메이션 시퀀스를 사용하므로 AnimSequenceBase 클래스 옵션을 선택했습니다.
선택기 테이블 패널에서 (+)열 추가(Add Column) 버튼을 사용하여 선택 프로세스에 영향을 주고자 하는 애니메이션 블루프린트의 변수를 설정하기 위해 열 추가를 시작할 수 있습니다. 열을 생성한 후에는 애니메이션 블루프린트에서 선택에 영향을 줄 수 있는 변수와 각 행에서 애니메이션 시퀀스 에셋을 선택하기 위해 도달해야 하는 변수의 값 또는 스테이트를 정의할 수 있습니다.
이 워크플로 예시에서 boolean 변수 IsCrouching은 값이 false이면 MM_HangingIdle 애니메이션을 선택하고, 값이 true이면 MM_Rifle_Walk_Left 애니메이션을 선택합니다. MoveemntAngle 변수는 값이 -100에서 100 사이이면 MM_HangingIdle 애니메이션을 선택하고 값이 0.0일 때만 MM_Rilfe_Walk_Left 애니메이션을 선택합니다.
이 선택 프로세스를 사용하여 캐릭터 애니메이션을 구동하려면 프록시 테이블 항목을 선택기 평가(Evaluate Chooser)로 설정하고 선택기 테이블 에셋을 할당해야 합니다.
이제 선택된 애니메이션이 활성 프록시 테이블 에셋과 선택기 테이블의 선택에 따라 변경됩니다.