1. InitState_Spawned는 소환된 상태, 즉 Pawn이 존재한다는 것을 보장합니다.
즉 이 시점에는 Pawn을 참조하는 코드를 사용해도 안전하다는 것을 의미합니다.
2. InitState_DataAvailable은 PlayerController의 존재를 보장합니다.
3. InitState_DataInitialized는 자신을 포함한 모든 Component의 State가 InitState_DataAvailable 상태임을 보장합니다.
*InitState_GameplayReady는 아직 자세하게 다루지 않았기 때문에 생략.
앞으로의 강의에서는 각 State마다 상태에 맞는 Component를 집어 넣는 과정에 대한 내용이며,
다음 이어지는 강의는 Camera부터 부착 진행됩니다.
이번 강의에서 흥미로웠던 부분은 2번 PlayerController를 보장하기 위한 부분인데,
PlayerController는 플레이어를 움직이는 역할의 Component이며, 유저의 키입력을 대신 받아 처리하게 됩니다.
다만 이 PlayerController가 존재하려면 Possess(방의) 상태여야 합니다.
Possess 상태에서는 PlayerController가 부착되게 되고, 키 입력에 따른 움직임을 실행합니다.
PlayerController 상태를 보장하기 위해 SetupPlayerInputComponent 함수를 이용하게 되는데,
Character의 이 함수가 완료되었다는 것은 빙의가 완료되었고 키 입력을 준비하겠다는 의미힙니다.
따라서 Character의 SetupPlayerInputComponent를 오버라이딩하여 내부에 아래와 같이 구현합니다.
// Called to bind functionality to input
void AHmCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
// 이 시점에선 반드시 PlayerController가 존재한다!
PawnExtComponent->SetupPlayerInputComponent();
}
Super::SetupPlayerInputComponent()가 호출된 이후이기 때문에 PawnExtComponent가 호출되는 시점에서는 PlayerController가 존재한다는 계산이 나옵니다.
PawnExtensionComponent에서 상속받은 SetupPlayerInputComponent가 하는 일은 단순히 CheckDefaultInitialization를 호출해주는 일이었습니다.
CheckDefaultInitialization를 호출하면 본인을 제외한 다른 노드들에서 업데이트를 진행합니다.
void UHmPawnExtensionComponent::CheckDefaultInitialization()
{
// 자신을 제외한 연결된 컴포넌트들의 CheckDefaultInitialization을 전부 호출한다
CheckDefaultInitializationForImplementers();
const FHmGameplayTags& InitTags = FHmGameplayTags::Get();
static const TArray<FGameplayTag> StateChain = {
InitTags.InitState_Spawned,
InitTags.InitState_DataAvailable,
InitTags.InitState_DataInitialized,
InitTags.InitState_GameplayReady,
};
// 내부에서 While문으로 각 상태에 대해 CanChangeInitState를 계~속 호출한다
ContinueInitStateChain(StateChain);
}
CheckDefaultInitializationForImplementers(); 함수는 자신을 제외한 나머지 컴포넌트들에 대해 CheckDefaultInitialization를 호출하는 함수입니다.
'Unreal Engine > [Inflearn_rookiss] UE5 Lyra 분석' 카테고리의 다른 글
11. Camera Blending과 Update (1) | 2024.10.13 |
---|---|
10. Camera의 부분적 구현 (0) | 2024.10.12 |
8. Pawn Extension_2 (0) | 2024.10.08 |
7. Pawn Extension (1) | 2024.10.07 |
6. InitState (0) | 2024.10.03 |
댓글