어떤 캐릭터를 제대로 만들려면 메시(형태)뿐만 아니라 애니메이션(움직임)도 있어야 한다.
언리얼 엔진에서는 이를 Animation Blueprint를 통해 쉽게 구현할 수 있다. 그럼 Animation Blueprint를 어떻게 만들면 좋을지 알아보자.
1. 재료 구하기.
우선 캐릭터를 만들려면 재료가 필요하다. 마음에 드는 메시, 스켈레톤, 애니메이션 파일들을 구해보자. 나는 언젠가 이달의 무료 에셋으로 다운받았던 Fox 에셋을 사용할 것이다.


에픽 게임즈에서 받은 에셋들은 보통 프로젝트에 추가 버튼을 누르고 진행하면 자동적으로 필요한 모든 재료가 언리얼 엔진에서 사용가능한 형태로 임포트 된다.
그러나 다른 외부에서 받은 FBX파일들은 따로 임포트 해주어야 한다. 임포트 하는 방법은 파일을 언리얼 엔진의 컨텐츠 브라우저로 끌어다 놓으면 된다. 또는 컨텐츠 브라우저의 임포트 버튼을 눌러서 FBX파일을 선택해주면 된다.
우선적으로 임포트 해야할 파일은 스켈레탈 메시 파일이다. 스켈레탈 메시란 대충 캐릭터의 뼈와 살에 대한 정보를 합친 것이라고 생각하면 된다. 스켈레탈 메시 파일을 임포트하면 자동적으로 스켈레탈 메시 에셋과 스켈레톤 에셋이 생기고, 그 외 피직스 에셋, 텍스쳐 등이 생긴다. 여기서 우리가 당장 필요한건 스켈레탈 메시 에셋과 스켈레톤 에셋이다.
그 후에는 애니메이션 FBX 파일을 임포트 하면 되는데, 이 때는 스켈레톤 에셋이 필요하다.
2. 애니메이션 블루프린트 만들기
애니메이션 블루프린트를 만드는 방법은 간단하다. 컨텐츠 브라우저에서 우클릭 > 애니메이션 > 애니메이션 블루프린트를 선택하고, 아까 만들어둔 스켈레톤을 선택해주면 된다.


3. 애니메이션 적용해보기
만들어진 애니메이션 블루프린트를 열어보면 대강 이런 화면이 나온다. 이는 에니메이션 블루프린트 에디터로, 에니메이션 블루프린트를 조작할 수 있다.

여기서 우측 하단의 에셋 브라우저에서 아무런 애니메이션을 골라 가운데 AnimGraph의 공간에 놓고, 출력 포즈의 Result에 연결하면 왼쪽의 여우가 애니메이션대로 움직이는 것을 확인할 수 있다.

그러나 이것은 단순히 하나의 애니메이션만을 실행할 뿐, 우리가 원하는대로 걷거나 뛰거나 가만히 서서 숨쉬거나 하지 않는다. 이는 스테이트 머신이라는 것을 사용해서 구현할 수 있다.
4. 스테이트 머신
스테이트 머신이란 캐릭터의 상태에 따른 애니메이션을 출력할 수 있게 해주는 장치다. 예를 들면 가만히 있는 상태에서는 Idle 애니메이션을, 달리는 상태에서는 Run 애니메이션을 출력할 수 있게 하는 것이다.
우선 AnimGraph에서 우클릭 > State Machine을 검색해 스테이트 머신을 만들고, Result에 연결해주자.

그 뒤 스테이트 머신을 더블클릭 하면 이런 화면이 나온다.

여기서 Entry 노드에서 끌어와 다음과 같이 스테이트 추가를 해주자.

이름에서 알 수 있듯 Idle 스테이트는 대기상태, Run/Walk 스테이트는 달리기 혹은 걷기 상태이다. 위 그래프의 의미는 Idle 상태와 Run/Walk 상태를 오가며 애니메이션을 출력하겠다는 것이다.
여기서 Run 스테이트와 Walk 스테이트로 따로 만들지 않은 이유는 Walk 상태와 Run 상태는 블렌드 스페이스 기능을 통해 적절히 부드럽게 섞이도록 만들 것이기 때문이다.
이제 Idle 노드를 더블클릭해보면, 애니메이션 포즈 출력이라는 노드가 있다. 여기에도 Result에 애니메이션을 연결할 수 있다. 에셋 브라우저에서 Idle 애니메이션을 끌어다 놓고 Result에 연결해보자.

이렇게 하면 캐릭터가 Idle 상태가 되었을 때 ANIM_FoxIdleBreathe 라는 애니메이션을 출력할 것이다.
5. 블렌드 스페이스
이제 Run/Walk 상태에 애니메이션을 출력하게 해보자. 우리가 원하는 동작은 캐릭터의 이동 속도에 따라 걷기와 뛰기 애니메이션이 적절히 섞여서 출력되는 것이다. 이동속도가 빠를수록 뛰기에 가깝고, 느릴수록 걷기에 가까운 애니메이션이 출력되어야 한다.
그러기 위해서는 블렌드 스페이스라는 것을 사용해야한다.
먼저 컨텐츠 브라우저에서 우클릭 > 애니메이션 > 블렌드 스페이스 를 선택하여 블렌드 스페이스를 만들어주자. 이번에도 역시 알맞은 스켈레톤을 선택해주어야 한다.

