캐릭터용 애니메이션 블루프린트가 복잡해지기 시작하면 애니메이션 블루프린트의 일부를 다른 애니메이션 블루프린트에서 가져와 재사용하고 싶은 경우가 있습니다. 여기에는 특정 애니메이션 블루프린트 링크하기, 애니메이션 레이어 링크하기, 템플릿 사용 등 여러 가지 방법이 있습니다.
이 문서에서는 다양한 방법으로 애니메이션 블루프린트를 모듈화하는 방법을 알아봅니다.
전제조건
- 애니메이션 블루프린트를 만들었고 이에 대해 파악하고 있어야 합니다.
링크된 애님 그래프
애니메이션 블루프린트 내에서 Linked Anim Graph 노드를 사용하여 다른 애니메이션 블루프린트를 참조할 수 있습니다.
생성 및 개요
이 노드를 생성하려면 애님 그래프(Anim Graph) 를 우클릭하고 링크된 애님 블루프린트(Linked Anim Blueprints) 카테고리에서 Linked Anim Graph 를 선택합니다. 이 목록에서 특정 애니메이션 블루프린트 레퍼런스를 선택하여 노드를 추가한 다음 이를 참조할 수 있습니다.

이 노드는 디테일(Details) 패널에 다음 프로퍼티를 포함합니다. 이 세팅은 Linked Anim Layer 노드에도 적용됩니다.

이름 | 설명 |
---|---|
인스턴스 클래스(Instance Class) | 이 Linked Anim Graph 노드에 사용할 애니메이션 블루프린트 클래스입니다. |
노티파이를 링크된 인스턴스에서 수신(Receive Notifies from Linked Instances) | 다른 링크된 애님의 스켈레톤 애니메이션 노티파이를 이 링크된 인스턴스로 수신할지 여부를 정합니다. 이는 애니메이션 노티파이 처리를 하나의 링크된 애님 인스턴스에 캡슐화하는 동시에 재생은 다른 곳에서 일어날 수 있도록 하고자 할 때 유용합니다. |
링크된 인스턴스로 노티파이 전파(Propagate Notifies to Linked Instances) | 스켈레톤 애니메이션 노티파이가 이 링크된 인스턴스에서 다른 링크된 인스턴스로 전송되는지 여부를 정합니다. 노티파이를 링크된 인스턴스로 전파(Propagate Notifies to Linked Instances) 는 타깃 링크된 애님 인스턴스에서도 활성화되어야 전파에 성공합니다. |
Linked Anim Graph 노드를 더블클릭하면 할당된 경우 링크된 애니메이션 블루프린트 에셋이 열립니다.
입력 포즈
링크된 애님 그래프를 사용할 수 있는 방법 중 하나는 애니메이션 입력을 Input Pose 노드를 통해 노출하는 것입니다. 링크된 블루프린트의 애님 그래프(Anim Graph) 에서 우클릭하여 기타(Misc.) 카테고리에서 Input Pose 를 선택하여 노드를 생성합니다. 그런 다음 이 노드를 애니메이션 노드에 연결할 수 있습니다.

선택 사항으로 Input Pose를 선택하고 디테일(Details) 패널에서 이름(Name) 을 변경할 수 있습니다.

Input Pose 노드는 필요한 만큼 생성할 수 있으며, 모든 Input Pose 노드는 Linked Anim Graph 노드에 입력 핀으로 표시될 것입니다.

입력 변수
변수도 링크된 애님 그래프에 노출될 수 있으며, 그 프로세스는 변수를 퍼블릭으로 만드는 블루프린트 프로세스와 유사합니다. 변수를 선택하고 인스턴스 편집가능(Instance Editable) 을 활성화합니다. 이렇게 하면 링크된 애님 그래프에 변수가 노출됩니다.

