声明:纯技术交流,任何利用该技术违反发布平台规则的行为与该帖子及作者无关。
运行版本:3.8.3。(由于使用时是早期版本,现在本人已转行,后续版本未及时测试和迭代,各位大神请自行发挥,2.4版本也有,仅js文件导出Lua引擎封装的区别,其他基本一致,看各位大佬反馈可以后续更新,比较佛系)
适用情况:由于是基于WebAssembly开发,因此只支持H5平台,目前不支持原生开发,适用于一定情况下在H5平台的代码热更新。
首先介绍一下wasmoon工具:https://github.com/ceifa/wasmoon
是一名老外工程师基于WASM技术制作的可被JS的WebAssembly库加载的lua虚拟机。web端教程可以参考:https://www.youtube.com/watch?v=x2dgallze1U
这位博主已经将基础使用情况说的很清晰。我这边只是以此为基础我将其引入到cocos引擎当中。解决了一些加载和使用上的问题。更多的是框架设计让其适用于游戏开发。
测试展示:
展示内容都在lua代码中。
框架设计的原理为启动时首先初始化lua虚拟机,从远程下载lua脚本并挂入虚拟机内,lua脚本可以是单独文件也可以是压缩包,大致代码如下:
具体框架核心设计是在BaseComponent类中,可以做到拖拽.txt或者.lua文件直接展示路径,该路径作为后续lua中文件require路径依据,可以根据个人或项目情况自行分文件路径加载,略微修改即可。示例请看Title和Title2这两个prefab, 组建如图
以此为基础可以作为预制体基本脚本骨骼,下拉框可以选定node类型,方便识别,未选择可以输入自定义类型。该类集成了Cocos最基础的几个生命周期,onLoad, start, update等,可以支持在Lua层开发,一键拖拽傻瓜式开发。入口scene在helloworld中。常用的静态方法和工具类可以通过反射注册从TS层直接注册,lua中以同样方式调用即可
关于Wasmoon的安装,我已经从node包中将其提出,单独通过导入方式加载,因为其中的js文件需要一定的修改,具体可以自行npm安装后进行对比。至于某些平台缺失的封装比如URL之类的在胶水文件index.js中需要使用的情况,网上已经有很成熟的解决方式,写好js脚本或者直接作为插件在系统运行前加载即可解决,不多赘述。
已在某平台开发者工具中实测,本来有已经完善的项目示例,其解决了上述所说的问题,不过工程项目不知道放哪里了只找到目前这个初版的,问题不大相信大家很容易能解决相关问题。
源码内容已上架商店审核,完全开源,有需要可以自取。
已上传网盘,商城链接审核还在修正中。
网盘链接:https://pan.baidu.com/s/1C2X3pFnV3rtmXWyS0T7dhg
提取码:bt23
安装注意事项:lua虚拟机的glue.wasm文件放在了根目录的luaengine目录下,请将其部署在自己的服务器上,如果没有用nodejs部署一个本地服务器即可,在代码中LuaEngineMgr.ts中第26行为远程加载逻辑,请根据代码修正为自己服务器以及该文件正确地址。操作点击lua测试按钮即可远程加载该wasm虚拟机并执行相应逻辑。如果没有部署或者网络有问题则会报错。










