Files
XCEngine/docs/api/XCEngine/Scripting/NullScriptRuntime/NullScriptRuntime.md

2.6 KiB

NullScriptRuntime

命名空间: XCEngine::Scripting

类型: class

头文件: XCEngine/Scripting/NullScriptRuntime.h

描述: IScriptRuntime 的空实现,用作无托管环境时的默认兜底后端。

概览

NullScriptRuntime 的职责不是执行脚本,而是在“没有真实托管环境”时维持脚本系统接口闭合:

  • ScriptEngine 默认就持有它,因此不会出现运行时指针为空的问题。
  • ScriptComponentScriptFieldStorage、场景序列化和字段编辑流程都仍然可以工作。
  • 编辑器或测试可以先走完整的脚本数据链路,再按需接入真实 Mono 后端。

这是标准的 Null Object 模式,但它的“成功”语义必须按真实实现理解。

当前实现行为

  • 运行时启停是 no-op。
  • 可用脚本类查询总是失败,并清空输出数组。
  • 元数据查询总是失败,并清空输出数组。
  • 默认值查询总是失败,并清空输出数组。
  • 托管写字段总是返回 true,相当于“我接受这个请求,但没有实际后端可写”。
  • 托管读字段总是返回 false
  • 同步字段是 no-op。
  • 创建实例时,只要 context.component 非空就返回 true
  • 销毁实例和生命周期调用都是 no-op。

设计代价

这种兜底方案能让主流程更简单,但也意味着:

  • “返回成功”不一定真的代表有托管实例存在。
  • 如果用户误以为自己接了真实脚本后端,问题会更偏逻辑层而不是崩溃层暴露出来。

因此文档必须清楚说明它是占位运行时,而不是简化版脚本解释器。

公开方法

方法 说明
OnRuntimeStart 空实现。
OnRuntimeStop 空实现。
TryGetAvailableScriptClasses 始终失败并清空输出。
TryGetClassFieldMetadata 始终失败并清空输出。
TryGetClassFieldDefaultValues 始终失败并清空输出。
TrySetManagedFieldValue 始终返回 true
TryGetManagedFieldValue 始终返回 false
SyncManagedFieldsToStorage 空实现。
CreateScriptInstance 仅检查组件指针是否存在。
DestroyScriptInstance 空实现。
InvokeMethod 空实现。

相关文档