93 lines
2.7 KiB
Markdown
93 lines
2.7 KiB
Markdown
# 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)
|