跳到主要内容

Editor 与 Player

附录。发布清单亦可参阅 构建。ZTS 双后端:JS 可见语义必须一致;实现路径不同。

Editor (Mono)Player (Il2Cpp)
状态日常开发与冒烟发布路径(Win64 等见 项目状态
实现Expression Emit + exotic 绑定C++ zts-runtime + native 桥
引擎Plugins/quickjs 动态库(DllImport("quickjs")QuickJS 源码静态编入 Il2Cpp(ZTS~/quickjs-il2cpp
C#→JSTsAppDomain.GetFunction<T> + Delegate 桥同左
JS→C#懒绑定 / csharp:同左(须 Generate)
脚本加载常读工程旁 JsScripts / TsProject/outStreamingAssets/JsStreamingAssets/ZTS
GenerateEditor 日常迭代 不必 每次必须 ZTS/Generate/All(C++ stub,非 C# Wrap)
JS 调试器可选 Host Hook(见 JS 调试器本规范不覆盖真机 attach
TS 闸门进 Play 可跑 tsc --noEmit出包前可选再检;运行时 .ts

详见 Mono 实现Il2Cpp 实现双运行时

语义一致

Event、Marshal、类型访问、strict miss、方法 this 绑定等以 规范 为准。两端均 Event 专用对象(只用 add_ / remove_);实例方法均为 obj.Method(args)(无冒号);未知成员均为 throw Error('zts: …')

同一门面

业务代码只面对 TsAppDomain

TsAppDomain.Initialize(loader);
var add = TsAppDomain.GetFunction<Func<int, int, int>>("app", "add");

首次 Initialize / GetFunction 时按环境反射创建后端(Editor → ZTS.Mono,Player → ZTS.Il2Cpp)。不要在业务里直接依赖 Mono/Il2Cpp 程序集。

性能与迭代

阶段建议
日常改脚本Editor Play;纯 JS 或 TS emit
测性能 / 发版Il2Cpp Player 为准
换 Unity / QuickJS pin重跑 Install → Generate

Editor 便于断点与快速迭代;热路径分配、桥接开销请在 Player 上测。

Player 发布检查清单

  • Install(本地 libil2cpp / quickjs / zts 树存在)
  • 执行 ZTS/Generate/All
  • 纯 JS 已 Sync 到 StreamingAssets;或 TS 已 emit 并拷贝到 StreamingAssets/ZTS/
  • Build Settings → Il2Cpp → 目标平台
  • 冒烟:InitializeGetFunction、JS→C#;勿用废弃 Event 糖语法
  • 对照 兼容性矩阵

常见踩坑

现象处理
Editor 正常、Player 无脚本未 Sync / 未拷贝 emit;loader 路径不一致
Player 类型/成员缺失未 Generate,或 typings 集与 Generate 不同源
Editor 有调试、Player 没有预期行为;调试器仅 Editor Mono
行为不一致对照 spec;提 Issue 并附最小复现

学习路径

上一篇排障
下一篇

相关文档