Make Unreal REAL.
article thumbnail
Advanced Unreal Engine 5 Multiplayer Gameplay Programming

 

지금은 애니메이션이 애니메이션 BP에 하드코딩(애니메이션 에셋을 직접 배치)되어 있는데, 실제 게임에서는 데이터 기반 방식과 애님 인스턴스를 활용한다.

  • 데이터 기반 방식을 활용하면 효율적으로 애니메이션을 관리할 수 있다.

 

예를 들어, 여러 캐릭터의 애니메이션을 단순히 애니메이션 데이터 에셋을 교체하는 것만으로도 쉽게 바꿀 수 있다.

  • 일반 몬스터의 보행, 보스 몬스터의 보행 등

 

언리얼 엔진 5의 예제 라이라에서는 이런 방식을 사용했다는데 아직은 잘 모르겠다..

 

 

라이라의 애니메이션

라이라의 애니메이션 시스템에 관한 개요입니다

docs.unrealengine.com

 

애니메이션 BP에 하드코딩 되어 있는 Idle, Walk 애니메이션을 데이터 에셋을 통해 관리하도록 변경해본다.

 

캐릭터 속성에 사용했던 방법과 비슷하게 애니메이션을 데이터 에셋으로 관리하기 위한 새로운 구조체를 선언한다.

  • 블렌드 스페이스와 Idle 애니메이션에 대한 참조를 저장한다.

 

 

애니메이션을 관리할 새로운 Data Asset C++ 클래스 생성한다.


헤더를 포함하고 방금 선언한 애니메이션 관리용 구조체의 값을 담도록 한다.

 


CharacterAnimDataAsset 형식의 Data Asset 에셋을 생성하고 블렌드 스페이스와 Idle 애니메이션을 지정해준다.

 


캐릭터 Data Asset용 구조체에 애니메이션용 Data Asset 객체에 대한 참조를 저장하도록 한다.

  • 이로써 플레이어, 몬스터, 보스 등은 각자의 기본 능력과 기본 이펙트, 애니메이션이 적용되게 된다.

 


캐릭터용 Data Asset에서 애니메이션용 Data Asset 객체를 지정해준다.

 


애니메이션 BP의 부모로 설정할 새로운 애님 인스턴스를 생성한다.

 


애님 인스턴스에 애니메이션 BP에서 사용할 헬퍼 함수를 작성한다.

  • BlueprintThreadSafe
    애니메이션 재생 성능을 높이기 위해 게임 쓰레드가 아닌 비게임 멀티쓰레드를 활용할 수 있는데, 비게임 쓰레드에서도 호출 가능하도록 한다.

 

 

헤더를 포함하고 구현부를 작성한다.

 


캐릭터 애니메이션 BP의 부모 클래스를 방금 생성한 AG_AnimInstance로 변경한다.

 


Idle 애니메이션이 하드코딩 되어 있던 걸, 헬퍼 함수를 통해 Data Asset에서 가져온 애니메이션을 사용하도록 변경한다.

 

 

Walk / Run 상태에서도 블렌드 스페이스가 하드코딩 되어 있던 걸, 헬퍼 함수를 통해 Data Asset에서 가져온 블렌드 스페이스를 사용하도록 변경한다.

 


잘 되나, 처음에 잠깐 동안 T포즈로 있다가 시작되는 현상이 있다.

  • Data Asset이 로드되기 전에, 애님 인스턴스의 헬퍼 함수가 nullptr을 반환하기 때문이다.

 


애님 인스턴스의 헬퍼 함수에서 Data Asset이 로드되기 전에는 기본 애니메이션을 반환하도록 변경한다.

 


nullptr을 반환하는 대신 기본 애니메이션을 반환하도록 변경한다.

 

 

Data Asset으로 애니메이션을 관리하는 데 성공했다.

 

이제 몬스터, 보스 등 다른 캐릭터에서도 Data Asset을 통해 Idle 애니메이션과 걷기 블렌드 스페이스만 변경해주면, 쉽게 애니메이션을 교체해 적용할 수 있다.

 

profile

Make Unreal REAL.

@diesuki4

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

검색 태그