Unreal Engine/기능 구현 / / 2025. 10. 15. 18:02

[Unreal Engine 5] C++ : 애니메이션 블루프린트(2) : 이동

반응형

https://kabu0129.tistory.com/320

 

[Unreal Engine 5] Blueprint : 애니메이션 블루프린트 이동 구현

# 개요언리얼에서 애니메이션은 크게 두 가지로 형태로 구분하여 구현한다.1. 대기, 이동, 점프 및 하락과 같은 간단하고 연속적인 동작은 애니메이션 블루프린트(ABP Class)로2. 공격, 스킬, 사망

kabu0129.tistory.com

 

위 글에서는 블루프린트를 통해 애니메이션 이동이 자연스럽게 블렌드 스페이스를 통해 Idle -> Walk -> Run 순으로 

Forward -> Left/Right -> Back으로 변화했다.

 

이번에는 C++로 그 기능을 추가하는 방법을 알아보자.

 

애님 인스턴스 선택 후 클래스 생성

 

함수와 프로퍼티를 다음과 같이 만든다.

요약하자면 Initialize Animation 함수로 초기화를,

Update Animation을 통해 매 프레임마다 5가지 변수의 값을 갱신한다.

 

캐릭터를 저장하는 것은 선택사항.

Character Movement Component는 앞으로 쓸 일이 많으므로 프로퍼티로 저장

 

그리고 기본적인 5가지 변수를 저장한다.

1. Velocity : 이동 벡터

2. GroundSpeed : 이동속도

3. Direction : 이동 방향

4. bShouldMove : 이동 중인지?

5. bIsFalling : 낙하 중인지? 땅에 닿지 않은 상태인지?

 

cpp로 가면 다음과 같다.

캐릭터와 캐릭터 무브먼트 컴포넌트를 초기화 단계에서 포인터를 가져오고,

Update 함수에서 5가지 변수의 값을 계속 체크한다.

 

왜 이렇게 구했는지는 블루프린트 글에서 설명했으니 간단하게 짚고 넘어가면,

캐릭터의 이동과 관련된 기능은 모두 캐릭터 무브먼트 컴포넌트에 존재한다.

 

그래서 캐릭터 무브먼트 컴포넌트를 통해 이동과 관련된 애니메이션 처리를 할 수 있는데,

GroundSpeed는 Velocity라는 벡터의 길이(Length)이다. C++에서는 Size라는 함수로 구할 수 있고, Size2D 함수로 구한 이유는 점프라는 Z축 값을 배제하고 이동 값을 구하기 위해서다.

 

방향은 이동 벡터와 캐릭터의 회전 값을 통해 계산한다.

 

언리얼에서 제공하는 UKismetAnimationLibrary 함수를 통해 손쉽게 방향을 구할 수 있는데, 해당 클래스를 사용하기 위해서는 AnimGraphRuntime 모듈을 추가해야 한다. 

 

이동 중인지 체크하기 위해서는 GroundSpeed를 통해 이동벡터의 길이가 특정 값보다 크면 이동으로 본다.

또한 현재 가속값이 제로 벡터가 아니면 이동으로 보는 조건을 추가했다.

 

마지막으로 떨어지는 중인지 확인하는 함수는 캐릭터 무브먼트 컴포넌트에 있는 IsFalling 함수로 간단히 처리할 수 있다.

 

 

그러면 정상적으로 헤더를 추가할 수 있다.

 

 

 

이제 에디터로 가서 애니메이션 블루프린트 - 애님 그래프 - 로코모션 스테이트 머신 - 블렌드 스페이스 스테이트로 가서 방향과 스피드의 조건을 추가해주면 방향과 속도를 기준으로 여러 애니메이션을 표현할 수 있다.

 

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유