42. 2022-01-08周总结

这周两个项目终于有点进展

1. 休闲游戏转微信小游戏

小游戏最近最近一直卡在内存问题上没什么进展,比较头大。

这周在找了一个其他的比较大的MMO游戏《热血神剑》的内存进行分析了下,发现它再编译完之后的内存再500M~600左右,并且之后内存也能稳定在900~1G多,但是我们的游戏编译完之后内存就达到了800M,相差了200M+。

因为这一块的内存跟游戏逻辑没有太大关系,所以我觉得我们是可以以它这的这一内存水位作为目标去做。

编译完的内存主要跟编译出来的wasm大小有关系,而我们编译出来的wasm有38M+,还是比较大的。

查了下资料有几个方向可以做:

  1. 删除无用的第三方插件
  2. strip级别调整
  3. 关闭异常捕获

删除无用第三方插件

我们对游戏中用到的插件(这里用到的插件包括手动代码引入,plugins下的dll还有package manager中的插件)重新整理,删除一些用的比较少或者根本没用的插件,这一块降了几M,其中有个Best Http插件降得最多,快2M

另外一个技巧我不知道其他项目是否适用,我们新建了一个工程,把Asset所有内容拷贝到这个新项目,编译出来的wasm大小也少了几M,不知道是少了哪个插件导致的。

strip级别调整

  1. 勾选strip engine code
  2. strip级别调整到最高

这两个都会导致运行期找不到对应类的问题,因为unity不能自动识别出预制体上绑定的脚本,导致这些脚本也会被过滤掉。这种情况下可以通过link.xml来手动把这些脚本设置为不过滤,这一块减少了大量的wasm大小,大概有5M以左右,内存减少了估计有40M+

关闭异常捕获

这一块我们关闭之后代码减少了2M,内存减少了60M,但是关了之后会导致比较多的问题,最大的问题就是DOTween安全模式没用了,一但出现异常整个游戏直接崩溃,而我们游戏会报大量的这种问题,排查起来比较困难。所以我们又把这个异常捕获开起来。

反思:DOTween报的安全模式警告要提高重视,出现了要及时解决。

整体优化完之后我们wasm大小从38M+优化到了26,编译的内存从之前的800MB,降到了510M,整个优化还是比较明显的,内存算是有了一个突破性的进展,这个内存也可以作为一个参考线,以后其他游戏要转也需要做到这个水平。

但是我们游戏逻辑可能有资源泄露问题,优化之后第一次进入游戏内存在750M左右,但是随着游戏不断玩,内存也不断增多,后面会增加到1.3G左右,然后后面就崩溃了,这个问题不解决的话,我们前期再怎么优化内存也没用。

2. 3D项目

这周牵头把客户端技能表现迁移到新版技能上,包括之前同事写的血条,飘字,战斗UI,以及我重构之后的3D技能配置和表现。虽然还有些问题,但也算按照我的计划慢慢推进了,后续等3D技能表现稳定之后开始牵头重构下飘字和战斗UI,这一块的代码写的太乱了。