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

2.7 KiB
Raw Blame History

Mono

命名空间: XCEngine::Scripting

类型: submodule

描述: 收纳基于 Mono 的托管脚本运行时实现。

概览

docs/api/XCEngine/Scripting/Mono 对应 engine/include/XCEngine/Scripting/Mono 子目录。它不是独立命名空间,而是脚本模块按后端实现拆出来的子目录。

当前这里唯一的公开类型是 MonoScriptRuntime。它负责:

  • 初始化 Mono root domain 和 app domain。
  • 解析 MonoScriptRuntime::Settings,推导程序集目录、脚本核心程序集和游戏程序集路径。
  • 加载 XCEngine.ScriptCore.dllGameScripts.dll
  • 发现应用程序集中的非抽象 MonoBehaviour 子类,并缓存支持的公共实例字段与生命周期方法。
  • ScriptComponent 创建托管实例,注入 GameObject/ScriptComponent 上下文,并在生命周期后同步字段。

为什么单独分目录

把 Mono 运行时放进独立子目录,而不是直接塞进 Scripting 根目录,有两个直接好处:

  • 可以清楚区分“脚本系统公共契约”和“具体后端实现”。
  • 以后如果接入别的脚本后端,这里天然就是平行扩展点。

程序集来源

当前 Mono 后端既支持测试程序集目录,也支持项目资产脚本程序集目录:

  • managed/CMakeLists.txt 会构建基础 XCEngine.ScriptCore.dllGameScripts.dll
  • 同一份 CMake 还会把 project/Assets/**/*.cs 编译到 project/Library/ScriptAssemblies/GameScripts.dll
  • tests/scripting/test_project_script_assembly.cpp 已验证运行时能从项目程序集目录发现 ProjectScripts.ProjectScriptProbe 及其默认字段值。

当前实现边界

  • 当前只实现了 Mono 后端,没有并列的 IL2CPP、Lua 或自研 VM 后端。
  • 目录里只有一个 public header说明当前重点仍然是把一条 Mono 托管链路跑通。
  • 类发现只扫描当前应用程序集里的非抽象 MonoBehaviour 子类,不会把工具类或抽象基类暴露给脚本绑定 UI。
  • 字段发现只接受受支持类型的 publicstatic 实例字段。
  • internal call 目前已覆盖 GameObjectTransformCameraLightMeshFilterMeshRenderer、日志和时间桥接,但远不是完整编辑器级脚本 API 面。

头文件

相关指南

相关文档