링크된 애님 레이어
링크된 애님 그래프를 이용해 특정 애니메이션 블루프린트로 링크합니다. 링크된 애님 레이어(Linked Anim Layers) 를 사용하면 보다 표준화된 형태로 링크할 수 있습니다. 링크된 애님 레이어를 사용하려면 그래프의 프리셋 애니메이션 레이어를 정의하는 애니메이션 레이어 인터페이스(Animation Layer Interface) 를 생성해야 합니다. 그런 다음 이런 서로 다른 레이어를 위한 주요 로직 구조를 포함하는 프라이머리 애니메이션 블루프린트를 생성한 뒤 각 게임플레이의 차별점을 위한 여러 애니메이션 블루프린트를 생성합니다.

일반적으로 링크된 애님 레이어는 복잡도가 높은 애니메이션 프로젝트를 만들 때 사용하며, 일례로 새 애니메이션이 추가 및 업데이트되는 라이브 서비스 프로젝트가 있습니다. 이는 워크플로가 특정 게임플레이 로직을 위해 새 애니메이션 블루프린트를 생성하거나 제거하는 것을 중심으로 돌아가기 때문입니다.
단일 애니메이션 블루프린트를 계속 업데이트 및 관리하는 것보다 로직을 이런 레이어로 분리하는 것이 좋습니다. 그러면 멀티 유저 협업이 가능해지고 메모리가 절약됩니다. 관련 애니메이션 블루프린트가 링크되고 사용될 때에만 시스템에서 해당 항목을 로드하기 때문입니다.
애니메이션 블루프린트를 다수의 에셋 파일로 분할하여 링크된 애님 레이어로 애니메이션 메모리를 제어할 수 있습니다. 링크된 레이어를 포함하는 애니메이션 블루프린트는 필요한 경우 언리얼 엔진의 메모리 관리 시스템을 사용하여 로드 및 언로드할 수 있습니다. 따라서 애니메이션 블루프린트의 링크가 해제될 때 이를 메모리에서 제거하려면 추가 스트리밍 로직을 구성해야 합니다.
애니메이션 레이어 인터페이스
링크된 애님 레이어 시스템을 생성하려면 애니메이션 레이어 인터페이스 에셋을 생성해야 합니다. 여기서 애니메이션 블루프린트에 사용할 애니메이션 레이어를 정의합니다. 콘텐츠 브라우저(Content Browser) 에서 + 추가(+ Add) 를 클릭한 다음 애니메이션(Animation) > 애니메이션 인터페이스(Animation Interface) 를 선택합니다.

에셋을 열어서 애니메이션 레이어 인터페이스 에디터를 봅니다. 이 에셋과 상호작용하는 주요 방법은 애니메이션 레이어(Animation Layers) 를 추가하는 것입니다. 그러려면 내 블루프린트(My Blueprint) 패널에서 + 추가 를 클릭합니다.

디폴트가 아닌 같은 그룹 이름 아래의 레이어는 같은 애니메이션 인스턴스를 공유합니다. 레이어 인터페이스에서 그러한 레이어에는 새로운/디폴트가 아닌 공유 이름을 사용하는 것이 좋습니다.
일부 레이어에서는 포즈 및 프로퍼티 입력을 노출하는 것이 좋습니다. 이 레이어가 들어오는 포즈를 수정하기 위한 용도인 경우 등 이러한 입력이 링크된 애님 구조에 필요할 수 있기 때문입니다. 그러려면 선택한 레이어의 디테일(Details) 패널에 있는 입력(Input) 섹션에서 추가(+) 버튼을 클릭합니다. 입력(Inputs) 프로퍼티 아래에서 프로퍼티 입력을 추가할 수도 있습니다.

