언리얼의 모션 워핑(Motion Warping)은 캐릭터의 루트 모션이 타겟과 일치하도록 동적으로 정렬하는 기능이다.
다시 말하자면, 루트모션이 재생 중인 캐릭터를 특정 위치로 이동할 수 있다.
이를테면 파쿠르 액션이나 암살 등 다양한 곳에 모션 워핑을 사용할 수 있다.
언리얼 엔진에서 모션 워핑을 쓰기 위해선 모션 워핑 플러그인을 켜야 한다.
아래 사진과 같이 모션 워핑은 아직 실험 단계의 기능인 것을 볼 수 있다. (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이라는 이름의 애님 노티파이 스테이트를 추가한다. 당연한 소리지만 몽타주 슬롯이 애니메이션 블루프린트에 있어야 재생할 수 있다. 그리고 모션 워핑을 사용하기 위해선 애니메이션이 루트 모션이여야 한다.
모션 워핑을 적용하고 싶은 캐릭터는 모션 워핑 컴포넌트가 있어야 한다.
로직적인 부분은 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);
위 코드를 통해 나온 결과는 아니지만 아래와 비슷하게 구현할 수 있다고 보면 된다.
'둥지 > Unreal' 카테고리의 다른 글
Unreal GAS(GameplayAbilitySystem) Documentation 번역글 3부 (0) | 2023.06.06 |
---|---|
언리얼 C4430 오류 (0) | 2023.05.30 |
Unreal GAS(GameplayAbilitySystem) Documentation 번역글 2부 (0) | 2023.05.27 |
Unreal GAS(GameplayAbilitySystem) Documentation 번역글 1부 (1) | 2023.05.05 |
Unreal MSB3073 에러 (0) | 2023.04.01 |