4. - 언리얼 엔진은 캐릭터가 다양한 상황에 적절한 애니메이션을 체계적으로 재생하도록 애니메이션 블루프린트를 제공.
- 애니메이션 블루프린트란, 스켈레탈 메시의 애니메이션을 제어하는 특수한 블루프린트입니다.
1. 애님 인스턴스
- 애니메이션 블루프린트의 기반을 이루는 클래스.
- 스켈레탈 메시를 소유하는 폰의 정보를 받아 Anim Graph가 참조할 데이터를 제공. (BP와 C++모두 제작 가능)
2. 애님 그래프
- 시각적 도구를 사용해 애니메이션 시스템을 제작
- Anim Instance의 변수 값에 따라 변화하는 애니메이션 시스템을 설계하는 공간
애니메이션 시스템
01
4
6. Anim Instance란?
- 애니메이션을 만들기 위해 사용되는 데이터들과 그에 대한 명령어 세트를 모아둔 오브젝트 인스턴스.
- Facade 디자인 패턴을 사용해서 만들어진 오브젝트로써, 현재 실행되고 있는 애니메이션과 애니메이션 몽타주들
을 관리하는 오브젝트입니다.
- TryGetPawnOwner() : AnimInstance를 사용중인 Pawn에게 접근할 수 있는 함수로 AnimInstance 클래스에 정
의되어 있습니다.
- 또한 역으로 Pawn에서 스켈레탈 메시 컴포넌트에서 GetAnimInstance() 함수를 사용해서 AnimInstance에 접근
할 수 있습니다.
Anim Instance
03
5
7. - 주의할 점은 AnimInstance를 가져올 때 생성자시점에서 가져오려고 하면 nullptr를 반환합니다.
- 그렇기 때문에 PostInitializeComponents() 함수 시점에서 호출하는 것이 가장 바람직합니다.
(4.19 이전 버전에서는 확인 필요.)
Anim Instance
03
6
9. - Anim Graph는 현재 프레임에 대한 스켈레탈 메시의 최종 포즈를 구하는데 사용됩니다.
- 각각의 애니메이션 블루프린트에는 Anim Graph가 있으며, 그 안에는 애니메이션 노드를
이용해 애니메이션 시퀀스 샘플링, 블렌딩, 스켈레탈 메쉬 컨트롤을 사용한 본 트랜스폼 작업
을 합니다.
- 이벤트 그래프나, 네이티브 코드와 같이 다른곳에서 계산된 값을 사용할 수 있으며, 그것
을 블렌드 스페이스나 다른 블렌드 노드의 입력으로 사용할 수 있습니다.
Anim Graph
02
7
10. - 기본적으로 멀티 스레드 애니메이션 업데이트 세팅을 사용하고 있습니다. 그렇기 때문에
Anim Graph에 Unsafe한 작업이 이루어지는 경우 컴파일 경고가 나옵니다.
Anim Graph
02
8
11. - Anim Graph는 스테이트 머신(유한 상태 기계, finite-state
machine, FSM) 기능을 제공합니다.
1. 스테이트 머신은 주로 여러가지 상태(State), 그 상태를 드나드
는 트랜지션(Transition), 그리고 그 상황을 정의하는 룰(Rule)의 망으
로 이루어 집니다.
2. 각 상태는 각각의 룰 세트와 함께 독립된 블루프린트 망으로 간주
됩니다.
State Machine
02
4
12. - 여기서 State는 캐릭터가 반복해서 재생해야 할 애니메이션 동작이
라고 할 수 있습니다.
- 하나의 State에서 다른 State로 이동하기 위해서는 조건이 필요한데,
이동하는 방향을 트랜지션이라고 하며, 단방향 화살표로 표현됩니다.
- 트랜지션이 실행되기 위한 조건은 룰이라고 표현합니다.
- 스테이트 머신에서는 Locomotion이라고 불리는 애니메이션들을 정
의하게 됩니다.
State Machine
02
4
13. - Locomotion이란? 생명체나 유기체가 어떠한 위치에서 다른 위치까지 움직이는 방법에 대한 정의를 얘기합니다.
- 기어가기, 미끄러져가기, 달려가기, 점프하기, 걸어가기, 굴러가기, 활공, 날아가기, 헤엄쳐가기, 밀며나아가기.
Locomotion
02
4
14. - 여기서 State는 스켈레탈 메시가 정기적으로 블렌딩하여 드나드는 애님 그래프의 조직화된 한 부분으로 생각하면
좋을 것 같습니다.
- State를 더블클릭하면 그래프가 열리는데, 그 안에서 최종 애니메이션 포즈를 결정할 수 있습니다.
- 이 안에서 블렌드 스페이스를 포함할 수도 있습니다.
State(상태)
02
4
15. - 스켈레탈 메시가 한 상태에서 다른 상태로 어떻게 전환되는지 제어할 수 있어야 하는데, 그 때 트랜지션 룰이 사용
됩니다.
- 트랜지션 룰은 상태를 연결하는 와이어를 따라 자동 생성됩니다.
- 트랜지션 룰은 최종 결과값을 TRUE/FALSE 형태로 반환시켜주면 전환 할 수 있는지 여부를 결정합니다.
Transition Rule
02
13
17. - 몽타주의 사전적 정의는 촬영된 화면이나 인쇄된 조일르 떼어 붙여서 새로운 장면이나 이미지를 만드
는 미술 기법을 의미합니다.
- 스테이트 머신의 확장 없이 특정 상황에서 원하는 애니메이션을 발동시키는 기능을 말합니다.
- 여러 애니메이션 시퀀스들을 하나의 애셋으로 합쳐 새로운 애니메이션을 생성하는 기법입니다.
- 합친 몽타주는 섹션(Section) 단위로 관리가 가능해서 그 일부 또는 조합 재생이 가능합니다.
- 몽타주 안에서는 이벤트를 발생시켜 사운드 큐나 파티클 이펙트 재생, 값 변경 등 게임 로직을 제어할
수 있습니다.
Animation Montage
04
14
18. 이럴 때 사용하면 좋아요!
- 애니메이션 블루프린트의 이벤트 그래프에서 애니메이션 재생 가능.
- 복잡한 애니메이션 시퀀스를 체인으로 묶어 하나의 애니메이션으로 간주
- 특정 애니메이션 일부분만 코드나 블루프린트 스크립트로 반복
- 코드나 블루프린트 스크립트에 따라 여러 애니메이션을 이벤트 기반 전환 처리
- 복잡한 애니메이션 시퀀스를 네임드 슬롯에 할당하여 코드나 블루프린트로 전환
- 코드나 블루프린트 스크립트에 따라 여러가님 애님 시퀀스를 전환
Animation Montage
04
15
19. Anim to Play로 재생
- 스켈레탈 메시 디테일 패널에서 Animation Mode를 Use
Animation Asset으로 설정합니다.
-하단의 Anim to Play에 원하는 애니메이션 몽타주를 설정합
니다.
- 설정이 끝나면 스켈레탈 메시가 선택된 애니메이션을 자동으
로 재생합니다.
Montage Play
04
4
20. Anim Instance를 이용한 Montage Play
- 캐릭터의 SkeletalMesh Component의 Animation 탭으로
가서 Animation Mode를 Use Animation Blueprint로 지정합니
다.
- Anim Class 항목에 사용할 Anim Instance를 지정해줍니다.
Montage Play
04
17
22. 1. 섹션 – 몽타주 내 생성되어 있는 섹션을 표시합니다.
2. 슬롯 – 현재 슬롯에 추가되어 있는 애니메이션을 표시합니다.
3. 그룹/슬롯 – 현재 선택된 애님 그룹 및 슬롯을 표시합니다.
Animation Montage
04
19
23. 1. 섹션 – 몽타주 내 생성되어 있는 섹션을 표시합니다.
- 슬릇을 애니메이션 여러 부분으로 나눌 수 있습니다.
- 각 섹션에는 슬롯의 타임라인 안에 이름과 위치가 있습니다.
- 이름을 사용해서 특정 섹션에 바로 점프하거나, 현재 섹션이 끝나면 다음에 재생하도록 대기열
에 등록할 수 있습니다.
Section
04
20
24. 2. 슬롯 – 현재 슬롯에 추가되어 있는 애니메이션을 표시합니다.
- 애니메이션 시퀀스를 담을 수 있는 트랙입니다.
- 슬롯을 여러 개 만들어둘 경우, 애니메이션 블루프린트의 애님 그래프에서 Slot 노드를 사용하
여 애니메이션 세트를 선택해서 결정할 수 있습니다.
- 다수의 슬롯을 사용할 때 최적의 결과를 얻기 위해서는, 애니메이션 끝에서 끝까지의 길이가 같
도록 맞춰 보시기 바랍니다.
Slot
04
21
25. 3. 그룹/슬롯 – 현재 선택된 애님 그룹 및 슬롯을 표시합니다.
- 그룹 당 하나의 몽타주만 재생 가능합니다.
- 동시에 다른 몽타주를 재생하려는 경우, 그에 맞는 새 그룹을 만들어주면 됩니다.
- 애님 그룹 및 슬롯은 애님 슬롯 매니저 탭 안에 모여 있어 아이콘을 클릭하고 드랍다운 메뉴로 유효한 슬롯 중에서
선택할 수 있습니다.
- 새 몽타주를 생성하면 바로 정상작동 가능하도록 슬롯 노드에 기본적으로 하나의 디플트 슬롯이 갖추어져 있습니
다.
SlotGroup
04
22
26. - 애니메이션 특정 지점에서 이벤트를 발생시킬 수 있는 기능입니다.
- 이를 통해 콤보 판정, 공격 판정, 사운드 큐, 이펙트 등의 효과를 애니메이션에 맞춰 구현 할 수
있습니다.
- Anim Instance를 C++로 사용하는 경우, 해당 클래스에 ‘AnimNotify_노티파이이름’으로 함수
를 선언해서 로직을 구성하면, 애니메이션이 노티파이 될 때 해당 함수가 호출됩니다.
-
Animation Notify
04
23
27. - 애님 몽타주는 자손 몽타주(Child Montage)를 생성할 수 있습니다.
- 자손 몽타주는 게임 플레이에 영향을 주지 않고, 다수의 에셋에 노티
파이 등 애님 몽타주의 디테일을 다시 만들 필요 없이, 애니메이션을 편
리하게 다변화 시킬 수 있는 기능입니다.
- 예를 들면 캐릭터의 공격 애니메이션을 다양하게 만들 수도 있고,
착용하고 있는 아이템에 따라 대기 애니메이션에 변화를 줄 수도 있습니
다.
- 자손 몽타주로 생성된 어셋의 이름에는 _Child가 붙습니다.
Child Montage
04
24
28. - 자손 몽타주에는 모든 속성들이 회색으로 변하게 되어 수정할 수 없는 상태가 됩니다.
- 자손 몽타주로는 또 자손 몽타주를 만들 수 없습니다.
Child Montage
04
4
29. - 슬롯 트랙에서 설정되있는 애니메이션을 다른 애니메이션으로 대체 하거나, 대체됬던 애니메이션을 다시 부모
애니메이션으로 되돌릴 수 있습니다.(부모 : 녹색, 변경 : 노란색)
- 길이가 다른 애니메이션으로도 대체 할 수 있으며, 엔진에서 대체 애니메이션이 원본과 같은 시간에 비례해서
맞는 부분을 사용하도록 재생 속도, 시작 시간, 끝 시간을 자동 조정해줍니다.
- 단, 섹션의 길이는 조절 할 수 없습니다.
Child Montage
04
26
30. 참고 자료
05
27
- 언리얼엔진 공식 문서
https://docs.unrealengine.com/ko/AnimatingObjects/SkeletalMeshAnimation/An
imMontage/index.html
- BBAGWANG님의 블로그
- 이득우의 언리얼 C++ 게임 개발의 정석