예시 애니메이션 레이어 구성의 경우, 풀 바디(Full Body), 상단 바디(Upper Body), IK(Inverse Kinematics) 레이어의 일반 시스템을 생성하는 것이 좋습니다. 이 레이어들은 캐릭터에 다음과 같은 기능을 제공합니다.
- 풀 바디 : 캐릭터의 전반적인 베이스 로코모션 및 애니메이션입니다.
- 상단 바디 : 캐릭터가 아이템이나 무기를 든 경우 이 로직을 포함하는 레이어를 가질 수 있습니다.
- IK : 캐릭터의 최종 팔 또는 다리 조정입니다. 일반적으로 다리 IK를 사용하여 발 배치를 조정하거나 팔 IK를 사용하여 손이 무기를 정확하게 쥐게 합니다.
이 경우 애니메이션 레이어 인터페이스는 다음과 같은 모습일 것입니다.

애니메이션 레이어 인터페이스 그래프는 읽기 전용이며, 애니메이션 블루프린트용 공유 애니메이션 레이어 및 입력 목록을 사전 정의하는 데만 사용됩니다.
베이스 블루프린트 구성
링크된 애님 레이어를 사용할 때는 '베이스' 애니메이션 블루프린트를 구성하여 캐릭터에 할당합니다. 이 베이스에는 링크된 애니메이션 레이어의 일반 구조가 포함될 수도 있지만, 꼭 그 안에 로직이나 데이터가 있어야 하는 것은 아닙니다.
우선 애니메이션 레이어 인터페이스를 애니메이션 블루프린트에 바인드해야 합니다. 그러려면 클래스 세팅(Class Settings) 을 선택한 다음 인터페이스(Interfaces) 섹션에서 추가(Add) 드롭다운 메뉴를 클릭합니다. 애니메이션 레이어 인터페이스 를 선택합니다.

이제 사전 정의된 레이어가 블루프린트의 애니메이션 레이어 섹션에 표시됩니다. 이 레이어를 AnimGraph로 드래그하여 베이스 로직을 빌드합니다. 이 예시에서 전체 구조 순서는 풀 바디 > 상단 바디 > IK 입니다. 상단 바디 및 IK 레이어에는 포즈 입력이 추가되어 애니메이션이 통과 및 수정될 수 있습니다.

구성을 얼마나 복잡하게 모듈형으로 할 것인지에 따라 베이스 애니메이션 블루프린트 내에 특정 로직을 생성하지 않을 수도 있습니다. 레이어를 빈 상태, 디폴트 상태로 두고 진짜 로직은 여러 링크된 애니메이션 블루프린트에서 오게 할 수도 있습니다.

특정 블루프린트 구성
이제 캐릭터의 애니메이션 블루프린트 스테이트 중 하나를 위한 특정 로직을 생성해야 합니다. 그러려면 두 번째 애니메이션 블루프린트를 생성하고 여기에 애니메이션 레이어 인터페이스를 바인딩해야 합니다.
블루프린트를 생성하고, 열고, 인터페이스를 바인딩했다면 각 링크된 레이어 내에 로직을 생성할 수 있습니다. 이전 예시에서 이어지는 내용으로, 이 애니메이션 블루프린트는 무기를 장비한 캐릭터의 전반적인 애니메이션 및 행동을 처리합니다. 이 레이어는 다음 로직을 포함하고 있습니다.
- 상단 바디 에는 캐릭터의 무기 조준 행동을 제어하는 에임 오프셋(Aim Offset) 노드가 있습니다(해당 무기 특정).
- IK 에는 캐릭터의 최종 손 배치를 제어하는 IK 릭(IK Rig) 노드가 있습니다(해당 무기 특정)
- 풀 바디 에는 캐릭터의 일반 로코모션을 제어하는 스테이트 머신(State Machine) 이 있습니다(해당 무기 또는 무브먼트 세트 특정).

