如题,想给2d的游戏实现一个画质匹配机型的功能,就比如低端机,可以设置低端画质+低端性能,中端机,设置中端画质+中端性能,以此类推,有大佬做过类似的不?
这两个帖子看了下,不适合目前的项目
上面这两个帖子都看了,不适合2D的项目。
如题,想给2d的游戏实现一个画质匹配机型的功能,就比如低端机,可以设置低端画质+低端性能,中端机,设置中端画质+中端性能,以此类推,有大佬做过类似的不?
这两个帖子看了下,不适合目前的项目
上面这两个帖子都看了,不适合2D的项目。
原生还是小游戏
原生平台+小游戏平台(比如抖音)
核心思路就是识别性能档位,在不同档位设置不同的表现效果。
识别就不说了,麻烦,全平台识别更麻烦,我只对苹果做了识别,安卓的随他去吧,小游戏上安卓性能优于iOS,所以苹果优化的没问题了,安卓自然就没问题。
性能分档涉及的东西就多了:
1、根据加载速度不同做不同的加载表现
2、低档砍掉一些东西,如粒子效果,Animation动画,骨骼动画,甚至一些动作(伤害字体飘动等),减少同屏节点数量
3、物理这块能用坐标计算就用,刚体尽量不用多边形
4、做极致的内存管理,不用的预制释放,动态加载的图片做好引用计数,针对不同内存的手机做不同释放策略
5、用论坛内大佬做的引擎增强插件 Cocos Enhance Kit,优化了多纹理渲染、文本渲染、动态合批等问题
6、列表优化,这个就复杂了,论坛里有相关的方案
7、对象池合理使用,不同档位池子大小不同
8、一些小细节,预制中会变化的Label内容清空,需要动态替换的SpriteFrame清空,这样可以避免加载时先加载一遍再替换。像物品图标这种内容很多用的地方多,但是每个地方显示又只需要一部分节点的预制,可以采取按需复制一部分节点的方案
9、微信可以开高性能模式,前提是内存能控制住
后面的想不起来了
既然是多平台,以我的经验只要微信iOS跑起来没问题,微信安卓就没问题,原生就更没问题了
之前我还想过,要不要所有的UI上的贴图针对不同的机型做一份,比如低端机,用细节精度没那么高的切图,不过后来想,性能应该和贴图质量没多大关系吧
贴图和内存有关
请问下识别性能档位是怎么处理的啊,这一块我看了下网上的解决方案,是按照机型+机型的分辨率来判定是什么配置的机型,苹果这一块还好说(苹果的比较中规中矩,没有安卓那么多妖魔一般的机型和分辨率)
我安卓的没有分辨,因为我这游戏没有太吃性能,只要iOS只能运行起来,安卓就没管
下面是区分高低端机型的几个方法。
1)Apple机型。毕竟iOS的型号是有限的,因此可以把其中一些型号的机子归类为高端,另一些型号的机子归类为中端,还有一些型号的机子归类为低端,比如iphone6,iphone8,iphone11。
2)Android等其他机型。由于机子型号太多,我们可以用CPU型号、内存大小、系统版本号、屏幕分辨率大小、平均帧率等判断是高端机还是低端机。
例如,3GB内存或以上的为高端机,1GB或以下的是低端机,其他为中端机。也可以根据系统的版本号来判断,Android 9.0以上的为高端机,Android 6.0以下的都是低端机,其他为中端机,又或者分辨率大的为高端机等。不过,通过一些简单的规则将高低端机型区分开来会有很大问题,例如,有些山寨机内存很大,CPU却很烂,安卓版本很高,但内存却很小,所以我们希望有一个综合考虑硬件的系数,可以为每个硬件给出一个评分,最后将CPU型号、内存大小、系统版本号、屏幕分辨率大小、GPU型号这几个硬件的评分综合起来,得出一个总分,用这个分数来判断是高端机、中端机抑或是低端机,这样会比较合理一些。
除了上述区分方法,还可以通过平均帧率来判定高低端机型。
在游戏中加入统计平均帧率的程序,将机型型号、CPU型号和平均帧率发送给服务器端,由服务器记录各机型型号的平均帧率,再统计出一份报表给客户端,客户端根据这份统计报表来决定哪些机型型号是高端设备,哪些机型型号是低端设备。得到数据后,再通过设置不同级别的画质来优化高低端设备的游戏流畅度。
区分高低端机型时,我们可以将这三种方法一起使用,因为Android中有一些是有固定名称或者编号的机型,我们可以很方便地确定它的类型,有些没有确定型号,就需要通过了解设备的硬件情况来确定机型了,那些完全不能确定机型的,就只能在统计中得到答案了。
——————————————————————
这是我找到得区分高中低机型的方案,这种办法感觉有点过于繁琐
IOS标准
低端机:iPodTouch5Gen及以下;
中端机:iPodTouch5Gen以上,iPhone5C及以下;
高端机:iPhone5S及以上;
5s都是高端机了? 根本跑不动cocoscreator游戏。