InitState 系统完整流程图
A[组件 OnRegister] --> B[RegisterInitStateFeature 注册到系统]
B --> C[BeginPlay]
C --> D[TryToChangeInitState 切换到 Spawned 状态]
D --> E[CheckDefaultInitialization]
E --> F[ContinueInitStateChain 尝试推进状态链]
F --> G{CanChangeInitState? >条件满足吗?}
G -->|是 | H[系统切换状态]
G -->|否 | I[等待条件满足]
H --> J[HandleChangeInitState 执行实际初始化逻辑]
J --> K[触发 OnActorInitStateChanged 通知监听者]
K --> L[其他组件收到通知 调用自己的 CheckDefaultInitialization]
L --> F
I --> M[依赖事件触发<br/>如 OnRep_PawnData]
M --> N[再次调用<br/>CheckDefaultInitialization]
N --> F
初始状态(无)
↓
├─ TryToChangeInitState(Spawned)
│ └─ CanChangeInitState(..., Invalid, Spawned) → true
│ └─ HandleChangeInitState(..., Invalid, Spawned)
│
▼
Spawned(已生成)
↓
├─ CheckDefaultInitialization() → ContinueInitStateChain()
│ └─ CanChangeInitState(..., Spawned, DataAvailable)
│ ├─ 检查:PawnData? ✓ Controller? ✓
│ └─ 返回 true
│ └─ HandleChangeInitState(..., Spawned, DataAvailable)
│
▼
DataAvailable(数据可用)
↓
├─ 等待所有依赖特征都达到 DataAvailable
│ └─ CanChangeInitState(..., DataAvailable, DataInitialized)
│ └─ Manager->HaveAllFeaturesReachedInitState(...)
│ └─ HandleChangeInitState(..., DataAvailable, DataInitialized)
│ └─ 初始化 AbilitySystem, Input 等
│
▼
DataInitialized(数据已初始化)
↓
├─ CanChangeInitState(..., DataInitialized, GameplayReady) → true
│ └─ HandleChangeInitState(..., DataInitialized, GameplayReady)
│
▼
GameplayReady(游戏就绪)