36 lines
1.1 KiB
Markdown
36 lines
1.1 KiB
Markdown
# ScriptEngine::OnRuntimeStart
|
||
|
||
**命名空间**: `XCEngine::Scripting`
|
||
|
||
**类型**: `method`
|
||
|
||
**头文件**: `XCEngine/Scripting/ScriptEngine.h`
|
||
|
||
## 签名
|
||
|
||
```cpp
|
||
void OnRuntimeStart(Components::Scene* scene);
|
||
```
|
||
|
||
## 当前实现流程
|
||
|
||
按 `engine/src/Scripting/ScriptEngine.cpp`:
|
||
|
||
1. 先调用 `OnRuntimeStop()` 清理旧运行时。
|
||
2. 如果 `scene == nullptr`,直接返回。
|
||
3. 记录 `m_runtimeScene`,置 `m_runtimeRunning = true`。
|
||
4. 调用当前运行时 `m_runtime->OnRuntimeStart(scene)`。
|
||
5. 订阅 `scene->OnGameObjectCreated()`,保证运行中创建的新对象也会被脚本系统追踪。
|
||
6. 递归收集场景现有的所有 `ScriptComponent`。
|
||
7. 对满足 `ShouldScriptRun()` 的组件调用 `EnsureScriptReady(..., true)`,从而创建实例并触发 `Awake / OnEnable`。
|
||
|
||
## 设计重点
|
||
|
||
- 这一步不会直接触发 `Start`;`Start` 留到第一次 `OnUpdate()` 再补发。
|
||
- 订阅场景创建事件,保证 runtime-spawn 出来的对象不会漏掉脚本初始化。
|
||
|
||
## 相关文档
|
||
|
||
- [OnRuntimeStop](OnRuntimeStop.md)
|
||
- [OnUpdate](OnUpdate.md)
|