Linked Anim Layer와 Overlay
AnimLayer Interface, LinkedAnimBP, Layer Blend 패턴으로 확장 가능한 모듈러 애니메이션 시스템을 구축합니다.
Animation Layer Interface
UAnimLayerInterface를 통한 애니메이션 모듈화 패턴
Animation Layer Interface는 AnimBP의 AnimGraph 로직을 교체 가능한 모듈로 분리하는 메커니즘입니다. C++ 인터페이스처럼 동작하여, 하나의 메인 AnimBP가 런타임에 다른 AnimBP의 구현을 연결(Link)하여 사용할 수 있습니다.
// Animation Layer Interface 정의 (에디터에서 생성)
// UAnimLayerInterface를 상속하는 Blueprint Interface
// 메인 AnimBP에서 Linked Anim Layer 교체
void AMyCharacter::EquipWeapon(EWeaponType WeaponType)
{
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
if (!AnimInstance) return;
TSubclassOf<UAnimInstance> TargetAnimBP;
switch (WeaponType)
{
case EWeaponType::Rifle:
TargetAnimBP = RifleAnimBPClass;
break;
case EWeaponType::Pistol:
TargetAnimBP = PistolAnimBPClass;
break;
case EWeaponType::Unarmed:
TargetAnimBP = UnarmedAnimBPClass;
break;
}
// 레이어 연결 - 즉시 AnimGraph 교체
AnimInstance->LinkAnimClassLayers(TargetAnimBP);
}
// 레이어 해제
AnimInstance->UnlinkAnimClassLayers(CurrentWeaponAnimBPClass);
Linked AnimBP의 내부 동작
LinkAnimClassLayers의 실행 흐름과 데이터 공유 메커니즘
| 특성 | 설명 |
|---|---|
| 인스턴스 생성 | LinkAnimClassLayers 호출 시 대상 AnimBP의 인스턴스가 생성되어 메인 AnimBP에 연결됨 |
| 데이터 공유 | Linked AnimBP는 메인 AnimBP의 프로퍼티에 접근 가능 (Get Main Anim Instance 노드) |
| 독립 평가 | Linked AnimBP의 AnimGraph는 메인 AnimGraph 내에서 서브 트리처럼 평가됨 |
| 블렌딩 | 레이어 전환 시 자동 블렌딩 지원 (Inertialization 사용 가능) |
| 성능 | 연결되지 않은 레이어는 평가하지 않으므로 비용 없음 |
Epic의 Lyra Starter Game은 Linked Anim Layer의 대표적 활용 사례입니다. 메인 ABP_Mannequin에서 무기별 AnimBP(ABP_RifleAnimLayers, ABP_PistolAnimLayers 등)를 LinkAnimClassLayers로 교체합니다. 무기 장착/해제 시 레이어만 교체하면 되므로, 새 무기 추가가 매우 용이합니다.
Layer Blend 패턴
Layered Blend Per Bone으로 레이어를 결합하는 실전 패턴
여러 레이어의 결과를 합치는 데는 Layered Blend Per Bone이 핵심입니다. 본 기준으로 레이어를 분리하여 상체와 하체를 독립적으로 애니메이션할 수 있습니다.
Full Body Override
전체 레이어가 베이스 포즈를 완전히 덮어씁니다. 특수 동작(사다리 타기, 수영)에서 사용합니다.
Upper Body Additive
spine_01 이상에 Additive 레이어를 적용합니다. 이동 중 재장전, 아이템 사용 등에 적합합니다.
Mesh Space Rotation
Mesh Space에서 회전만 블렌딩합니다. Aim Offset이나 Look At에서 자연스러운 상체 회전을 적용합니다.
Blend Mask
UE5.1+에서 Blend Mask 애셋으로 본별 블렌딩 웨이트를 미리 정의하여 재사용할 수 있습니다.
// Overlay 시스템 구현 패턴
BaseLayer = LinkedAnimLayer("FullBodyLayer")
// 무기별 전신 로코모션
UpperBodyOverlay = LinkedAnimLayer("UpperBodyLayer")
// 무기별 상체 에이밍/리코일
AdditiveLayer = LinkedAnimLayer("AdditiveLayer")
// 피격 반응, 호흡 등 Additive 동작
// 레이어 결합
Step1 = LayeredBlendPerBone(
Base: BaseLayer,
Layer: UpperBodyOverlay,
BranchFilter: spine_01,
BlendMode: LocalSpaceBlend
)
Step2 = ApplyAdditive(
Base: Step1,
Additive: AdditiveLayer
)
Output = Slot("DefaultSlot", Step2)
실전: 무기 교체 애니메이션 시스템
Linked Anim Layer + Overlay를 결합한 완전한 무기 시스템
LinkAnimClassLayers는 AnimBP 인스턴스를 생성하므로 약간의 히칭이 발생할 수 있습니다. 자주 사용되는 무기의 AnimBP는 PreloadLinkedAnimBP로 미리 로드하거나, 캐릭터 초기화 시점에 한 번 Link한 후 해제하지 않고 레이어 웨이트로 제어하는 방법도 있습니다.
핵심 요약
- Animation Layer Interface는 AnimGraph 로직을 교체 가능한 모듈로 분리하는 인터페이스이다.
- LinkAnimClassLayers로 런타임에 AnimBP 구현을 교체하여, 무기별/상황별 애니메이션을 즉시 전환한다.
- Layered Blend Per Bone으로 상체/하체를 독립 블렌딩하여 Overlay 시스템을 구현한다.
- Lyra 프로젝트는 Linked Anim Layer의 실전 레퍼런스로, 무기별 AnimBP 교체 패턴을 잘 보여준다.
- LinkAnimClassLayers의 인스턴스 생성 비용을 고려하여, 프리로드나 웨이트 제어 방식을 병행한다.
도전 과제
배운 내용을 직접 실습해보세요
Animation Layer Interface를 생성하고, FullBodyLayer, UpperBodyLayer 두 개의 Layer 함수를 정의하세요. 메인 AnimBP의 AnimGraph에 Linked Anim Layer 노드를 배치하고, 인터페이스를 통해 포즈를 받아 출력하세요.
Rifle_AnimBP와 Pistol_AnimBP 두 개의 Linked Animation Blueprint를 생성하고, 각각 다른 상체 애니메이션을 구현하세요. 런타임에 Link Anim Class Layers로 무기 교체 시 AnimBP를 동적으로 전환하세요.
Locomotion Layer + Combat Layer + Overlay Layer 3중 레이어 구조의 모듈러 애니메이션 시스템을 설계하세요. 각 레이어가 독립적으로 교체 가능하며, Layer Blend으로 결합되는 프로덕션 레벨 아키텍처를 구현하세요.