写在前面
经过一段时间的改进, 后来用 QuickJS 代替了 duktape 另外实现了一个 unity-jsb, 此项目修正了若干 unity-duktape 实现上的问题和BUG, 且运行效率更高.
本文介绍的插件 duktape-unity 可以使你在 Unity3D 中使用 javascript/typescript 来写脚本. 这里说的脚本是指可以在包括iOS上动态执行的脚本. 目前主流的选择是 lua 和 ILRuntime(C#), 都是很成熟的方案. typescript 或许可以是介于两者之间的一种选择, 即有动态脚本语言的特性, 又有强类型的辅助.
概况
duktape-unity 的使用方法与 slua/ulua 等是类似的, 通过生成绑定代码并对部分值类型进行特定优化来提高交互效率. 并针对 js 的使用习惯, 做了一些 js 风格的封装, 例如事件/委托的封装, 有两种方式在 js 中将 js 函数注册到 C# 事件/委托上 (这里均以 ts 为例):
// 方法一, 直接注册 js 函数
UnityEngine.Application.lowMemory.on(() => {
console.log("low memory");
});
// 方法二, 构造一个 Delegate 对象进行注册, 这种方式 Delegate 对象本身就是一个 Dispatcher, 可以自己再 on/off 多个响应者
let delegate = new DuktapeJS.Delegate0();
delegate.on(this, () => {
console.log("low memory")
});<