이렇게 하면 무기의 애니메이션 블루프린트 로직 전체를 이 블루프린트로만 독점 분할하여 다른 사용자가 이 블루프린트에서 작업하도록 지원할 수 있습니다. 컨텍스트에 따라 다른 로직이 있는 애니메이션 블루프린트를 필요한 만큼 생성할 수 있습니다.
이와 같은 특정 로직 애니메이션 블루프린트의 경우, 베이스 블루프린트에 있는 것과 동일한 애님 그래프 로직을 다시 생성할 필요는 없습니다. 그 대신 애님 그래프 내부의 전반적인 로직 구조 관리의 측면에서 베이스 블루프린트를 '부모' 블루프린트로 간주할 수 있습니다. 이러한 전용 블루프린트는 링크된 각 레이어의 로직을 생성하는 데만 사용합니다.
애님 레이어 링크하기
링크된 애님 레이어를 사용하는 마지막 단계는 블루프린트 노드에 링크 애님 클래스 레이어(Link Anim Class Layers) 를 추가하는 것입니다. 이 노드를 사용하여 특정 애니메이션 블루프린트 클래스 가운데 하나의 레이어를 애니메이션 레이어 시스템에 바인드하여 내부 레이어 로직이 현재 로직을 덮어쓰게 합니다.

- 타깃(Target) 은 스켈레탈 메시 컴포넌트를 연결할 위치입니다.
- In 클래스(In Class) 는 애니메이션 블루프린트 클래스를 지정할 위치입니다.
이전 예시에서 이어서 Link Anim Class Layers 노드를 생성하고, 캐릭터 메시를 연결하고, In 클래스 입력을 특정 무기 애니메이션 블루프린트로 설정합니다. 경우에 따라 레이어 변경 후 몽타주를 재생하여 '무기 장비' 애니메이션 등 애니메이션 변경으로의 트랜지션을 돕는 게 좋습니다.

이 예시를 요약하면 다음과 같습니다.
- 무기 액터 블루프린트는 무기 애니메이션 블루프린트 레이어에 대한 레퍼런스를 저장합니다. 이는 해당 특정 무기와 관련된 애니메이션은 게임에서 무기가 활성화될 때에만 로드된다는 것을 의미합니다.
- 그런 다음 소총, 활, 로켓 런처 등 다른 무기에도 유사한 로직과 에셋을 생성할 수 있습니다. 각 무기는 연관된 애니메이션 블루프린트 레이어의 레퍼런스를 저장하므로 이러한 특정 애니메이션은 해당 무기가 로드될 때에만 로드됩니다.
추가 사용 사례 예시
다음은 포트나이트에서 사용된 링크된 애님 레이어의 사용 사례입니다.

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

템플릿 사용법
애니메이션 블루프린트 템플릿은 일반 애니메이션 블루프린트와 동일한 인터페이스 및 에디터를 포함합니다. 하지만 템플릿은 스켈레톤에 대응하지 않기 때문에 특정 스켈레톤과 연관된 애니메이션이나 에셋을 직접 참조할 수 없습니다. 그 대신 템플릿 로직을 파라미터화하고 다른 블루프린트에서 설정된 변수를 노출할 수 있습니다.
예를 들어 AnimGraph에 Sequence Player 노드를 생성할 수 있습니다. 일반적으로 이 노드는 애니메이션 시퀀스를 직접 플레이할 때 사용되지만, 그 대신 시퀀스(Sequence) 프로퍼티를 변수 로 노출할 수 있습니다. 그러려면 시퀀스 플레이어의 디테일(Details) 패널에서 바인드(Bind) 드롭다운 메뉴를 클릭한 뒤 핀으로 노출(Expose As Pin) 을 선택합니다.

다음으로 새로 노출된 핀 을 시퀀스 플레이어에서 우클릭하고 변수로 승격(Promote to Variable) 을 선택하여 애니메이션 시퀀스가 플레이할 변수를 생성합니다. 링크된 애님 그래프 변수를 노출하는 것과 마찬가지로 이 변수를 퍼블릭으로 만들어야 합니다.

애니메이션 블루프린트 템플릿은 그래프를 우클릭하고 컨텍스트 메뉴의 링크된 애님 블루프린트(Linked Anim Blueprints) 섹션에서 템플릿을 선택하여 애님 그래프에서 참조됩니다.

그런 다음 이 템플릿에서 노출된 변수를 블루프린트 요구 사항에 맞게 설정하면 됩니다.
