# 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)