吐槽2.2版本和2.2.1版本引擎的‘优秀’

这是个吐槽贴,表达一下2.2版本给我带来的痛苦经历,说是吐槽,实际是对2.2的实际反馈,相信引擎团队也不想CCC都是拿来做小游戏。

因为我的游戏是场面元素较多的类型,所以对加载性能要求比较高。先上个图片表达一下意思。

在这个场景中,需要加载的图片大约有3000-3500个图片需要加载,大约有100-200个动画。

这是高级别玩家的普通情况,还不说战斗中需要额外添加大约1000个左右的额外sprite,另外战斗开始后还需持续的位置刷新、战斗特效、各种算法等等的开销。

切换场景的意思是:当前页面元素全部去除,加载新的场景元素,并没有Canvas的切换

版本A:2.1.2
版本B:2.2.0
版本C:2.2.1

测试机型,安卓系统 660CPU(基本代表市面上的实际中端配置)

视频演示
视频A版 https://v.qq.com/x/page/t3017pjdzvl.html
视频B版 https://v.qq.com/x/page/n3017trhxk0.html
视频C版 https://v.qq.com/x/page/y3017ymcuba.html

先说切换场景的速度
A:4秒
B:7-8秒
C:7秒

在优化上,因为考虑到玩家内存,A版的时候并没有做缓存池,只做了一些IO优化, 页面切换时,新页面的内容全部是重新创建,而这切换场景需要4秒,记住,是4秒,没有缓存池的情况仅需4秒

缓存池的原理是场景卸载时,将场景中的sprite全部push在map中(key:name,value:array),sprite不做释放,透明度设0;
再次加载场景时,sprite创建先查询有没有缓存,有的话在map中取,(array pop),透明度设255,以达到复用的目的。(这样会显著增加内存占用,好吧,为了优化不择手段了)
至于说nodepool类型的优化,就歇会吧,每个玩家都有不同的布局和建筑级别,不同级别又有不同图片。sprite的创建无论你是instantiate还是new,都免不了开销,这是考验引擎性能的时候,再优化也破不了这一关。

而B版和C版有对象缓存池,7-8秒加载出第一次后,再次加载速度将提高,速度将提高到5秒,注意,这可是sprite复用的情况,很确定sprite未重新创建,而是透明度恢复255,这样仍需5秒,这样仍需5秒,这样仍需5秒。

我之前也反馈过2.2性能低下的问题,但这次的2.2.1,并未改善多少。

安卓在2.2之后,堪称灾难,帧数多不了几帧,而场景的切换从4秒变8秒,8秒什么概念我想各位开发者都能体会到

玩家会认为游戏卡了,玩家会来说:为什么我的手机能玩吃鸡,能玩王者荣耀,却玩不了你一个2d游戏,我那个尴尬啊。

2.2在安卓的问题是,本来是为了提高渲染性能,提高渲染性能的前提是场景元素很多对吧?结果元素一多,渲染多不了几帧,而加载速度大幅下降,这个交换值得么?

就页面上三瓜俩枣几个几十个元素的情况,提高了什么渲染性能啊提高???很明显没意义,渲染提升的最基本原则是建立在场景元素较多的情况。本身2.1.2和早版本的性能表现在安卓就已经合格了

如果说2.2对IOS来说是春天,多那几秒还算值得,毕竟渲染性能天翻地覆。对安卓来说就是捡了芝麻丢了西瓜,不堪直视。

再附加一个浏览器中调试的时候,同样的场景的切换速度,大约需要1秒不到,带上缓冲池后,重复加载基本半秒都不到,不要惊讶,真的就是这么快 https://v.qq.com/x/page/b3017nz4v4r.html

我之前做的创建效率测试,2.2.0 版与之前的版本慢了3到4倍

你这么多场景元素,你用2.1.2时候3,4秒的加载速度体验也很差
SLG游戏场景元素都很多,为啥不做成场景秒切过去,地图元素逐步刷出来。

假设你是用unity开发的,加载这么多东西估计也是这么慢,你是不是要去喷unity?

其一,你的加载设计本身就有缺陷,你是可以意料到有这么多元素要加载,可能会慢。即使一开始的3,4秒的加载速度,在我看来也是体验极差不能接受的
其二,你的胆量很大,我没见过哪个游戏上线稳定运营后还这么匆忙的升级引擎,而且没经过充分测试就更新。然后线上出了问题,用户体验变差,用户流失。你知道现在王者荣耀用的unity是几年前的版本吗

看到这句话我觉得你更应该想“为什么我的游戏做的这么差”,而不是“引擎为什么做的这么差”

王者荣耀的unity是 天美自己修改后的unity

这位兄弟,你对吃鸡和王者荣耀对引擎的优化程度是不是有点误解。

我跟玩家说,吃鸡页面里才多少元素,而策略游戏里一个场景就几千,说王者荣耀才几个角色来回动,几个技能来回点,又有什么用,开发者懂,玩家懂吗

帧数多很多了,不是多不了几帧

场景切换的时间,如果在这种几千个节点的极端情况下,确实体验变差了,我们已经在 2.2.1 里做了优化。默认对引擎底层的一些数据结构做了 1024 的缓存池。

发泄情绪没有任何意义。一个帖子能解决的问题,为什么要发那么多帖子抱怨?

我们是不够重视吗?
原来的帖子里的回复你看了吗?
如果不满意,为什么不继续沟通?

本帖即将关闭,我们会继续在原帖跟进这个问题 新版2.2的优化机制分析,有关于2.2的安卓源生渲染提升,总结来说对源生来说2.2是值得的版本。 ,麻烦大家移步。

请放心,我们已经在积极优化中。如果效果不满意,欢迎继续反馈,但是请不要发这么多重复的帖子,这样会影响问题的跟进。

另外,论坛公测的 2.2.1,就是为了看看是否能满足用户需要的,不代表这就是最终性能表现。如果这样的优化最终证明没有意义,我们也不会保留。

1赞

cc.pool.material.maxSize = xxx;
cc.pool.assembler.maxSize = xxx
可以通过这种方式扩大缓存容量,默认是1024,您的游戏对象如果频繁创建数目比较大,可以考虑加大该数值,创建速率会有所提升,但常驻内存也会有所上升,所以依据您的游戏情况而定。之后我们也会尝试引入更激进的材质共享机制,尽量满足超大场景的加载要求。