2.2 KiB
2.2 KiB
NullScriptRuntime
命名空间: XCEngine::Scripting
类型: class
头文件: XCEngine/Scripting/NullScriptRuntime.h
描述: IScriptRuntime 的空实现,用作无托管环境时的默认兜底后端。
概览
NullScriptRuntime 的作用不是执行脚本,而是让整个脚本系统在“没有真实脚本后端”的情况下仍然保持接口闭合:
ScriptEngine仍然可以安全持有一个运行时对象。- 场景和脚本组件的原生数据层仍然可以工作。
- 测试或工具链不需要为“没有运行时时指针为空”额外兜底。
这是一种很典型的 Null Object 模式,在商业引擎底层模块中很常见。
当前实现行为
- 运行时启停是 no-op。
- 元数据查询总是失败,并清空输出数组。
- 托管写字段总是返回
true,相当于“我接受这个请求,但没有实际后端可写”。 - 托管读字段总是返回
false。 - 同步字段是 no-op。
- 创建实例时,只要
context.component非空就返回true。 - 销毁实例和生命周期调用都是 no-op。
设计代价
这种兜底方案能让主流程更简单,但也意味着:
- “返回成功”不一定真的代表有托管实例存在。
- 如果用户误以为自己接了真实脚本后端,问题会更偏逻辑层而不是崩溃层暴露出来。
因此文档必须清楚说明它是占位运行时,而不是简化版脚本解释器。
公开方法
| 方法 | 说明 |
|---|---|
| OnRuntimeStart | 空实现。 |
| OnRuntimeStop | 空实现。 |
| TryGetClassFieldMetadata | 始终失败并清空输出。 |
| TrySetManagedFieldValue | 始终返回 true。 |
| TryGetManagedFieldValue | 始终返回 false。 |
| SyncManagedFieldsToStorage | 空实现。 |
| CreateScriptInstance | 仅检查组件指针是否存在。 |
| DestroyScriptInstance | 空实现。 |
| InvokeMethod | 空实现。 |