본문 바로가기
둥지/Unreal

Unreal5 모션 워핑 다뤄보기

by 까닭 2023. 5. 13.

언리얼의 모션 워핑(Motion Warping)은 캐릭터의 루트 모션이 타겟과 일치하도록 동적으로 정렬하는 기능이다.

 

다시 말하자면, 루트모션이 재생 중인 캐릭터를 특정 위치로 이동할 수 있다.

이를테면 파쿠르 액션이나 암살 등 다양한 곳에 모션 워핑을 사용할 수 있다.

 

 

모션 워핑

언리얼 엔진의 애니메이션 모션 워핑에 대해 자세히 알아봅니다.

docs.unrealengine.com

 

언리얼 엔진에서 모션 워핑을 쓰기 위해선 모션 워핑 플러그인을 켜야 한다.

아래 사진과 같이 모션 워핑은 아직 실험 단계의 기능인 것을 볼 수 있다. (5.1 기준)

 

모션 워핑 플러그인을 켰다면 빌드 파일에 모듈 추가 후 프로젝트를 재구축한다.

using UnrealBuildTool;

public class YourProjectName : ModuleRules
{
	public YourProjectName(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
	
		PublicIncludePaths.AddRange(new string[] { "YourProjectName" });

		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput", "UMG", "MotionWarping" });
        
        	//...
	}
}

 

모션 워핑을 원하는 애니메이션 몽타주에 MotionWarping이라는 이름의 애님 노티파이 스테이트를 추가한다. 당연한 소리지만 몽타주 슬롯이 애니메이션 블루프린트에 있어야 재생할 수 있다. 그리고 모션 워핑을 사용하기 위해선 애니메이션이 루트 모션이여야 한다.

Warp Target Name은 코드 상과 동일해야 한다.

 

모션 워핑을 적용하고 싶은 캐릭터는 모션 워핑 컴포넌트가 있어야 한다.

로직적인 부분은 C++ 자료가 거의 없기 때문에 블루프린트가 아닌 C++로 설명해보자.

UPROPERTY(EditAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
TObjectPtr<class UMotionWarpingComponent> MotionWarpComponent;

 

모션 워핑 클래스에 접근하기 위한 헤더는 다음과 같다.

#include "MotionWarpingComponent.h"

 

캐릭터가 이동하려는 터의 위치와 회전값을 넣어준다.

FMotionWarpingTarget Target = {};
Target.Name = FName("Target");
Target.Location = TargetActor->GetActorLocation();
Target.Rotation = TargetActor->GetActorRotation();

MotionWarpComponent->AddOrUpdateWarpTarget(Target);

 

위 코드를 통해 나온 결과는 아니지만 아래와 비슷하게 구현할 수 있다고 보면 된다.