[UE Climbing] 2-1. Climbing Animation

2025. 4. 14. 19:47·강의/UE Climbing System
해당 카테고리 글들은 Unreal Engine 5 C++: 클라이밍 시스템 구축하기를 수강하고 공부한 내용을 정리한 글입니다.
강의 바로가기

 

두 번째 섹션 - 클라이밍 움직임 강의 내용 중 중요하다고 생각한 부분만 정리했습니다. 자세한 내용은 강의에서 확인 가능합니다.

먼저, 두 번째 섹션에 대해 정리한 글은 아래와 같습니다.

두 번째 섹션에서는 위로 오르기, 아래로 내려가기, 왼쪽으로 오르기, 오른쪽으로 오르기, ledge를 오르내리기, 클라이밍 상태로 들어가고 나오는 방법을 다룹니다. C++에서 캐릭터 애니메이션 인스턴스 클래스를 만들고 기존 애니메이션 블루프린트를 다시 구축하는 것으로 시작합니다. 그런 다음 Mixamo 애니메이션 파이프라인을 살펴보고 Mixamo 변환기를 사용하여 애니메이션을 리타겟팅하는 방법을 알아봅니다. 이후 클라이밍 운동을 처리하고, 바닥이나 ledge에 도달했는지 확인하는 알고리즘을 작성합니다.

 

23. 캐릭터 애니메이션 인스턴스

AnimInstance 상속받아서 UCharacterAnimInstance 생성합니다. 

void UCharacterAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
	Super::NativeUpdateAnimation(DeltaSeconds);
 
	if(!ClimbingSystemCharacter || !CustomMovementComponent) return;
 
	GetGroundSpeed();
	GetAirSpeed();
	GetShouldMove();
	GetIsFalling();
}

 

24. 애니메이션 BP 재구성

이는 GroundLocomotion에서 핀을 이으는 것과 동일. 하지만 이렇게 하면 더 깔끔한 그래프를 얻을 수 있습니다.

 

이동, 점프 애니메이션 구현

 

25. Mixamo 애니메이션

https://dev0404.tistory.com/73 블로그에 따로 정리했습니다.

 

26. 대기 상태에서 클라이밍 몽타주

void UCustomMovementComponent::BeginPlay()
 {
 	Super::BeginPlay();
 
 	OwningPlayerAnimInstance = CharacterOwner->GetMesh()->GetAnimInstance();
 
 	if(OwningPlayerAnimInstance)
 	{
 		OwningPlayerAnimInstance->OnMontageEnded.AddDynamic(this,&UCustomMovementComponent::OnClimbMontageEnded);
 		OwningPlayerAnimInstance->OnMontageBlendingOut.AddDynamic(this,&UCustomMovementComponent::OnClimbMontageEnded);
 	}
 }

이제 F 클릭시 몽타주가 나옵니다

 

27. 대기와 클라이밍 간의 전환

애니메이션의 위치가 캡슐과 일치하지 않습니다. 이를 해결하기 위해

 

애니메이션에서 root 키를 클릭 후 아래로 이동시키고 + 키를 누르면

 

애니메이션과 캡슐이 잘맞게 됩니다.

 

 

28. 클라이밍 로코모션

좌우, 위아래로 움직이는 애니메이션 캡슐 맞게 조정하고 블랜드 스페이스 생성합니다

 

29. 바닥에 도달했는지 확인

bool UCustomMovementComponent::CheckHasReachedFloor()
{
	const FVector DownVector = -UpdatedComponent->GetUpVector();
	const FVector StartOffset = DownVector * 50.f;
 
	const FVector Start = UpdatedComponent->GetComponentLocation() + StartOffset;
	const FVector End = Start + DownVector;
 
	TArray<FHitResult> PossibleFloorHits = DoCapsuleTraceMultiByObject(Start,End,true);
 
	if(PossibleFloorHits.IsEmpty()) return false;
 
	for(const FHitResult& PossibleFloorHit:PossibleFloorHits)
	{	
		const bool bFloorReached =
		FVector::Parallel(-PossibleFloorHit.ImpactNormal,FVector::UpVector) &&
		GetUnrotatedClimbVelocity().Z < -10.f;
 
		if(bFloorReached)
		{
			return true;
		}
	}

	return false;
}

바닥 부분을 체크하기 위해 아래와 같이 코드를 짭니다

const bool bFloorReached =
FVector::Parallel(-PossibleFloorHit.ImpactNormal,FVector::UpVector) &&
GetUnrotatedClimbVelocity().Z < -10.f;

 

 

'강의 > UE Climbing System' 카테고리의 다른 글

[UE Climbing] 2-2. Climbing Animation  (5) 2025.04.14
[UE Climbing] 1. Climbing Movement  (0) 2025.03.28
'강의/UE Climbing System' 카테고리의 다른 글
  • [UE Climbing] 2-2. Climbing Animation
  • [UE Climbing] 1. Climbing Movement
개발자 밍
개발자 밍
dev0404 님의 블로그 입니다.
  • 개발자 밍
    Developer
    개발자 밍
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • 강의 (8)
        • UE Climbing System (3)
        • UE Dungeon (1)
        • HCI (4)
      • 책 (18)
        • 객체지향의 사실과 오해 (5)
        • Effective C++ (3)
        • 이득우의 게임 수학 (4)
        • 이것이 취업을 위한 컴퓨터 과학이다 (4)
        • 리뷰 (2)
      • C++ (2)
      • 알고리즘 (2)
      • 자료구조 (1)
      • Unreal (4)
      • 내일배움캠프 (52)
        • TIL (52)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    컴퓨터구조
    Effective
    자료구조
    내일배움캠프
    알고리즘
    c++
    언리얼
    그래픽스
    객체지향
    게임수학
    컴퓨터 구조
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
개발자 밍
[UE Climbing] 2-1. Climbing Animation
상단으로

티스토리툴바