使用Laya引擎开发3D微信小游戏的一些总结
本文同样最初发布在我的LOFTER,搬运至此。
2018年6月开始尝试将之前Unity3.5的一个3D老项目移植到微信小游戏平台上,在引擎方面也是选择了Laya,它是比Cocos和白鹭在对3D方面支持全面一些,但是他们文档和开发支持实在是无力吐槽,最终这个项目在2018年9月宣布放弃,但其中还是有一些知识需要总结。
一、在IDE中制作UI动画并在代码中调用
陈旧的官方文档中只以【.ani文件为例】讲述了动画的使用,但是对于ui文件,我们不需要做单独的动画文件,并且一般来讲都需要反复调用和控制,所以当完成动画的制作后,定义好动画名称,就可以在该ui文件的逻辑类里直接调用了。
二、微信开发者工具警告声音重载的问题
官方文档直接教授使用SoundManager进行声音播放,但是只要你在微信开发者工具调试就会发现有文件重复加载的警告,官方社区竟然还有人说不用管,可就是有音效被吞掉的情况发生。改法是使用H5通用的Audio类,Audio相关方法在Laya和微信环境都不会报错。
三、移植Unity带有物理效果和碰撞器的游戏
这个坑了我非常久,问题主要在于1版本引擎的初始化会由第三个参数默认将抗锯齿打开,但2版本的引擎示例是没有第三个参数的。如果你不跑带有物理引擎效果的demo还好,但如果你直接从1版本过来还想跑物理,就会被这个问题折腾的死去活来,反复检查是不是自己文件有问题。目前不明白为什么抗锯齿会和物理冲突,但解决方就是初始化引擎时不填第三个参数或设置为false。
四、UI界面的内存管理
这个是由于刚接触Laya引擎一段时间后发现的,可以将战斗内外,标题和不常用的ui界面图集分开,这样同时占用的内存就会小很多。
五、打包时的一些问题
· 使用ts语言开发时,打包一定要勾选【js文件混淆】,一是减少编译后的代码文件体积,而是避免js.map文件的报错
· 开发开放数据域项目时,不建议使用Cocos的分包加载策略,而是使用在game.json配置的方式,减少包体大小;另外开放域使用的资源不可打包成图集,按调用路径复制好即可
六、关于开放域,即排行榜绘制的额外总结。
参考文章https://blog.csdn.net/haibo19981/article/details/80435962,别笑,Laya相关文章太少了,只能去看Cocos的。
· 要在开放域绘制排行榜列表,而不是主域。
· 绘制后一定记得看看是否绑定过动画导致列表绘制不全。
· 调用wx相关API方法时,不能访问你自己的全局变量,即不能有this.xxx,否则报错,建议使用局部变量或静态变量。
· 绘制排行榜列表根据网速不同延迟有大有小,建议在添加数据之后再添加到舞台上。
· 开放数据域实际是个离屏,所以绘制出来以后不存在清除不清楚,只需移除舞台上的对象然后停止渲染即可:如果只停止渲染,会有相当大的延迟出现在关闭排行榜界面时,所以一定要在开放域先清除舞台再在主域停止渲染(通过发送消息)。
· 最新的微信库取同玩好友会将自己也同时取下来,就不用单独取自己的数据了。
以上,欢迎各位讨论补充,如有错误欢迎指正。