헛둘이 2024. 10. 3. 15:27

InitState에 대해 설명하기 전에 GameplayTag에 대해서 우선 설명해야 합니다.

GameplayTag는 Unreal Engine에서 제공하는 카테고리 네이밍 기법입니다.

 

C++ 문법에 비유하자면 enum class와 비슷하고, 이를 더 계층화시킨 방법입니다.

예를 들어 House.Chair.Leg 이런 식으로 House 아래 계층에 Chair가 존재하고, 그 밑에 Leg가 존재하는 것처럼

 

특정 객체에 태그를 지정하여 분류하거나 분기 처리를 하는 등 디테일한 처리를 가능하게 합니다.

태그를 등록하는 주체는 UGameplayTagsManager를 통해 진행하게 되며, 실질적인 사용처는 HmGameInstance에서

UGameFrameworkComponentManager를 통해 RegisterInitState 함수에 등록됩니다.

 

InitState란 ComponentManager에서 Component 부착 순서를 명시하기 위한 방법입니다.

컴포넌트 4개를 A 오브젝트에 붙여라 라고 전달했을 때 부착 순서에 대해 전달하지 않으면 문제가 생길 수 있습니다.

예를 들어 A 컴포넌트가 초기화를 진행한 후, B 컴포넌트가 A 컴포넌트를 참조하여 초기화를 진행해야 하는 경우를 예로 든다면,

 

B 컴포넌트가 먼저 등록되었을 때, A 컴포넌트가 존재하지 않기 때문에 크래쉬가 나기 때문입니다.

물론 이를 회피하기 위해 다른 방안들도 생각해볼 수 있겠지만, 언리얼 엔진에서 순서대로 컴포넌트를 조립하게 해주는 기능을 지원한다면, 그 기능을 사용하는 것이 효율적이라고 생각합니다.