애니메이션 블루프린트를 사용하면 State Machine을 활용하여 상태에 따른 애니메이션을 실행할 수 있고 각 상태 간의 전환 규칙도 간편하게 작성 및 관리할 수가 있다. Play Animation 노드를 사용할 때 보다 자연스러운 애니메이션이 가능하고 로직으로부터 애니메이션 관리기능을 분리할 수 있는 장점을 갖는다
애니메이션 블루프린트를 생성하고 사용하는 절차는 다음과 같다
Animation Blueprint 생성
Animation Blueprint를 생성하고 State Machine을 사용하여 상태에 따른 애니메이션을 지정하고 상태간의 전환규칙(Transition Rules)을 정의한다
캐릭터 클래스 생성 ( Character를 상속한 클래스 블루프린트 생성 )
Character 클래스를 상속하여 클래스 블루프린트를 생성하고 컴포넌트 패널의 Mesh 컴포넌트로 애니메이션이 속한 스켈레탈 메시(Skeletal Mesh)를 선택한다
캐릭터 클래스에 애니메이션 블루프린트 적용
캐릭터 클래스의 Mesh 컴포넌트를 선택하고 우측 [디테일] 뷰 / Animation / Animation Mode : Use Animation Blueprint 선택
캐릭터 클래스를 CB에서 뷰포트로 드래그하고 실행
1. Animation Blueprint 생성
CB에서 마우스 우측 > 애니메이션 > 애니메이션 블루프린트 > 설정창이 뜬다
부모 클래스 : AnimInstance
타겟 스켈레톤 : 애니메이션이 속한 스켈레톤을 선택
애님그래프 탭을 누르고 그래프 바탕에서 마우스 우측을 눌러 [스테이트머신 추가]를 선택하여 스테이트 머신을 생성하고 디폴트로 생성된 [Result] 노드와 연결해준다
생성된 스테이트 머신을 더블클릭하고 [Entry] 노드에서 드래그하여 놓고 새로운 상태를 생성하고 각 상태를 더블클릭하여 실행할 애니메이션을 우측 [Browse Assets] 패널에서 드래그하여 지정한다. 혹은 애니메이션을 드래그하여 상태 노드위에 놓으면 자동으로 애니메이션이 연결된다
애니메이션 노드를 선택하고 우측 [디테일]뷰에서 Loop Animation 항목에 체크 여부를 고려한다
상태 간의 전환규칙(Transition Rules)을 정의한다
상태 간의 전환규칙은 캐릭터의 상태에 따르는 경우가 대부분이므로 캐릭터의 참조를 구하고 캐릭터 클래스의 상태관련 변수의 값을 참조하여 애니메이션 상태 전환의 기준으로 사용하면 된다
이벤트 그래프 탭을 누르고 캐릭터의 참조를 구하고 캐릭터 클래스의 상태 변수 값을 애니메이션 블루프린트 클래스의 변수 값에 할당한다. 이 값은 각 상태의 전환규칙을 정의할 때 사용될 수 있다
주의 : Animation Blueprint 에서는 Get AI Controller 노드가 제대로 작동하지 않으므로 콘트롤러를 구하려면 Try Get Pawn Owner -> Get Controller 방법을 사용해야 한다
아래의 예에서는 Try Get Pawn Owner 노드를 사용하여 애니메이션이 적용되는 Pawn 의 참조를 구하고 있다
2. 캐릭터 클래스 생성
애니메이션이 속한 스켈레톤을 메시 컴포넌트로 포함하는 클래스 블루프린트를 생성한다. 이 때 부모 클래스를 Character으로 지정한다
스켈레톤에 소켓을 추가하면 스켈레탈 메시를 포함하는 클래스 블루프린트에서 소켓에 무기 등을 연결해 줄 수 있다.
[디테일] 뷰 / Mesh / Skeletal Mesh : 애니메이션이 속한 스켈레탈 메시 지정
[디테일] 뷰 / Animation / Animation Mode : Use Animation Blueprint 선택
Anim Class : 위에서 작성된 애니메이션 블루프린트 이름을 선택
혹은 캐릭터 클래스를 새로 생성하지 않고 ThirdPersonCharacter 캐릭터를 복제하여 [디테일]뷰/Animation/Animation Mode : Use Animation Blueprint, 와 Anim Class : 애니메이션 블루프린트 이름을 선택하면 된다
커스텀 캐릭터가 사용되기 위해서는 언리얼 레벨 에디터의 [디테일]뷰/GameMode/Default Pawn Class에 등록해야 한다
이렇게 설정하면 현재 캐릭터 클래스에서는 지정한 애니메이션 블루프린트가 사용된다
캐릭터 클래스의 [이벤트 그래프]에는 다음과 같이 애니메이션 블루프린트와 통신하기 위한 상태변수(CurrState)가 선언되어 캐릭터의 상태를 애니메이션 블루프린트에 전달하는 역할을 하게 된다. 여기서는 캐릭터의 CurrState 변수의 값을 애니메이션 블루프린트의 [이벤트 그래프] 탭에 작성된 내용에서 참조하고 있다 그러므로 캐릭터 클래스에서는 애니메이션을 직접 호출하거나 실행하는 것이 아니라 상태변수의 값만 변경해주면 현재 캐릭터에 등록된 애니메이션 블루프린트에서 자동으로 상태 값을 확인하여 상태에 연결된 애니메이션이 실행되는 구조이다
AI 캐릭터가 총에 맞았을 때 쓰러지는 애니메이션을 실행하는 경우
AI 캐릭터가 총소리를 들었을 때 그 방향으로 돌아서는 경우
위에서 사용된 TimeLine 노드의 그래프
3. 캐릭터 클래스를 CB로부터 뷰포트에 드래그하 놓고 게임을 실행하여 상태전한에 따른 각 애니메이션이 적절히 실행되는지 확인한다