리얼 개발

[UE5] 모션워핑과 풀바디 IK 본문

Unreal Engine5

[UE5] 모션워핑과 풀바디 IK

econo-my 2024. 10. 16. 12:24

상황에 대응하는 프로시저럴 애니메이션 제작하기 | 언리얼 서밋 2021

https://www.youtube.com/watch?v=nxzfJcwyj1Y&t=856s

 

차례

  • 모션 워핑
  • 공격 스킬 구현
  • 컨트롤 릭과 풀 바디 IK
  • 풀 바디 IK 세팅
  • 사다리 애니메이션 구현

모션 워핑과 풀 바디 IK는 아직 얼리엑세스 단계 - 영상 업로드 기준

 

 

모션 워핑

  • 캐릭터의 루트 모션을 동적으로 타깃에 정렬
  • 캐릭터를 원하는 타이밍 구간에 원하는 위치, 원하는 방향으로 캐릭터를 이동시켜주는 기능
  • 루트 모션이라는 애니메이션을 보간해서 캐릭터를 이동시키는 방식

 

루트 모션

  • 캐릭터의 최상위 노드의 애니메이션
  • 애니메이션 파일의 루트 움직임을 캐릭터 무브먼트의 움직임으로 전환
  • 캐릭터가 밀리는 현상을 방지하려면 디딤 발이 움직이지 않을 때, 루트도 움직이지 않게 한다.

💡 루트 모션 활성화 시켰을 때 루트 모션의 움직임이 멈췄었는데 사실 사라지는게 아니고 애니메이션의 루트 본 움직임을 고정시키는 대신에 캐릭터 무브먼트에 그 움직임을 전달한다.

 

 

대시 공격

 

 

대시 공격 구현

  • 모션 워핑 컴포넌트 추가
  • 적절한 공격 위치와 방향을 계산
  • 싱크 포인트 업데이트
  • 모션 워핑 노티파이 스테이트 설정
  • 애니메이션 실행

 

C++ 구현

영상에서는 블루프린트를 사용해 구현하지만 나는 이를 C++로 구현해보기로 했다.

빌드에 모듈 추가
PublicDependencyModuleNames.AddRange(new string[] {"MotionWarping"});

캐릭터 클래스
헤더 파일
/* 모션 워핑 */
private:
	UPROPERTY(EditAnywhere, Category = "MotionWarp")
	TObjectPtr<class UMotionWarpingComponent> MotionWarpComponent;
	
구현 파일
#include "MotionWarpingComponent.h"

/* 컴포넌트 부착 */
MotionWarpComponent = CreateDefaultSubobject<UMotionWarpingComponent>(TEXT("MotionWarping"));

현재 제작중인 프로젝트에서는 기본 공격을 Component에서 관리하고 있다.

 

캐릭터 공격 컴포넌트
헤더 파일
/* 모션 워핑 컴포넌트 가져오는 함수 */
class UMotionWarpingComponent* GetMotionWarpComponent();

정의 파일
UMotionWarpingComponent* UCharacterAttackComponent::GetMotionWarpComponent()
{
	return Character->GetComponentByClass<UMotionWarpingComponent>();
}

/* 모션 워핑 Target 업데이트 함수 */
void UCharacterAttackComponent::ProgressAttackMotionWarp()
{
	const FVector PlayerLoc = Character->GetActorLocation();
	const FVector TargetLoc = PlayerLoc + (Character->GetActorForwardVector() * 100.f);
	const FRotator TargetRotator = UKismetMathLibrary::MakeRotFromX(TargetLoc);

	GetMotionWarpComponent()->AddOrUpdateWarpTargetFromLocationAndRotation(TEXT("ProgressAttack"), TargetLoc, TargetRotator);
}

공격 몽타주에 모션 워핑 노티파이를 추가하고 Warp Target Name 을 설정해준 뒤, 해당 이름을 타겟으로 적어주면 된다. 마지막으로 몽타주가 실행되기 전 ProgressAttackMotionWarp 를 호출해준다.

 

 

주의할 점

  • 모션 워핑을 적용하기 전 공격하면 캐릭터의 무브먼트를 MOVE_None이라 설정했었는데 모션 워핑으로 캐릭터를 움직이려면 해당 코드를 작성하면 안된다. 무브먼트를 이용해서 움직이기 때문에!
  • 공격이 끝나면 캐릭터가 기울어졌었는데 Warp Rotation 을 false로 설정해주자.

 

컨트롤 릭

  • 블루프린트 기반 리깅 시스템
    • 프로시저럴 리깅
    • 엔진에서의 애니메이션 키잉
    • 리타기팅
    • 풀 바디 IK

 

모션워핑 내용만 보려고 한거라 여기까지,,

'Unreal Engine5' 카테고리의 다른 글

[UE5] 데이터 테이블  (0) 2025.03.02
[UE5] AIPerception  (1) 2024.11.05
[UE5] 언리얼 빌드 시스템  (1) 2024.09.12
[UE5] 무기 선택 창으로 무기 교체하기  (0) 2024.09.11
[UE5] Vector 클래스 분석  (0) 2024.09.04