애니메이션 블루프린트란?
캐릭터에 애니메이션 에셋을 설정하면 해당 애니메이션을 실행할 수 있다는 것을 알아보았습니다. 또한 애니메이션 시퀀서를 사용해서 실행해 보았습니다.
이것으로는 애니메이션을 모두 사용하기에는 어렵습니다. 한가지가 더 필요합니다. 애니메이션 블루프린트 입니다.
애니메이션 블루프린트는 캐릭터의 다양한 애니메이션 상태를 관리하고 전환하기 위한 특별한 블루프린트입니다. 이는 게임 내에서 캐릭터가 걷기, 달리기, 점프 등 여러 동작을 자연스럽게 전환할 수 있도록 로직을 구현하는 데 사용됩니다.
애니메이션 블루프린트의 주요 구성 요소는 다음과 같습니다:
•
스테이트 머신(State Machine): 여러 애니메이션 상태를 정의하고 상태 간 전환 조건을 설정합니다.
•
블렌드 스페이스(Blend Space): 여러 애니메이션을 부드럽게 혼합하여 자연스러운 전환을 만듭니다. 예를 들어, 걷기에서 달리기로 전환할 때 속도에 따라 애니메이션을 자연스럽게 블렌딩합니다.
•
애님 그래프(Anim Graph): 애니메이션 노드들을 시각적으로 연결하여 복잡한 애니메이션 로직을 구현합니다.
애니메이션 블루프린트는 캐릭터 블루프린트와 연결되어 캐릭터의 움직임과 상태 변화에 따라 적절한 애니메이션을 재생합니다. 이를 통해 게임 개발자는 복잡한 애니메이션 시스템을 직관적으로 구현할 수 있습니다.
애니메이션 블루프린트 만드는 방법
애니메이션 블루프린트를 만들고 설정하는 방법을 알아보겠습니다:
애니메이션 블루프린트 모드로 전환하기
•
편집기 모드 변경: 언리얼 에디터 상단의 모드 드롭다운 메뉴에서 '애니메이션'을 선택합니다.
•
애니메이션 모드: 이 모드에서는 애니메이션 관련 도구와 패널이 활성화됩니다.
2. 새 애니메이션 블루프린트 생성하기
•
콘텐츠 브라우저에서: 콘텐츠 브라우저에서 우클릭 → 새로 만들기 → 블루프린트 → 애니메이션 블루프린트를 선택합니다.
•
부모 클래스 선택: 일반적으로 'AnimInstance'를 선택합니다.
•
스켈레톤 연결: 생성 시 사용할 스켈레톤을 지정합니다. 이는 해당 스켈레톤을 사용하는 캐릭터에만 이 애니메이션 블루프린트가 적용되도록 합니다.
애니메이션 블루프린트
블루프린트는 언리얼 엔진에 탑재된 프로그래밍 시스템입니다. 여러분은 앞서 머터리얼을 마들 때와 노드를 연결해 표면을 만들 때 블루프린트를 사용해보았습니다. 그리고 나이아가라 모듈을 만들 때도 사용했습니다.
아직은 우리가 블루프린트 프로그래밍 시스템을 잘 모르기 때문에, 지금 애니메이션 블루프린트를 사용한 처리에 관해 잘 이해가 되지 않을 수도 있습니다. 따라서 여기서는 이런 기능들이 있고 준비되어 있으며 정해진 형식대로 만들어가면 애니메이션을 제어할 수 있다.는 정도만 알아도 충분합니다.
일전에도 말씀 드렸지만 프로그래밍을 잘하는 방법은 한번에 많은걸 전부 이해하려 할 필요가 없다는 것입니다.
블루프린트에 대한 자세한 내용은 다음 강의에서 설명합니다.
이벤트 그래프와 AnimGraph
블루프린트 에디터를 살펴보면, 블루프린트 프로그래밍을 하는 곳인 그래프 패널을 살펴봅니다.
그러면 2개의 그래프가 열려 있습니다. [이벤트 그래프]와 [AnimGraph]가 열려 있습니다.
•
이벤트 그래프(Event Graph): 여기서 애니메이션에 필요한 변수와 로직을 설정합니다.
다양한 조작이나 동작에 따라 발생하는 이벤트를 처리합니다. 기본으로 2개의 노드가 준비되어 있습니다. 이벤트 그래프의 경우 필요해질 때까지는 손대지 않는 게 좋습니다.
•
일반적으로 'Event Blueprint Update Animation' 이벤트에서 캐릭터의 속도, 방향, 상태 등을 업데이트합니다.
•
예: 캐릭터 블루프린트에서 'TryGetPawnOwner'를 사용해 캐릭터 레퍼런스를 가져오고, 이를 통해 속도 등의 정보를 계산합니다.
•
애님 그래프(Anim Graph): 애니메이션이 실제로 어떻게 재생될지 정의합니다. 구처젝언 애니메이션 처리를 작성하는 그래프입니다. 이 그래프에는 기본으로 최종 애니메이션 포즈라는 노드가 배치되어 있습니다. 머테리얼의 결과 노드와 비슷합니다. 결과 노드와 마찬가지로 다양한 처리 결과로 결정된 애니메이션을 이 노드에 연결해서 애니메이션 재생되게 합니다.
◦
'Final Animation Pose' 노드에 최종 애니메이션 결과를 연결합니다.
◦
스테이트 머신(State Machine) 노드를 추가하여 여러 애니메이션 상태를 관리할 수 있습니다.
최종 애니메이션 포즈에 애니메이션 설정하기
간단한 애니메이션을 만들어 보겠습니다. [AnimGraph] 탭으로 이동해서 애니메이션 포즈를 잘 보겠습니다.
이 노드에는 result라는 입력이 하나 준비 되어 있습니다. 이곳에 [애니메이션 포즈]를 연결하면 됩니다. 애니메이션 에셋으로 재생되는 애니메이션을 최종적으로 나타내는 값이라고 생각하면 됩니다.
자 이제 애니메이션 만들어보도록 하겠씁니다.
다음과 같은 All → 엔진 → 콘텐츠 → Tutorial → SubEditors → TutorialAssets → Character
폴더안에서 애니메이션 파일을 찾아봅니다.
[Tutorial_Walk_Fwd]를 블루프린트 쪽으로 드래그앤 드릅으로 옮겨주세요.
애니메이션 포즈
추가된 노드는 애니메이션(Animation Pose)라고 합니다. 출력이 하나뿐인 단순한 노드라고 생각하면 됩니다. 이 재생 노드에는 에니메이션을 에셋이 연결되어 있습니다.
노드를 최종 애니메이션 포즈에 연결합니다.
추가한 애니메이션 포즈 노드를 최종 애니메이션 포즈 Result로 드래그해서 연결합니다.
블루프린트를 컴파일합니다.
최종 [컴파일] 버튼을 클릭해 컴파일 하세요. 애니메이션 블루프린트는 이처럼 내용을 변경할 때마다 새롭게 컴파일 해주어야 합니다.
최종적으로 프리뷰에는 캐릭터가 총을 겨눈 자세로 전진하는 애니메이션 표시됩니다. 애니메이션 이끝난 후에는 캐릭터가 멈춰 서있습니다.
블루프린트로 스켈레탈 메쉬를 움직여보기
그럼 이제 우리가 만든 블루프린트로 실제 레벨안의 캐릭터를 움직여 보겠습니다.
애니메이션 모드를 [UseAnimation Blueprint]로 변경하고, [애님 클래스]를 [MyYPP_BP1]으로 지정합니다.
이제 애니메이션 블루프린트가 스켈레탈 메시에 설정되었습니다. 툴바에서 플레이 버튼을 눌러 재생해봅시다.
2개의 애니메이션 전환하기
지금까지 애니메이션 블루프린트를 사용해 애니메이션을 재생하는 기본적인 방법을 학습했습니다. 이번에는 2개의 애니메이션이상을 서로 연결하여 전환이 가능하게 해보도록 할 예정입니다.
새로운 애니메이션 Tutorial_Idle 을 데이터에서 찾아서 배치합니다.
블렌드 포즈 사용하기
상황에 따라 애니메이션 포즈를 전환하기 위해서는 블렌드 포즈(blend pose)라는 노드를 사용합니다. 이 노드는 값을 확인하고 값에 따라 사용할 애니메이션 포즈를 전환하는 역할을 합니다.
블렌드 노드를 추가해봅시다. AnimGraph에서 아무 노드도 없는 부분을 마우스 오른쪽 버튼으로 클릭합니다.
Blend poses by bool 에서 Blend Poses by bool을 선택하여 노드를 추가해줍니다.
bool로 값을 체크해서, 그 결과에 따라 재생할 애니메이션 포즈를 설정하는 노드입니다. bool 은 true/false 같은 두가지 상태를 나타내는데 사용 되는 자료형입니다.
아래는 언리얼 AnimGraph 노드: Blend Poses by Bool(Bool Pose 블렌딩) 기준으로 정리한 입력/출력 항목 표입니다.
Blend Poses by Bool — 입출력 표
구분 | 핀(항목) 이름 | 타입 | 의미/설명 |
입력 | Active Value | Bool | true/false 값. 이 값에 따라 어떤 포즈를 출력할지 결정 |
입력 | True Pose | Pose Link (포즈) | Active Value = true일 때 선택(블렌딩)될 애니메이션 포즈 입력 |
입력 | False Pose | Pose Link (포즈) | Active Value = false일 때 선택(블렌딩)될 애니메이션 포즈 입력 |
(설정값) | True Blend Time | Float(초) | False→True로 바뀔 때 블렌딩에 걸리는 시간(핀으로 노출되는 경우도 있고 디테일 패널 설정인 경우도 있음) |
(설정값) | False Blend Time | Float(초) | True→False로 바뀔 때 블렌딩에 걸리는 시간 |
출력 | Result | Pose Link (포즈) | True/False 포즈를 조건에 따라 선택/블렌딩한 최종 포즈 출력. 보통 Final Animation Pose의 Result에 연결 |
이제 다음과 같이 노드들을 연결 합니다.
여기서는 Blend Poses by bool 노드를 사용해서 두 애니메이션 중 하나를 선택합니다. Active Value가 참이면 걷기 애니메이션, 거짓이면 대기 애니메이션이 선택됩니다. 그리고 선택된 결과가 Output Pose로 전달되어 캐릭터의 최종 애니메이션으로 재생됩니다.
캐릭터가 움직여야 하는 상태이면 걷기 애니메이션을 재생하고, 그렇지 않으면 대기 애니메이션을 재생하도록 만든 애니메이션 전환 그래프입니다. 전환은 즉시 바뀌는 것이 아니라 1초 동안 부드럽게 블렌딩됩니다.
변수 추가하기
이제 기본 구조가 완성 되었습니다. 마지막으로 포즈 블렌딩 노드에 값을 설정하기 위한 변수를 추가해 봅시다. 에디터 프리뷰 밑에 MyBlueprint로 이동합니다.
변수를 추가해줍니다. bool 타입으로
그리고 해당 변수를 드래그앤 드롭으로 Anim Graph쪽으로 가져옵니다.
그리고 연결해주면 됩니다.
프리뷰로 확인 하기
기본 bool 변수 값은 false로 되어 있기 때문에 Idle 애니메이션 만 재생됩니다.
bool 변수 노드를 클릭한후 flag에 체크해주시면 true가 되어서 walk 애니메이션이 실행됩니다.
스테이트 머신 사용하기
지금 까지는 변수를 사용해서 조작하는 방법을 알아봈습니다. 이 방법은 변수로 간단하게 애니메이션을 전환할 수 있어 편리합니다. 하지만 캐릭터의 애니메이션이 많아지고 다양한 상황에 맞춰 애니메이션을 전환해야 하는 경우라면 모든 과정을 직접 관리해야 하므로 상당히 복잡해집니다.
언리얼 엔진에서는 상황에 따라 애니메이션을 전환해주는 스테이트 머신(state machine)을 많이 사용합니다. 스테이트 머신은 다양한 캐릭터의 상태를 스테이트로 준비하고, 시각적으로 연결해 전환을 만들어 갑니다.각 스테이트 전환에는 ‘특정 조건을 만족하면 전환한다.’같은 조건을 설정하여 제어 할 수 있습니다.
다양한 스테이트 전환을 만들어서 상황에 따라 필요한 애니메이션 상태가 되도록 해보겠습니다.
1. 스테이트 머신을 생성합니다.
블루프린트 AnimGraph 우클릭 한후 state machine 을 추가해줍니다.
2. 스테이트 머신을 설정합니다.
생성된 스테이트 머신을 선택하고 [디테일]패널에 자세한 설정이 표시됩니다. 이름을 적적할게 바꿔줍니다.
3. 스테이트 머신을 최종 애니메이션 포즈에 연결합니다.
생성된 스테이트 머신을 사용해서 애니메이션ㅇ을 표시하도록 노드 연결을 변경해봅니다.
MyState1을 최종 애니메이션 포즈에 연결합니다. 그럼 기존연결을 끊어지고 새로운 연결이 만들어 집니다.
이제부터는 MyState1의 결과를 바탕으로 애니메이션이 재생됩니다.





























