구르기 모션 추가하기

sssukh·2024년 4월 17일

컨텐츠에 구르기 모션을 추가해보자.

구르는 애니메이션 가져오기

나의 경우에는 구르기 모션 애니메이션이 없어서 외부에서 가져왔다.
언리얼 마켓플레이스에서 Advanced Locomotion System을 다운받아 프로젝트를 실행한다.

이 애니메이션이 UE4 마네킹 기준으로 설정되있기 때문에 이를 바꿔줘야한다.
Third_Person 컨텐츠팩을 추가해주고

해당 애니메이션 시퀀스를 우클릭해서 해당 메뉴를 클릭해준다.

그러면 다음과 같은 창이 뜨는데 IK Retargeter를 위처럼 설정해주고 Retarget을 누르면 잘 변경이 된다.

그 후 Reimport를 통해서 원하는 프로젝트에 넣는다. 해당 프로젝트에서 열어보면 경고창이 뜨면서 스켈레톤을 재설정해달라고 하는데 yes를 눌러준다.

Retarget Source Asset을 원하는 스켈레톤으로 변경해주고 Preview Scene Setting의 Preview Mesh도 동일하게 설정해준다.

캐릭터에 구르는 모션 추가하기

InputAction을 생성하고 InputMappingContext에도 InputAction을 추가해준다.

<ABCharacterPlayer.h>
	// Roll Action Part
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Animation)
	TObjectPtr<class UAnimMontage> RollActionMontage;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, Meta = (AllowPrivateAccess = "true"))
	TObjectPtr<class UInputAction> RollAction;

	void Roll();
    float RollSpeed;

void AABCharacterPlayer::Roll()
{
	UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
	AnimInstance->Montage_Play(RollActionMontage, RollSpeed);
}

CharacterPlayer에 해당 몽타주를 받을 변수와 InputAction을 받을 변수를 추가해주고 InputAction과 Roll()을 바인드해준다.(전에 했던 내용이므로 코드 스킵)

그리고 Roll()에서 구르는 동작을 하는 몽타주를 재생시키도록 하면 된다.

그런데 다 구르고 나서 애니메이션이 종료되지 않고 어정쩡한 자세가 유지되는걸 볼 수 있다.

몽타주 내부 설정에 Enable Auto Blend Out을 체크해주면 해결된다.

또 다른 문제는 구르는 도중에 움직여지지 않는다는 것이다.

이것 저것 찾아본 결과, 체크되어있을 Root Motion의 해당 옵션들을 해제시켜주면 된다.

루트모션이란?
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/root-motion-in-unreal-engine

스켈레톤의 루트 본을 기점으로 움직이는 애니메이션에 루트 본의 이동정보도 같이 넣어 자연스럽게 움직이도록 하는 것 같은데..

지금 상태로는 점프중에 구르거나 구르는 중에 마구 방향 전환이 가능하기 때문에 어느정도 수정이 필요해보인다.

참고한 영상 : https://www.youtube.com/watch?v=zeOm45iWc7M&list=WL&index=105&t=1665s

profile
한번 해보자

0개의 댓글