🎮Unreal4/C++

[UE4] Parkour System -3 : Falling, Landed

공대 컴린이 2023. 6. 26. 15:53
728x90

높은 위치에서 캐릭터가 떨어질 때 떨어지는 Jump 모션과, 바닥에 착지 시 구르기 낙법을 수행하는 파쿠르 기능을 구현해보았다.

✔️ 바닥 방향 충돌체 검사하기 : CheckTrace_Land

먼저, CheckTrace_Land 함수를 통해 캐릭터가 높은 곳에서 떨어지고 있는지를 검사한다.

CharacterMovement를 통해 Falling 인지를 1차적으로 검사한 뒤, 바닥을 향하는 Parkour Arrow Land를 이용한 LineTrace를 진행하였다.

 

CheckTrace_Land 함수Tick 함수에서 계속 호출된다.

높은 곳에서 떨어진다면 무조건적으로 실행하기 위해 별다른 조건은 두지 않았다.

🕺🏻 Fall Parkour 호출 : DoParkour

Player 클래스는 ACharacter를 상속받기 때문에 virtual Landed 함수를 오버라이드하여 사용할 수 있다.

Player가 Falling 상태였다가 땅에 착지됐을 때 Landed 함수가 호출되고, Parkour Component의 DoParkour 함수를 호출한다.

 

DoParkour 함수에선 Fall Parkour가 실행될 수 있는지를 확인한 뒤 DoParkour_Fall 함수를 호출한다.

✔️ Fall Parkour 가능한지 검사하기 : Check_FallMode

Check_FallMode 함수에서는 Tick에서 계속 검사하고있는 Land Arrow의 결과를 기반으로, Fall Parkour가 실행될 수 있는 높이에 있는가를 판별한다.

 

적절한 높이에서 떨어졌다면 DoParkour_Fall 함수가 호출되며 땅을 구르는 Fall Parkour 몽타주를 실행시킨다.

🕺🏻 AnimInstance - 떨어지는 모션

CAnimInstance.h
UCAnimInstance::NativeUpdateAnimation

AnimInstance 클래스에서 현재 떨어지고 있는지를 나타내는 bFalling 변수를 추가하여, Jump Loop 모션을 출력할 수 있게 하였다.

bFalling 변수값은 Update 함수에서 주기적으로 Owner의 Character Movement를 참조하여 구했다.

 

컴파일 후 AnimInstance 블루프린트에서 Falling Bool 변수를 불러와 포즈 블렌딩을 수행하였다.

 

UpperBody나 FullBody 포즈를 이용하기 전에 미리 Falling 포즈를 블렌딩해야 무기를 들고 뛰어내리거나 다양한 동작 중 뛰어내리는 캐릭터의 애니메이션이 자연스럽게 어울릴 수 있다.

 

728x90