오늘은 ACMGameStateBase의 클라이언트 로딩 시퀀스 구조를 구현했습니다. 이 클래스는 게임 시작 시점에서 클라이언트 초기화 과정을 n단계로 분리해 관리하며, 모든 동기화 대상 컴포넌트가 준비된 뒤 순차적으로 로딩 이벤트를 브로드캐스트하는 로직을 가지고 있습니다.
Source/CrimsonMoon/Public/Game/CMGameStateBase.h Source/CrimsonMoon/Private/Game/CMGameStateBase.cppDECLARE_MULTICAST_DELEGATE) 으로 블루프린트 바인딩 불가.SyncedComponentMap: TMap<FName, int8> → 0: 미완료 / 1: 완료 SyncedComponentCount: 완료된 컴포넌트 수 RegisterSyncedComponents(): 초기 등록 (현재 "PlayerController" 1개만 포함)FOnLoadBegin OnLoadBegin FOnLoadUI OnLoadUI FOnLoadCompleted OnLoadCompleted| 메서드 | 설명 |
|---|---|
NotifyComponentSynced(FName) | 해당 컴포넌트 완료 처리 → 전체 완료 시 StartClientLoadSequence() 호출 |
StartClientLoadSequence() | 다음 틱에 HandleLoadBegin() 예약 |
HandleLoadBegin() | OnLoadBegin.Broadcast() → 다음 틱에 HandleLoadUI() |
HandleLoadUI() | OnLoadUI.Broadcast() → 다음 틱에 HandleLoadCompleted() |
HandleLoadCompleted() | OnLoadCompleted.Broadcast() |
(모든 컴포넌트 완료)
↓
[NextTick] → OnLoadBegin
↓
[NextTick] → OnLoadUI
↓
[NextTick] → OnLoadCompleted

Sync가 모두 완료된 후 차례대로 Load 메소드를 실행하는 것을 볼 수 있습니다.
이번 분석을 통해 ACMGameStateBase가 틱 단위로 분리된 로딩 시퀀스 제어 구조를 통해 안정적으로 초기화를 수행함을 확인했습니다. 다만, 중복 호출 방지·리셋 로직·블루프린트 연동 부분의 보완이 필요함을 느꼈습니다.