Unreal5 점프 애니메이션

Unreal5 점프 애니메이션.

C++ 변수 설정.

C++에 isFalling변수를 선언하고 이 변수를 Animation Blueprint에서 가져다 쓸 생각입니다.

따라서, SlayerAnimInstance헤더파일에 다음과 같이 변수를 선언했습니다.

UPROPERTY(BlueprintReadOnly, Category = Movement)
bool isFalling;

SlayerAnimInstance.cpp에서 값을 설정해야 하는데, 이전에 GroundSpeed를 작성하면서 써놓은게 있어서 한줄만 추가하면 됩니다. 다음과 같은 상태가 됩니다.

void USlayerAnimInstance::NativeUpdateAnimation(float DeltaTime)
{
	Super::NativeUpdateAnimation(DeltaTime);
	if (SlayerCharacterMovement) {
		//#include "Kismet/KismetMathLibrary.h"
		GroundSpeed = UKismetMathLibrary::VSizeXY(SlayerCharacterMovement->Velocity);
		isFalling = SlayerCharacterMovement->IsFalling();//추가됨
	}
}

Animation Blueprint Setting.

Animation Blueprint는 현재 Idle과 Run으로 상태를 바꾸는 GroundLocomotion만 연결되어 있는 상황입니다.

new Save cached poses를 하나 만들어줍니다.

이름을 GroundLocomotion으로 설정하고 GroundLocomotion State Machine을 연결해줍니다.

그리고 State Machine하나를 더 생성하고 OupPose로 연결합니다.

방금 만든 MainState Machine으로 들어갑니다.

OnGround->InAir->Land->OnGround로 작동하게 이어줬습니다.

OnGround는 아까 Save Cach Pose에 연결한 GroundLocomotion을 넣어줬습니다.

InAir에는 jump애니메이션 적당한거 하나 찾아서 대충 넣으려고 했는데 JumpStart부터 뭐 여러가지 있길래 그냥 좀 더 추가해줬습니다.

앞선 애니메이션이 끝나면 자연스럽게 시작되도록 Automatic Rule Based on Sequence Player in State를 체크해줬습니다.

Land에는 착지하는 애니메이션이 있길래 추가해줬습니다.

애니메이션 추가는 끝났고, 이제 Transtion rule 설정을 해보겠습니다.

먼저 OnGround to InAir는 isfall을 넣어줍니다. 즉, 캐릭터가 공중에 있을 때 실행됩니다.

InAir to Land는 isfalling이 Not이 되면 실행하도록 rule을 설정합니다.

즉, 땅에 닿았을 때 입니다.

Land to OnGround는 Transtion rule을 두개 설정했습니다.

착지 애니메이션을 다 보고 자연스럽게 넘어가는 경우와 착지 애니메이션을 다 보지 않았지만 움직이는 경우입니다.

착지 애니메이션을 다 보지 않았지만 움직이는 경우는 And를 사용해서 다음과 같이 설정합니다.

자연스럽게 넘어가는 경우는 Transtion Rule을 설정하지 않고 Details 창에서 "Automatic Rule Based on Sequence Player in State" 옵션을 켜주었습니다.

결과.

점프 애니메이션 잘 나오고, Recovery애니메이션 도중에 움직이면 다시 OnGround로 돌아가고 잘 되네요.

 

Designed by JB FACTORY