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

57 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Mono
**命名空间**: `XCEngine::Scripting`
**类型**: `submodule`
**描述**: 收纳基于 Mono 的托管脚本运行时实现。
## 概览
`docs/api/XCEngine/Scripting/Mono` 对应 `engine/include/XCEngine/Scripting/Mono` 子目录。它不是独立命名空间,而是脚本模块按后端实现拆出来的子目录。
当前这里唯一的公开类型是 [MonoScriptRuntime](MonoScriptRuntime/MonoScriptRuntime.md)。它负责:
- 初始化 Mono root domain 和 app domain。
- 解析 `MonoScriptRuntime::Settings`,推导程序集目录、脚本核心程序集和游戏程序集路径。
- 加载 `XCEngine.ScriptCore.dll``GameScripts.dll`
- 发现应用程序集中的非抽象 `MonoBehaviour` 子类,并缓存支持的公共实例字段与生命周期方法。
-`ScriptComponent` 创建托管实例,注入 `GameObject`/`ScriptComponent` 上下文,并在生命周期后同步字段。
## 为什么单独分目录
把 Mono 运行时放进独立子目录,而不是直接塞进 `Scripting` 根目录,有两个直接好处:
- 可以清楚区分“脚本系统公共契约”和“具体后端实现”。
- 以后如果接入别的脚本后端,这里天然就是平行扩展点。
## 程序集来源
当前 Mono 后端既支持测试程序集目录,也支持项目资产脚本程序集目录:
- `managed/CMakeLists.txt` 会构建基础 `XCEngine.ScriptCore.dll``GameScripts.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。
- 字段发现只接受受支持类型的 `public``static` 实例字段。
- internal call 目前已覆盖 `GameObject``Transform``Camera``Light``MeshFilter``MeshRenderer`、日志和时间桥接,但远不是完整编辑器级脚本 API 面。
## 头文件
- [MonoScriptRuntime](MonoScriptRuntime/MonoScriptRuntime.md) - `MonoScriptRuntime.h`
## 相关指南
- [Scripting Runtime And Field Model](../../../_guides/Scripting/Scripting-Runtime-And-Field-Model.md)
- [Project Script Assembly And Field Sync](../../../_guides/Scripting/Project-Script-Assembly-And-Field-Sync.md)
## 相关文档
- [Scripting](../Scripting.md)
- [IScriptRuntime](../IScriptRuntime/IScriptRuntime.md)