애니메이션 블루프린트 링크(Animation Blueprint Linking) 시스템은 서브 애님 인스턴스의 익스텐션입니다. 이 익스텐션은 애니메이션 그래프의 서브섹션을 동적으로 전환하도록 지원하여 멀티 유저 협업 및 메모리 절감을 실현합니다. 애니메이션 블루프린트가 사용하지 않는 애니메이션 에셋을 더 이상 로드하지 않게 되기 때문입니다.
이 하우투에서는 애니메이션 레이어 인터페이스 방식으로 링크된 애니메이션 블루프린트에 포함된 애니메이션 포즈를 가져오는 애니메이션 블루프린트를 만들겠습니다.
에픽게임즈 런처 의 학습(Learn) 탭 에 있는 콘텐츠 예제(Content Examples) 프로젝트의 애니메이션 맵 안에도 애니메이션 블루프린트 링크 샘플이 들어있습니다.
단계
이 가이드에서는 시작용 콘텐츠(Starter Content) 가 활성화된 블루프린트 3인칭(Blueprint Third Person) 템플릿을 사용하겠습니다. 프로젝트를 위해 에픽게임즈 런처 의 마켓플레이스 에서 무료로 이용 가능한 애니메이션 스타터 팩(Animation Starter Pack) 도 추가했습니다.
-
프로젝트의 Content > AnimStarterPack 폴더에서 Ue4ASP_Character 를 레벨에 추가합니다. 디테일(Details) 패널에서 플레이어 자동 빙의(Auto Possess Player) 를 Player 0 으로 설정합니다.
그렇게 하면 에디터에서 플레이 시 이 캐릭터를 컨트롤하게 됩니다.
-
콘텐츠 브라우저(Content Browser) 에서 우클릭합니다. 애니메이션(Animation) 에서 MyLayerInterface 라는 애니메이션 레이어 인터페이스 에셋을 생성합니다.
이 에셋은 블루프린트 인터페이스와 유사하며 이를 사용하여 레이어 수, 이름, 속하는 그룹, 입력 등을 정의할 수 있습니다.
-
MyLayerInterface 에셋에서 레이어를 ExampleLayer 로 명명합니다. 디테일 패널에서 + (더하기) 기호를 클릭하여 입력 을 추가한 다음 컴파일(Compile) 을 클릭합니다.
애니메이션 레이어는 블렌딩 또는 다른 로직 기반 구현 목적으로 사용 가능한 입력 파라미터와 함께 서브 그래프의 다수의 입력 포즈를 노출할 수 있습니다.
-
(Animation Starter Pack 폴더에서) UE4_Mannequin_Skeleton 을 사용하여 애니메이션 블루프린트를 생성하고 HitReact_AnimBP 로 명명합니다.
이 가이드에서 앞서 레벨에 배치한 캐릭터에 사용된 기존 애니메이션 블루프린트에 링크할 블루프린트 애니메이션입니다.
-
툴바의 HitReact_AnimBP 안에서 클래스 세팅(Class Settings) 버튼을 클릭하고 디테일 패널의 인터페이스(Interfaces) 에서 MyLayerInterface 를 추가합니다.
-
Example Layer 의 에셋 브라우저(Asset Browser) 에서 Hit_React_1 애니메이션을 그래프에 추가하고 Output Pose 노드에 연결합니다.
애니메이션 레이어 인터페이스의 Input Pose 노드는 포즈 데이터를 가져와서 이 레이어 내의 다른 로직이나 포즈 데이터와 블렌딩하는 데 사용될 수 있습니다.
-
Content > AnimStarterPack 폴더에서 UE4ASP_HeroTPP_AnimBlueprint 를 열고 클래스 세팅 에서 MyLayerInterface 를 추가합니다.
-
Example Layer 에서 Input Pose 노드를 Output Pose 노드에 아래와 같이 연결합니다.
이 경우 Input Pose 노드는 링크된 애님 BP(Linked Anim BP) (Hit React 애니메이션을 배치한 곳)에서 옵니다. 이 예시에서는 링크된 애니메이션 블루프린트에서 포즈를 바로 받아서 전환하겠습니다.
-
애님 그래프(Anim Graph) 에서 Linked Anim Layer 노드 (Example Layer 로 설정) 를 추가하고 아래와 같이 연결합니다.
디폴트(Default) 스테이트 머신이 포즈를 링크된 애니메이션 레이어를 통해 Output Pose 노드로 전달할 것입니다. 애님 클래스 레이어 링크(Link Anim Class Layers) 를 호출하면 기저 애니메이션 블루프린트가 실행됩니다.
Linked Anim Layer 노드는 인스턴스 클래스(Instance Class) 프로퍼티를 가지며 이를 사용하여 디폴트 레이어 오버라이드를 지정할 수 있습니다. 이는 로직을 다수의 애니메이션 블루프린트로 나누고 싶을 때 특히 유용합니다. 예를 들어 자주 변경되는 IK 로직이 있는 경우 이를 별도의 애니메이션 블루프린트로 옮기고 메인 애니메이션 블루프린트에서 기본으로 실행되도록 설정할 수 있습니다.
-
Content > AnimStarterPack 폴더에서 Ue4ASP_Character 캐릭터 블루프린트를 엽니다.
-
H 키보드 이벤트(또는 기타 키보드 이벤트)를 추가한 다음 메시(Mesh) 컴포넌트를 드래그하여 넣고 Link Anim Class Layers 와 Unlink Anim Class Layers 노드를 모두 HitReact_AnimBP 로 설정합니다.
H를 길게 누르면 In 클래스(In Class) 로 지정된 링크된 애님 BP가 링크된 인스턴스로 구성되고 실행됩니다. H를 놓으면 지정된 클래스를 실행 중인 레이어 노드가 링크 해제되고 디폴트값으로 리셋됩니다.
선택 사항으로 경고 메시지를 해결하기 위해 웅크리기 동작을 위한 C 키보드 이벤트를 추가했습니다.
-
컴파일 하고 에디터에서 플레이 합니다.
최종 결과
아래에서 애니메이션 블루프린트는 H를 눌러서 레이어 노드 및 기반 애니메이션 블루프린트 구성(Hit React 애니메이션 플레이)을 활성화할 때까지 평범하게 실행됩니다.
애니메이션 레이어 및 링크된 애니메이션 블루프린트는 복잡한 캐릭터 내에서 확장성과 조직을 유지하는 데 유용할 수 있습니다. 레이어와 링크된 애니메이션 블루프린트를 사용하면 로직을 애니메이션 블루프린트 내에서 레이어로 분리하거나 아예 다른 애니메이션 블루프린트로 나누고 마스터 애니메이션 블루프린트 내에서 링크할 수 있습니다.
추가 사용 사례
포트나이트에서 사용된 링크된 애님 레이어의 간소화된 사용 사례는 다음과 같습니다.

