그냥 게임개발자

ProjectA - 애니메이션 Retarget, AnimBlueprint 본문

ProjectA

ProjectA - 애니메이션 Retarget, AnimBlueprint

sudoju 2023. 12. 27. 22:08

https://www.youtube.com/watch?v=UORC3YjlbZQ

 

여기서 다운받은 애니메이션들을 Ue5 마네킹으로 Retarget을 하려고 한다.

 

 

마침 언리얼 엔진에서 제공해주는 UE4 to UE5 Retarget이 있다.

 

이 애니메이션들을 다시 Export한다.

 

그리고 내 프로젝트로 다시 가져와서 적용해서 애니메이션들을 만들 예정

 

가져온 애니메이션

- 위 유트브

- Lyra(UnrealEngine Sample Project)

 

 

잘 Export되었으니 내 프로젝트에 적용해서 애니메이션 블루프린트를 새로 생성하자

 

상속 클래스는 AnimInstance이다.

 

기본적인 AnimGraph는 아래와 같다.

 

 

 

 

 

애님인스턴스를 가지고 있는 캐릭터를 가져와서 Speed와 Falling 등을 가져와 조건에 부합하게 만든다.

 


UPAAnimInstance::UPAAnimInstance()
{
	MovingThreshould = 0.5f;
	JumpingThreshould = 100.0f;
	bIsIdle = true;
}

void UPAAnimInstance::NativeInitializeAnimation()
{
	Super::NativeInitializeAnimation();

	Owner = Cast<ACharacter>(GetOwningActor());
	if (Owner != nullptr)
	{
		Movement = Owner->GetCharacterMovement();
	}
}

void UPAAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
	Super::NativeUpdateAnimation(DeltaSeconds);

	if (Movement != nullptr)
	{
		Velocity = Movement->Velocity;
		Speed = Velocity.Size2D();
		bIsIdle = Speed < MovingThreshould;
		bIsFalling = Movement->IsFalling();
		bIsJumping = bIsFalling & (Velocity.Z > JumpingThreshould);
	}
}

이렇게 CharacterMovement의 Velocity를 가져와 Speed를 가져오고 Idle 상태인지 체크하는 경우는 MovingThreshould값보다 작으면 Idle 상태이다.

 

틱마다 계속 가져와서 애니메이션의 상태를 계속 업데이트 한다.