Files
XCEngine/docs/api/XCEngine/Editor/Application/ReloadScriptingRuntime.md

93 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Application::ReloadScriptingRuntime
重新从当前项目的 `Library/ScriptAssemblies` 装载 Editor 脚本运行时。
```cpp
bool ReloadScriptingRuntime();
```
## 前置条件
- `Application` 已经持有有效 `EditorContext`
- `EditorContext::GetProjectPath()` 非空
如果当前还没有完成初始化,或者项目路径为空,当前实现会直接返回 `false`
## 当前行为
`ReloadScriptingRuntime()` 本身很薄,它做的事情只有两步:
1. 读取当前 project path
2. 调用内部 `InitializeScriptingRuntime(projectPath)`
真正的工作都在 `InitializeScriptingRuntime(...)` 里完成,而那个内部流程会先执行一次 `ShutdownScriptingRuntime()`。因此这不是“在旧 runtime 上增量刷新”,而是一次完整的“先卸下,再重新探测和装载”的重建过程。
## 返回值语义
当前返回值直接等于:
```cpp
m_scriptRuntimeStatus.runtimeLoaded
```
也就是说:
- 成功装载 `MonoScriptRuntime` 并注册到 `ScriptEngine` 时返回 `true`
- 只要最终没有可用 runtime就返回 `false`
## 失败路径
### 程序集缺失
如果当前项目的以下文件缺少任意一个:
- `Library/ScriptAssemblies/XCEngine.ScriptCore.dll`
- `Library/ScriptAssemblies/GameScripts.dll`
- `Library/ScriptAssemblies/mscorlib.dll`
当前实现会:
1. 清掉旧 runtime
2.`assemblyDirectory` 写入状态
3.`backendEnabled = true`
4.`assembliesFound = false`
5. 写入“程序集未找到”提示消息
6.`ScriptEngine` runtime 设为 `nullptr`
结果是编辑器继续可用,但脚本类发现与脚本字段编辑会退化。
### Mono 后端未启用
如果当前构建没有启用 `XCENGINE_ENABLE_MONO_SCRIPTING`
- `backendEnabled = false`
- `runtimeLoaded = false`
- `statusMessage` 会说明该 editor build 不包含 Mono scripting support
- 返回 `false`
### runtime 初始化失败
如果程序集存在,但 `MonoScriptRuntime::Initialize()` 失败:
- 旧 runtime 已经被清掉
- `statusMessage` 会保存底层错误文本
- `ScriptEngine` 仍然保持 `nullptr`
- 返回 `false`
## 调用方影响
这个方法的结果不会直接弹出错误框,而是通过 `EditorScriptRuntimeStatus` 暴露给上层 UI。当前主要消费方包括
- `ScriptComponentEditor`
- `ScriptComponentEditorUtils`
它们会据此决定是否显示 `Reload Scripts` / `Rebuild Scripts` 按钮,以及当前应展示什么提示文本。
## 相关文档
- [Application](Application.md)
- [RebuildScriptingAssemblies](RebuildScriptingAssemblies.md)
- [GetScriptRuntimeStatus](GetScriptRuntimeStatus.md)
- [EditorScriptRuntimeStatus](../Scripting/EditorScriptRuntimeStatus/EditorScriptRuntimeStatus.md)
- [ScriptEngine](../../Scripting/ScriptEngine/ScriptEngine.md)