본문 바로가기
둥지/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);

 

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