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