만들면 대강 이런 화면이 나온다.

중앙 아래에 있는 격자 무늬 공간이 중요하다. 보면 가로축과 세로축이 None으로 되어있는데, 여기에 우리가 원하는 이름를 설정하고, 해당 변수의 값에 따라 다른 애니메이션을 출력하도록 할 수 있다.
그럼 각 축에 이름을 지어주고 최대, 최소값을 정해보자. 왼쪽 패널의 Axis Settings에서 가로축, 세로축을 적절히 설정해주면 된다. 나의 경우에는 가로축은 캐릭터가 바라보는 방향(-180도 ~ 180도), 세로축은 캐릭터의 이동 속도(0~ 600)로 설정했다.

축을 설정했으면 중앙 아래에 있는 격자에 오른쪽 아래의 에셋 브라우저에서 애니메이션을 끌어다 놓아보자. 그러면 격자 평면 위에 하얀 점이 생길 것이다. 중앙 (0, 300)에는 Walk 애니메이션, 중앙 위(0,600)에는 Run 애니메이션, 중앙 아래(0,0)에는 Idle 애니메이션을 놓았다.

이렇게 하면 속도가 0일떄는 Idle 애니메이션이, 300일 때는 Walk 애니메이션이, 600일 때는 Run애니메이션이 출력되고, 그 사이 값에는 적절히 섞인 애니메이션이 출력된다.
Ctrl을 누르고 격자 평면을 클릭하면 위의 그림에 보이는 것 처럼 초록색 X 표시가 생기고, 바로 위의 프리뷰에서 해당 좌표에서 출력될 애니메이션을 볼 수 있다.
나는 오른쪽으로 돌기, 왼쪽으로 돌기 등의 애니메이션도 추가해 아래와 같이 구성해 보았다.

이렇게 블렌드 스페이스를 만들었으면 다시 애니메이션 블루프린트 에디터의 Walk/Run 스테이트로 이동하자. 그리고 에셋 브라우저에서 블렌드 스페이스를 찾아 그래프에 끌어다 놓고, Result에 연결해두자.

이제 블렌드 스페이스의 Direction과 Speed 값에 따라 다른 애니메이션이 출력될 것이다. 그러나 Direction과 Speed에 적절한 값을 전달해 주는 작업을 아직 하지 않았다. 실제 캐릭터의 이동속도와 방향을 계산하여 전달해줄 필요가 있다.
6. 변수 연결(이벤트 그래프)
위에서 만든 블렌드 스페이스에 Direction과 Speed 값을 받아주는 창구는 마련돼있지만, 아직 애니메이션 블루프린트에서 변수로 사용할 수는 없는 상태이다. 블렌드 스페이스의 Direction과 Speed를 우클릭 > 변수로 승격 메뉴를 통해 애니메이션 블루프린트 변수로 만들자.

그러면 왼쪽 아래 내 블루프린트의 변수 섹션에 새로운 Direction, Speed 변수가 추가된 것을 볼 수 있다.

이제 이 변수에 이벤트그래프를 통해 적절한 값을 계산해서 전달해주어야 한다.
아래 이벤트 그래프는 해당 작업을 하고있다. 언리얼 기본 캐릭터(ThirdPersonCharacter)의 애니메이션 블루프린트 이벤트 그래프를 다소 참고하여 만들었다.

해설을 덧붙이자면,
위의 'Blueprint Initialize Animation 이벤트' 노드로부터 시작되는 부분은
이 캐릭터의 Character 클래스와 MovementComponent 클래스를 얻어와서 Character, Movement Component 블루프린트 변수에 초기화하는 작업을 하고 있다.
또한 아래의 'Blueprint Update Animation 이벤트' 노드로부터 시작되는 부분은
Update마다(매 프레임마다) Movement Component와 Character로 부터 캐릭터의 속도와 방향을 얻어오고, 적절한 연산을 거친 뒤 Speed와 Direction 변수를 set 하고있다.
(참고로 MovementComponent, Character 참조 변수는 따로 만들어 주었음)

7. 끝
이제 블루프린트를 만들고 애님 클래스와 스켈레탈 메시 에셋을 방금까지 만든 애니메이션 블루프린트, 스켈레탈 메시로 설정해주고 조작하면 된다.

'Unreal' 카테고리의 다른 글
Unreal Framework - Init (0) | 2023.12.07 |
---|---|
Unreal Framework - PreInit (0) | 2023.12.05 |
Unreal Framework (0) | 2023.12.05 |