본문 바로가기
Unreal Engine/[Inflearn_rookiss] UE5 Lyra 분석

7. Pawn Extension

by 헛둘이 2024. 10. 7.

이전 편의 InitState와 이어지는 내용이라 InitState를 생각하며 이어서 진행하여야 합니다.

InitState를 복습해보면,

 - InitState_Spawned

 - InitState_DataAvailable

 - InitState_DataInitialized

 - InitState_GameplayReady

 

각각의 InitState들은 FGameplayTag 타입으로 이루어져 있으며, HmGameplayTags 클래스의 멤버변수들입니다.

그리고 이 State들은 InitializeNativeTags 함수에서 추가되며, InitializeNativeTags 함수는 AssetManager의 StartInitialLoading 함수에서 호출됩니다.

이 함수는 언리얼 엔진이 로딩되는 과정에서 호출되므로 매우 이른 시기에 등록된다고 볼 수 있습니다.

 

그리고 HmGameInstance 클래스의 Init에서 이 Tag들의 등록이 진행되게 됩니다.

이 InitState는 Component 부착 순서와 관련이 있다고 하였습니다.

 

부착 순서와 관련된 기법으로, Native C++와 블루 프린트를 이용하는 방법이 있습니다.

먼저 부착되어야 할 Component를 A라고 하고, 그 후에 붙어야 할 Component들은 B, C, D라고 하면,

 

A 컴포넌트는 Native C++로 제 Actor(HmCharacter)에 멤버변수로 미리 붙입니다.

그리고 나머지 B, C, D는 블루프린트로 붙여줍니다.

 

* C++ 클래스를 블루프린트에서 Component로 붙이기 위해서는 아래 구문이 필요합니다.

UCLASS(Blueprintable, Meta = (BlueprintSpawnableComponent))

 

Native C++은 블루프린트보다 먼저 실행되는 특징이 있기 때문에 이 방식으로 사용이 가능합니다.

그러면 B, C, D의 순서가 중요해질 것입니다.

 

그래서 Component들은 다중 상속으로 IGameFrameworkInitStateInterface를 상속받게 됩니다.

이 인터페이스는 GameInstance의 InitState를 편하게 관리하기 위한 클래스라고 생각하면 됩니다.

 

HmPawnExtensionComponent

 - OnRegister() 함수

  1. 컴포넌트나 액터가 생성되는 완전 초반에 실행되는 함수입니다.

  2. GetPawn<APawn>()을 통해 Pawn이 정상인지 확인하고, 등록을 진행합니다.

  3. 등록이란? 자신의 Owner를 키로 넣고 멤버로 FActorFeatureData에 자신의 정보를 저장합니다.

  4. FActorFeatureData 멤버함수에서 자신을 구분하기 위해 FeatureName을 지정하고, this 포인터를 Implementer에 저장합니다.

 

- BeginPlay() 함수

 1. BindOnActorInitStateChanged 함수를 통해 Delegate를 겁니다.

 2. BindOnActorInitStateChanged(NAME_None, FGameplayTag(), false) 형태로 등록하며, 1번째 인자가 NAME_None이면, Owner에 걸린 모든 컴포넌트들의 State Changed 이벤트를 관찰하겠다는 의미입니다.

 3. 2번째 인자가 특정 InitState가 아닌 FGameplayTag()로 전달되면 모든 상태 변경에 대해 관찰하겠다는 의미입니다.

 4. CheckDefaultInitialization() 함수에서 자신을 제외한 모든 컴포넌트들의 CheckDefaultInitialization()를 호출하며,

 5. InitState 4총사를 TArray로 묶어 ContinueInitStateChain의 인자로 넘겨주게 되는데, 이 과정에서 실패할때까지 InitState로의 변경에 대해 while문으로 지속적으로 시도하게 됩니다.

 6. 그로 인해 상태가 변경이 되면 2번의 BindOnActorInitStateChanged가 호출되게 되며, 변경이 이뤄지게 됩니다.

 

* 디버깅을 통해 FeatureName이 잘 들어가는지 확인

'Unreal Engine > [Inflearn_rookiss] UE5 Lyra 분석' 카테고리의 다른 글

9. Pawn Extension 및 Init State 내용 정리  (0) 2024.10.11
8. Pawn Extension_2  (0) 2024.10.08
6. InitState  (0) 2024.10.03
5. Experience Loading Complete  (0) 2024.10.02
4. Experience Manager Component  (1) 2024.09.30

댓글