Make Unreal REAL.
article thumbnail
이득우의 언리얼 C++ 게임 개발의 정석

 

애님 인스턴스

  • Skeletal Mesh를 갖고 있는 폰의 정보를 받아 애님 그래프가 참조할 데이터를 제공한다.

애님 그래프

  • 애님 인스턴스의 변수 값에 따라 동적인 애니메이션 시스템을 설계하는 공간이다.

 

새로운 애님 인스턴스를 클래스를 만든다.

 

 

생성자, 매 프레임마다 호출되며 Tick과 같은 역할을 하는 NativeUpdateAnimation() 함수를 선언한다.

 

플레이어의 현재 속력을 저장할 CurrentPawnSpeed 변수는 애님 그래프에서 참조해야 하기 때문에 BlueprintReadOnly 키워드를 지정해준다.

 

 

언리얼 엔진은 매 프레임마다 입력 시스템(Input) -> 게임 로직(Tick) -> 애니메이션(Animation) 순으로 처리한다.

입력으로 사용자의 의지를 확인하고 게임 로직을 실행한 후 최종 애니메이션을 재생시키는 것이 자연스럽기 때문이다.

 

만약, 게임 로직 단계에서 폰을 제거하는 명령이 실행된다면 애니메이션 단계에서는 유효하지 않은 폰을 참조해 오류가 발생할 것이다.

 

따라서, 폰에 접근하기 전에 TryGetPawnOwner() 함수와 IsValid() 함수를 이용해 폰 객체가 유효한지 확인해야 한다.

 

FVector.Size() 함수로 벡터의 길이를 가져올 수 있다.

 

 

Anim Instance를 우클릭해서 애니메이션 블루프린트를 생성해도 되고, 이미 있는 애니메이션 블루프린트의 Class Settings에서 부모 클래스를 변경해도 된다.

 

 

애니메이션 블루프린트의 애님 그래프에서 애님 인스턴스의 CurrentPawnSpeed 변수의 값에 따라 다른 애니메이션을 재생하도록 한다.

  • Blend Poses by bool 노드를 이용해 bool 값에 따라 애니메이션을 선택할 수 있다.

 

 

컴파일 후 Anim Preview Editor에서 CurrentPawnSpeed 값을 변경해보면 애님 그래프에 따른 애니메이션의 프리뷰를 확인할 수 있다.

 

 

게임 로직과 애니메이션 처리를 분리하기 위해 애님 인스턴스의 NativeUpdateAnimation() 함수에서 폰에 접근하는 것이 일반적이다.

  • 이렇게 설계하면 애니메이션이 필요 없는 서버 코드에서도 문제없이 동작한다.

 

좋은 방법은 아니지만 폰에서 Skeletal Mesh 컴포넌트를 통해 애님 인스턴스에 접근해 처리할 수도 있다.

 

profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그