69 lines
2.4 KiB
Markdown
69 lines
2.4 KiB
Markdown
|
|
# Application::GetScriptRuntimeStatus
|
||
|
|
|
||
|
|
返回当前脚本运行时状态结构的只读引用。
|
||
|
|
|
||
|
|
```cpp
|
||
|
|
const EditorScriptRuntimeStatus& GetScriptRuntimeStatus() const;
|
||
|
|
```
|
||
|
|
|
||
|
|
## 返回内容
|
||
|
|
|
||
|
|
返回值指向 `Application` 内部持有的 `m_scriptRuntimeStatus`,不会复制状态结构。
|
||
|
|
|
||
|
|
当前结构体包括:
|
||
|
|
|
||
|
|
- `backendEnabled`
|
||
|
|
- `assembliesFound`
|
||
|
|
- `runtimeLoaded`
|
||
|
|
- `assemblyDirectory`
|
||
|
|
- `statusMessage`
|
||
|
|
|
||
|
|
字段的详细语义见 [EditorScriptRuntimeStatus](../Scripting/EditorScriptRuntimeStatus/EditorScriptRuntimeStatus.md)。
|
||
|
|
|
||
|
|
## 生命周期语义
|
||
|
|
|
||
|
|
因为返回的是引用而不是快照,所以调用方需要把它当成“当前帧状态视图”而不是稳定持久对象。
|
||
|
|
|
||
|
|
当前这些操作都会刷新或重置这份状态:
|
||
|
|
|
||
|
|
- `InitializeScriptingRuntime(...)`
|
||
|
|
- [ReloadScriptingRuntime](ReloadScriptingRuntime.md)
|
||
|
|
- [RebuildScriptingAssemblies](RebuildScriptingAssemblies.md)
|
||
|
|
- `SwitchProject(...)`
|
||
|
|
- `ShutdownScriptingRuntime()`
|
||
|
|
|
||
|
|
因此上层 UI 更适合“读取后立即渲染”,而不是长期缓存这份引用。
|
||
|
|
|
||
|
|
## 当前使用方式
|
||
|
|
|
||
|
|
这份状态当前最主要的用途不是给底层脚本系统消费,而是给编辑器 UI 做降级和提示判断,例如:
|
||
|
|
|
||
|
|
- 当前是否应显示 `Reload Scripts`
|
||
|
|
- 当前是否应显示 `Rebuild Scripts`
|
||
|
|
- 当前没有脚本类可选时应提示“后端禁用”“程序集缺失”还是“运行时初始化失败”
|
||
|
|
|
||
|
|
相关判断主要封装在 `ScriptComponentEditorUtils` 中。
|
||
|
|
|
||
|
|
## 设计含义
|
||
|
|
|
||
|
|
把脚本运行时状态作为一个轻量只读结构暴露出来,有两个直接好处:
|
||
|
|
|
||
|
|
1. `Application` 仍然掌握真正的生命周期控制权
|
||
|
|
2. Inspector / 菜单 / 按钮逻辑不需要了解 `MonoScriptRuntime` 的细节
|
||
|
|
|
||
|
|
这让上层 UI 可以基于状态做产品化反馈,而不是直接探查底层脚本后端对象。
|
||
|
|
|
||
|
|
## 当前限制
|
||
|
|
|
||
|
|
- 这不是线程安全快照,应按主线程 / UI 线程读。
|
||
|
|
- 状态里只保存“当前 editor 观察到的脚本可用性”,不是完整诊断报告。
|
||
|
|
- 构建失败文本和 runtime 初始化失败文本都会复用 `statusMessage` 这一条字符串通道。
|
||
|
|
|
||
|
|
## 相关文档
|
||
|
|
|
||
|
|
- [Application](Application.md)
|
||
|
|
- [ReloadScriptingRuntime](ReloadScriptingRuntime.md)
|
||
|
|
- [RebuildScriptingAssemblies](RebuildScriptingAssemblies.md)
|
||
|
|
- [EditorScriptRuntimeStatus](../Scripting/EditorScriptRuntimeStatus/EditorScriptRuntimeStatus.md)
|
||
|
|
- [ScriptComponentEditorUtils](../ComponentEditors/ScriptComponentEditorUtils/ScriptComponentEditorUtils.md)
|