본문 바로가기

언리얼C++게임개발/07.애니메이션 시스템의 설계

애니메이션 블루프린트

1. 애니메이션 기본 제작

다양한 상황에 맞는 애니메이션을 재생할 수 있도록 애니메이션 블루프린트 기능을 활용한다.

  • 애님 인스턴스: 애니메이션 블루프린트의 기반
    • 스켈레탈 메시를 소유하는 폰의 정보를 받아 애님 그래프가 참조할 데이터 제공
    • 블루프린트와 C++로 제작가능
  • 애님 그래프: 시각적 도구를 사용해 애니메이션 시스템을 제작하도록 설계
    • 애님 인스턴스의 변수 값에 따라 변화하는 애니메이션 시스템을 설계하는 공간
    • 블루프린트로만 제작 가능
    • 체계적인 애니메이션 시스템 설계를 위해 스테이트 머신 제공

새로운 C++클래스를 만든다 부모는 AnimInstance로 이름은 ABAnimInstance로 한다.

 

CurrentPawnSpeed라는 이름의 float 변수를 만들어 이동 속도에 따라 애니메이션을 다르게 구현해보자.

ABAnimInstance.h

#pragma once

#include "ArenaBattle.h"
#include "Animation/AnimInstance.h"
#include "ABAnimInstance.generated.h"

UCLASS()
class ARENABATTLE_API UABAnimInstance : public UAnimInstance
{
	GENERATED_BODY()
	
public:
	UABAnimInstance();

private:
	// CurrentPawnSpeed 변수를 애님 그래프에서 사용할 수 있도록 UPROPERTY와 EditAnywhere 추가
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Pawn, Meta = (AllowPrivateAccess = true))
	float CurrentPawnSpeed;
};​

 

블루프린트 접근 방법

  • BlueprintReadOnly
  • BlueprintReadWrite

 

ABAnimInstance.cpp

#include "ABAnimInstance.h"

UABAnimInstance::UABAnimInstance()
{
	CurrentPawnSpeed = 0.0f;
}

코드를 컴파일하면 애님 인스턴스의 속성을 애니메이션 블루프린트에서 확인할 수 있다.

 

블루프린트의 클래스 정보를 클릭해 부모클래스 변경 적용

  1. 애니메이션블루프린트를 열어 툴바의 클래스 세팅을 눌러 부모 클래스 정보 변경
    • 클래스 변경 후 컴파일
  2. 상속된 변수 표시 박스를 체크해 CurrentPawnSpeed 변수 노출
  3. AnimGraph로 이동
  4. 변수를 작업 공간에 드래그하고 Get -메뉴 선택
    • BlueprintReadWrite로 선언했다면 Set활성화됨
  5. Get노드를 드래그한 후 ">"  노드 선택
  6. 비교값이 bool 형식으로 나오므로 bool로 포즈 블렌딩 노드 추가
  7. True/False포즈에 맞는 애니메이션 연결

 

 

애님 프리뷰 에디터에서 CurrentPawnSpeed 값마다 다른 애니메이션을 재생하는 캐릭터를 확인할 수 있다.