위 이미지에는 두 가지 인터페이스가 있습니다. 하나는 무기, 하나는 비히클 인터페이스입니다. 둘 다 동시에 활성화할 수도 있습니다.
또는, 둘 중 하나의 인터페이스를 구현하는 단일 애니메이션 블루프린트가 그래프의 여러 포인트를 오버라이드하는 것도 가능합니다. 예를 들면 무기가 WeaponUpperBody
및 WeaponAdditive
를 오버라이드하는 식입니다.
위 구성으로 가능한 몇 가지 예시는 다음과 같습니다.
- 차를 운전할 때는 비히클이 전체 포즈를 오버라이드합니다.
- 조수석에 탈 때는 비히클이 캐릭터 하단 바디의 착석 애니메이션을 재생하는 동안 무기가 상단 바디를 제어합니다. 사용자가 무기를 바꾸면 새 무기 애니메이션 블루프린트가 상단 바디를 제어하며 하단 바디는 계속 비히클에서 플레이합니다.
- 무기는 상단 바디 포즈를 오버라이드할 수 있으며, 그런 다음 메인 그래프의 하단 바디 포즈와 결합됩니다. 그 후 커스텀 애디티브 애니메이션(대기 노이즈 등)이 무기의 풀 바디 포즈 위에 재생됩니다.
포트나이트에서는 무기가 메인 그래프의 여러 포인트를 오버라이드할 수 있습니다. 점프(Jump), 낙하(Fall), 착지(Land), 집라인(Zipline) 등의 로코모션용 스테이트 머신이 그 예시입니다.
각 무기에 대한 스테이트 머신을 복제하는 대신 스테이트 머신이 메인 그래프에서 작동하고, 무기 애니메이션 블루프린트는 각 스테이트를 오버라이드하는 레이어를 갖습니다.
무기가 일부 스테이트를 오버라이드할 필요가 없다면 대응하는 레이어의 출력 포즈에 무엇도 연결되지 않습니다.
또한 레이어를 포함하는 애니메이션 블루프린트는 자체적인 이벤트 그래프를 갖습니다. 따라서 특정 비히클 데이터를 처리해야 하는 경우, 그 데이터를 해당 비히클 애니메이션 블루프린트의 이벤트 그래프 안에 포함되도록 유지할 수 있습니다.