Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

행복한 개구리

Unreal Engine 5로 첫 게임 만들기 16 (Animation, Analysis, Locomotion, Transition Rule, Blend Space, Animation Blueprint) 본문

Unreal Engine 5/Tutorial Project: FirstGame

Unreal Engine 5로 첫 게임 만들기 16 (Animation, Analysis, Locomotion, Transition Rule, Blend Space, Animation Blueprint)

HappyFrog 2022. 6. 27. 20:03

 

Unreal Engine 5로 첫 게임 만들기 15 (Character Movement, Character Rotation, Spring Arm, 3rd perspective)

Unreal Engine 5로 첫 게임 만들기 14 (Character Setup, Skeletal Mesh, Skeleton, Emissive Color, Blend Overlay, Flipbook, A Unreal Engine 5로 첫 게임 만들기 13 (Input, Movement, Branch, If) Unreal En..

bodong2.tistory.com

이전 게시글에서 이어집니다.


 

 

 

Animation


이제 애니메이션을 넣어봅시다.

 

우선 새 폴더를 만들고 Animations로 명명합니다.

 

세 개의 FBX파일에서 애니메이션을 가져오겠습니다.

 

A_Bot_Idle, A_Bot_Run, A_Bot_Walk을 가져오겠습니다.

* 영상에서는 Bot이 AntBot이라고 표기되어 있습니다.

 

Mesh는 이미 있으니 Import하지 않습니다.

 

Skeleton만 설정해주세요.

 

애니메이션 시퀀스가 세 개 생겼습니다.

 

이것을 열어 편집기를 살펴봅시다.

애니메이션 편집기는 이렇게 생겼습니다.

 

좌측에선 해당 애니메이션의 세부사항을 조정할 수 있으며 우하단엔 해당 스켈레톤에 있는 애니메이션 목록이 보입니다.

 

이 세가지 애니메이션을 게임 로직에 연결해봅시다.

 

그러기 위해서 Animation Blueprint를 추가해야합니다.

 

Animation Blueprint는 스켈레톤을 기반으로 하기 때문에 Bot으로 설정해줍니다.

 

이름은 ABP_Bot으로 해주세요.

 

ABP를 열어보면 좌측에 머티리얼 편집기와 비슷하게 프리뷰가 보이고 그 아래엔 일반 Blueprint의 그래프 함수와 변수가 있습니다.

 

하지만 가장 중요한 것은 중앙에 있는 이 애니메이션 그래프입니다.\

 

이 곳에서 애니메이션을 재생하고 블렌드합니다.

 

그리고 잠시 뒤에 사용할 로직에 대한 이벤트 커브가 있습니다.

 

간단하게 시작해봅시다.

 

A_Bot_Idle을 드래그하여 Output Pose의 출력 핀과 연결합니다.

 

Compile을 누르면 프리뷰에서 결과를 볼 수 있습니다.

 

이것을 BP_Bot에 추가하겠습니다.

 

BP_Bot > Skeletal Mesh > Animation > Anim Class 를 방금 만든 ABP_Bot으로 설정합니다.

* 만약 할당을 했는데도 BP_Bot에서 T-Pose로 있다면 ABP_Bot 을 Compile해보세요.

 

이제 저장하고 씬으로 가 확인해봅시다.

 

이제 Bot은 Idle 상태로 돌아다니게 됐습니다.

 

하지만 우리는 캐릭터의 상태에 따라 다른 애니메이션을 재생해야 합니다.

 

따라서 가만히 있을 때와 움직일 때 각각의 애니메이션이 필요합니다.

 

ABP_Bot으로 넘어가 Add New State Machine을 만들고 Locomotion으로 명명해주세요.

 

그러면 포즈모양의 채널이 나오고 이것을 Output Pose에 연결할 수 있습니다.

 

이제 State Machine으로 들어가봅시다.

 

시작 위치에 Entry가 있고 여기에 state를 추가할 수 있습니다.

 

Entry에서 State를 추가하여 Idle로 명명합니다.

 

Idle에서 State를 또 추가하여 이것은 Walk/Run으로 명명합니다.

 

이건 가장 단순한 형태의 State Machine입니다.

 

처음에 Idle로 시작해서 이후에 Walk로 전환되는 식입니다.

 

그리고 가운데 화살표는 Transition입니다.

 

Idle에서 Walk뿐만 아니라 Walk에서도 Idle상태로 가야할 수 있어야 하므로 Transition을 하나 드래그하여 만들어줍니다.

 

이제 Idle 상태 내부로 들어가봅시다.

 

Idle 애니메이션을 꺼내와 Output Animation Pose에 연결하여 대기 상태일 때 애니메이션을 재생하게 합니다.

 

이번엔 Walk/Run 상태 내부로 들어갑시다.

 

이번엔 Walk 애니메이션만 넣겠습니다.

 

이제 캐릭터가 Walk 상태이면 Walk 애니메이션을 재생할 것입니다.

 

다음으론 캐릭터가 Idle에서 Walk로 상태가 전환되는 시점을 정해야 합니다.

 

이 때 Transition Rule을 사용합니다.

 

이것은 특정 상태에 진입 가능한 지를 결정합니다.

 

이것을 결정하려면 데이터가 필요한데 이것은 이벤트 그래프에서 가져오겠습니다.

 

여기 있는 Event Blueprint Update Animation은 Blueprint의 Tick과 같습니다.

 

함께 있는 Try Get Pawn Owner노드는 해당 폰을 제공합니다.

 

현재 폰이 있는지 확인하기 위한 Is Valid노드를 만들고 Update노드를 Exec에 연결해줍니다.

 

그리고 특정 시점에서의 속력을 얻어올 수 있는 GetVelocity노드를 만들어 Pawn노드와 연결합니다.

 

그리고 이것의 지면속력을 float형식으로 받아올 수 있는 Vector Length XY노드를 가져와 Velocity와 연결합니다.

* 점프와는 상관없으므로 Z는 필요없습니다.

 

지면 속력을 받아와 이것을 이용할 것이므로 Promote a variable 노드를 만들어줍니다.

 

변수에 저장하는 값은 Ground Speed로 명명했습니다.

 

이것은 IsValid노드의 IsValid와 연결해줍니다.

 

그리고 이것을 확인하기 위해서 Print String을 사용할 수 있습니다.

 

Print String 노드를 만들고 이것의 출력값을 float형식의 속력으로 설정해주었습니다.

 

이제 플레이하여 확인해봅시다.

 

로그에 방금 설정한대로 속력이 잘 표현되는 것을 확인했습니다.

 

그리고 앞서 설정한대로 최고속력은 400입니다.

 

다시 ABP로 돌아와 로직 확인용이었던 Print String은 삭제해줍니다

 

Transition Rule로 돌아와 이 값을 사용할 수 있습니다.

 

Transition Rule(Idle -> Walk)에서 GroundSpeed를 드래그하여 편집기에 올려줍니다.

 

데이터를 받아와야 하므로 Get으로 해주세요.

 

그리고 속력이 0보다 클 땐 걷는 것이므로 >를 검색하여 Greater를 검색합니다.

 

이것을 Ground Speed 변수와 연결하여 Ground Speed가 0보다 큰 지 확인합니다.

 

이것을 Result와 연결해줍니다.

 

그리고 씬으로 돌아가 확인해봅시다.

 

Idle로 시작하여 움직이면 Walk애니메이션으로 진입하는 것까진 좋았습니다.

 

하지만 멈춰도 Walk모션이 그대로 재생됩니다.

 

이것은 Idle > Walk로 가는 Transition Rule은 설정했지만 Walk > Idle로 돌아가는 Transition Rule은 설정하지 않았기 때문에 Walk에 갇혀버린 것입니다.

 

이를 수정하기위해 Walk > Idle Transition Rule을 열어서 설정해줍시다.

 

이번엔 '멈춘' 애니메이션을 재생해야 하는 조건이므로 속력이 x보다 작거나 같아야합니다.

 

따라서 <= 또는 Less than을 검색하여 설정해줍니다.

 

기준 속력은 5.0으로 했습니다.

 

저장하고 돌아가 확인해봅시다.

 

움직일 땐 걷는 모션, 멈추면 대기 모션이 나옵니다.

 

훌륭합니다.

 

이제 여기서 더 확장해봅시다.

 

Walk/Run 스테이트로 들어갑니다.

 

속력 400에 걷기는 어울리지 않습니다.

 

이것은 Blend Space를 사용하면 개선할 수 있습니다.

 

Animation > Blend Space 1D를 사용할 것입니다.

 

ABP와 마찬가지로 스켈레톤을 정해주고 BS_WalkRun으로 명명해주세요.

 

^^

열어보면 캐릭터 아래쪽에 축이 보입니다.

 

좌측 Details에서 축 이름을 Speed로 바꾸겠습니다.

 

그리고 축의 최대값을 400으로 설정하여 캐릭터 최고속력과 일치시켜주세요.

 

이러면 애니메이션을 섞을 준비가 되었습니다.

 

입력되는 속력에 따라 애니메이션을 다르게 재생할 것입니다.

 

하지만 계속해서 살짝 캐릭터의 발이 미끄러지는 것처럼 보입니다.

 

UE5에는 이것을 위한 아주 좋은 기능이 있습니다.

 

Locomotion을 가로 축 함수로 선택합니다.

 

분석하려면 발 bone을 인식해야 합니다.

 

양 발을 하나씩 할당해줍니다.

 

이렇게 하면 캐릭터가 발을 딛는 자리를 인식합니다.

 

이제 분석 버튼을 누르면 캐릭터의 애니메이션이 축의 알맞은 지점에 정렬됩니다.

 

위 : 분석 전 // 아래 : 분석 후

눈에 띄는 변화가 없는 이유는 초기 포인트가 괜찮았기 때문입니다.

 

이제 ABP로 돌아가 Blend Space를 드래그해 올려줍시다.

 

Blend Space의 애니메이션은 속력에 따라 다른 애니메이션을 재생하기 때문에 Ground Speed를 변수로 주고 이것을 재생하도록 연결해줍니다.

 

재생하여 확인해봅시다.

 

느릴 때는 걷고, 속력이 높아지면 뛰는 애니메이션이 정상적으로 작동합니다.

 

또한 대기모션으로 정상적으로 돌아와집니다.