본문 바로가기
Unreal Engine/UE4 C++ 게임 개발 공부

[UE4 C++] 애니메이션 시스템 (애니메이션 블루프린트)

by JJPearl 2022. 1. 12.
반응형

애니메이션 블루프린트

캐릭터가 다양한 상황에 적절한 애니메이션을 체계적으로 재생하도록 하는 애니메이션 시스템 제작 도구.

애니메이션 블루프린트는 두가지로 구성.

  1. 애님 그래프(Anim Graph) : 시각적 도구를 사용해 애니메이션 시스템 제작. 애님 인스턴스의 변수 값에 따라 변화하는 애니메이션 시스템을 설계하는 공간. 블루프린트로만 제작 가능
  2. 애님 인스턴스(Anim Instance) : 스켈레탈 메시를 소유하는 폰의 정보를 받아 애님 그래프가 참조할 데이터를 제공. 블루프린트와 C++로 제작 가능

애니메이션 블루프린트는 애님 그래프 로직에 따라 동작하는 캐릭터 애니메이션 시스템을 구동시키는데, 이러한 애니메이션 시스템은 C++ 프로그래밍의 애님 인스턴스로 관리된다.

 

예)

C++로 애님 인스턴스를 제작해 폰의 현재 속력을 변수로 애님 인스턴스에 저장

-> 애님 그래프에서는 이 값에 따라 IDLE / RUN 애니메이션을 재생

 

 

 

- C++ 애님 인스턴스 클래스

애님 인스턴스 클래스를 생성하고 변수를 추가할 때

변수를 애님 그래프에서 사용할 수 있도록 UPROPERTY 매크로와 EditAnywhere 키워드를 추가해야 한다.

이 때 블루프린트에서 접근하는 방법에 대한 키워드를 추가로 지정해줘야 한다.

  • BlueprintReadOnly : 블루프린트에서는 오로지 값을 읽기만 하도록
  • BlueprintReadWrite
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Pawn, Meta=(AllowPrivateAccess=true))
	float CurrentPawnSpeed;

 

Meta 키워드

Meta 키워드는 Metadata 지정자라고 하며 에디터 관련 다양한 기능을 구현 할 수 있다.

  • Meta = (AllowPrivateAccess = "true") : 변수가 private 이지만 에디터에서 보이게 할 수 있다.
  • Meta = (AllowPrivateAccess = "true",다른 명령,다른 명령) 처럼 다른 명령어와 합쳐서 쓸 수 있다.

그 외 다양한 Metadata 명령어들이 있다.

https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/GameplayArchitecture/Metadata/

 

메타데이터 지정자

Metadata 키워드는 UClass, UFunction, UProperty, UEnum, UInterface 를 선언할 때 사용되며, 엔진 및 에디터 다양한 부분과의 작동방식을 지정하는 데 사용됩니다.

docs.unrealengine.com

 

 

애님 인스턴스 클래스 생성 후 애니메이션 블루프린트의 부모 클래스 정보를 해당 애님 인스턴스 클래스로 변경 후 컴파일 누르고

좌측 블루프린트 메뉴에서 상속된 변수 표시 버튼을 누르면

애님 그래프에서 해당 변수 값을 이용할 수 있게 된다.

 

 

- 폰과 데이터 연동

애님 인스턴스 클래스는 틱마다 호출되는 NativeUpdateAnimation 함수를 가상함수로 제공한다. 

애님 인스턴스의 틱에서 폰에 접근해 애니메이션을 생성하는 방법이 일반적이다. 

폰에서 스켈레탈 메시 컴포넌트의 GetAnimInstance()로 폰에서 애님 인스턴스에 접근해 캐릭터에서 직접 애님 인스턴스의 값을 변경할 수도 있다.
하지만 대부분은 애님 인스턴스의 틱에서 폰에 접근해 애니메이션을 생성하는 방법을 사용한다.
-> 애니메이션 로직과 폰의 로직을 분리할 수 있어 애니메이션이 필요 없는 서버 코드에도 문제없이 작동하기 때문이다.
  • TryGetPawnOwner : 애니메이션 시스템의 틱에서 폰에 접근해 폰의 값(예.속력)을 얻어올 수 있다. 
    • 폰에 접근할 때 폰 객체가 유효한지 검사
    • 게임 엔진의 로직 순서 : 입력 시스템 -> 게임 로직 -> 애니메이션 시스템
    • 게임 로직 단계에서 폰이 제거됐을 때 유효하지 않은 폰 객체 참조를 방지

 

 

- 스테이트 머신

상황에 따른 복잡한 애니메이션 시스템을 체계적으로 설계할 수 있도록 애님 그래프가 제공하는 기능.

유한 상태 기계라고도 불린다.

기계가 반복 수행해야 하는 동작을 설계한 단위인 스테이트(State)를 정의하는 것으로 시작.

스테이트 머신은 스테이트 여러개 중 하나의 스테이트를 지정해 해당 스테이트에서 지정한 동작을 반복 수행.

-> 애니메이션 시스템에서 스테이트 = 캐릭터가 반복해서 재생해야할 애니메이션

 

 

 

 

반응형