unity-jsb 简介

unity-jsb 是基于 QuickJS 实现的 Unity 脚本语言,支持 TypeScript 和 JavaScript,提供了对最新 ES2020 标准、运算符重载、异步调用(包括 await/async 和 Task)、WebSocket、XMLHttpRequest 等功能。此外,还实现了 MonoBehaviour 的 JS 支持和代码热更新(hotfix)。目前,该项目已完成约 70%,并提供部分文档和类型提示。尽管缺少 Debugger 支持和多线程功能,但它为 Unity 游戏开发提供了一种新的脚本选择。
摘要由CSDN通过智能技术生成

经过之前 duktape-unity 的开发, 在自己的小项目中使用, 总结下来主要有几个问题:

  1. Duktape 对 JS 新标准的支持有限, 不支持 await/async, Promise 也不是 Duktape 直接支持的, 诸如此类特性的缺失写起脚本来始终是有点遗憾的
  2. 标准 JS 本身不支持运算符重载, 这让 Vector3 + Vector3 等在 C# 中写起来非常自然的运算在 JS 中用起来略显不便
  3. 运行效率相对略低

后来发现 QuickJS 基本可以弥补上述缺陷, 不但支持到最新ES2020的标准, 还支持运算符重载, 效率更是可以接近 Lua (非JIT), 唯一可惜的是 QuickJS 目前还没有 Debugger API 支持, 但毕竟是暂时还没有, 不能阻止我们先用先爽 😃

于是我就继续在 duktap-unity 的基础上, 将 Duktape 替换成 QuickJS, 做了这里要介绍的 unity-jsb. 还没有全部完成所有预期功能, 仍处于玩具级, 欢迎大家交流指导 (QQ群 859823032).

特性支持

  • 支持在JS异步函数中等待 Unity YieldInstruction 对象
  • 支持在JS异步函数中等待 System.Threading.Tasks.Task 对象 (limited support)
  • 向 JS 导入 C# 运算符重载 +, -, *, /, ==, -(负)
  • 支持 Websocket (limited support)
  • [初步] 支持 XMLHttpRequest (limited support)
  • [初步] 未导出的类型通过反射方式进行 C#/JS 交互
  • [初步] 支持 C# 代码热更 (hotfix, limited support)
  • [未完成] 支持 JS 字节码 (QuickJS)
  • [未完成] Webpack HMR 运行时模块热替换 (可能会放弃, limited support, for development only)

特性示例

推荐使用 typescript 编写脚本, unity-jsb 对导出的 C# 类型自动生成了对应的 d.ts 声明, 以提供强类型辅助. 示例代码均使用 typescript.

也可以根据喜好选择 coffeescript/clojurescript 等任何可以编译成 javascript 的语言. 最终运行的都是 javascript.

MonoBehaviour in Javascript

支持 JS class 直接继承 MonoBehaviour, 所有响应函数支持 JS 异步函数.

不建议大规模使用这种方式, 毕竟交互开销还是不能忽视的, 进入 JS 运行时后尽量减少 JS/C# 交互还是性能优化的重点之一.

class MyClass extends UnityEngine.MonoBehaviour {
   
    protected _tick = 0;

    Awake() {
   
        console.log("MyClass.Awake", this._tick++);
    }

    async OnEnable() {
   
        console.log("MyClass.OnEnable", this._tick++);
        await jsb.Yield(new UnityEngine.WaitForSeconds(1));
        console.log("MyClass.OnEnable (delayed)", this._tick++);
    }

    OnDisable() {
   
        console.log("MyClass.OnDisable", this._tick++);
    }

    OnDestroy() {
   
        console.log("MyClass.OnDestroy", this._tick++);
    }

    async test() {
   
        console.log("MyClass.test (will be destroied after 5 secs.", 
Vue-Unity-WebGL 是一个具有极高可扩展性和灵活性的 Unity3D web 端开发框架,它将 Vue.jsUnity Web Player 和 WebGL 等技术相结合,为开发者提供了最佳的解决方案。 Vue-Unity-WebGL 框架具有很高的兼容性和易用性,开发者可以更加灵活地应用该框架来定制自己的项目。由于该框架具备了许多优秀的特性,如自适应布局、多平台支持等,使得开发者可以轻松地实现用户体验和开发效率的提升。此外,Vue-Unity-WebGL 框架不仅提供了可视化开发工具,还提供了完整的运行环境,为开发者提供了优秀的开发体验。 Vue-Unity-WebGL 框架的另一个重要特点是其大量的插件与扩展功能,这些插件和扩展可以为项目的开发和管理提供坚强的技术支持。比如,通过 vue-router 可以控制路由,Vue-Unity-WebGL 可以协作处理组件数据和 Unity3D 渲染等复杂的操作,而 Vuex 则可以使开发者方便地处理应用数据流和组件状态的管理。这些插件和扩展功能极大地提高了 Vue-Unity-WebGL 框架的可扩展性和灵活性,使得开发者可以更加容易地进行定制。 综上所述,Vue-Unity-WebGL 框架是一个快速、可靠且强大的解决方案,这使得开发者能够轻松地编写出高质量的 Unity3D web 应用程序。该框架具有大量的功能,实现可扩展性、灵活性、易用性和可维护性,比其他框架更具有竞争力。在未来的发展中,Vue-Unity-WebGL 框架将会被更多的开发者喜爱和应用,并在技术社区中拥有更广泛的影响力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值