728x90
이 글은 Inflearn - Rookiss : 언리얼 엔진4 입문 강의를 듣고 정리한 글입니다.

 

목차.

  1. 애니메이션 살펴보기
  2. Anim Instance 클래스 생성 및 애니메이션 블루프린트 생성
  3. 애니메이션 블루프린트 살펴보기
  4. 캐릭터 애니메이션 구현

 

애니메이션 살펴보기

 

먼저 블루프린트에서 애니메이션 작동을 확인하기 위해

Mesh -> 애니메이션 항목에서 Animation Mode을 Use Animation Asset -> Animation Play에서 

원하는 애니메이션을 선택하면 애니메이션이 작동하는 것을 확인할 수 있습니다.

 

Animation Play를 이용한 애니메이션 작동 확인

 

기존에 작성해둔 캐릭터 클래스에서 애니메이션을 제어해도 되지만, 프로젝트의 규모가 커질수록 제어하기 어려워집니다.

 

그래서 애니메이션을 별도의 클래스에서 제어하는게 좋습니다.

 

Anim Instance 클래스 생성 및 애니메이션 블루프린트 생성

 

애니메이션을 제어할 클래스를 하나 생성해 주겠습니다.

 

새로운 C++ 클래스 추가-> 부모 클래스 AnimInstance 선택

부모 클래스로 AnimInstance 생성

 

플레이어가 이동할 때만 애니메이션을 작동하게 하기 위해 변수 하나를 선언하겠습니다.

 

class TESTUNREALENGINE_API UMyAnimInstance : public UAnimInstance
{
....
private:

	UPROPERTY(EditAnywhere, BlueprintReadOnly,Category =Pawn, Meta=(AllowPrivateAccess=true))
	float Speed;
}

 

다음으로 방금 생성한 애니메이션 인스턴스 클래스를 상속받는 블루프린트 하나를 생성해 주겠습니다.

 

빈 공간 우클릭 -> 애니메이션 -> 애니메이션 블루프린트

 

애니메이션 블루프린트 생성(블루프린트 클래스 x)

 

부모클래스는 방금 생성한 인스턴스 클래스로 하고, 스켈레톤도 선택해 주겠습니다.

 

부모 클래스는 AnimInstance 하고 스켈레탈 메시 선택

 

애니메이션 블루프린트 살펴보기

 

잘 생성되었다면 미리 보기에는 베이스가 되는 캐릭터가 있고 애니메이션 그래프라는 창이 보입니다.

 

최종 애니메이션 포즈가 있는데 말 그대로 현재 작동 중인 애니메이션을 뜻합니다.

 

AnimGraph 창

 

우측 하단에 에셋 브라우저 창이 있는데 이곳에서 애니메이션을 드래그 & 드롭하여 최종 애니메이션 포즈와 연결하면 해당 애니메이션이 작동하는 것을 좌측 미리 보기 화면을 통해 볼 수 있습니다.

 

애님 프리뷰 에이터에서 Pawn 변수 확인

 

그리고 잘 보면 아까 생성해둔 Speed 변수가 보입니다.

 

하지만 이대로 게임을 시작해도 애니메이션은 작동하지 않는데,

다시 캐릭터 블루프린트로 돌아가 Mesh의 애니메이션에 

 

아까 Use Animation Asset으로 해둔 Mode를 Use Animation Blueprint로 변경하고,

Anim Class는 방금 생성한 애니메이션 블루프린트로 설정합니다.

 

다시 캐릭터 블루프린트로 돌아와 Animation Mode를 변경

 

컴파일하고 저장한 뒤, 게임을 실행하면 연결해둔 애니메이션이 작동하는 것을 볼 수 있습니다.

 

캐릭터 애니메이션 구현

 

이제 아까 만든 Speed 변수를 활용해 플레이어가 키를 입력하면 애니메이션이 작동하게 해보겠습니다.

 

노드들을 잘 연결해서

 

키 입력이 없을 때 Idle 애니메이션, 키 입력시 걷기 애니메이션이 작동하게 하였고,

조건문 블록을 활용해 Speed가 0보다 크면 true 작다면 false를 반환하게 했습니다.

 

그리고 여기서 새로운 것이 bool로 포즈 블렌딩인데 bool 값을 활용하여 애니메이션을 블렌드 시켜 부드럽게 전환시켜 주는 함수입니다.

 

각 애니메이션과 연결을 시켜주고 최종적으로 Result에 연결시켜 주면 됩니다.

 

Anim Instance 클래스에 코드를 추가하겠습니다.

 

.h

class TESTUNREALENGINE_API UMyAnimInstance : public UAnimInstance
{
....
    virtual void NativeUpdateAnimation(float DeltaSeconds) override;
....
}

 

.cpp

void UMyAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
	Super::NativeUpdateAnimation(DeltaSeconds); //Super는부모 클래스를 의미

	auto pawn = TryGetPawnOwner();

	if (IsValid(pawn))
	{
		Speed = pawn->GetVelocity().Size();
	}
}

 

위 코드에서 pawn -> GetVelocity를 받아옵니다.

 

추출한 pawn이 움직이면 값이 0보다 커질것이고 움직임을 멈추면 0이되어 애니메이션을 작동시킬 수 있습니다.

 

애니메이션 작동모습

728x90

+ Recent posts