Unity整体性能优化篇 第(四)节:代码优化 (CPU)

一: CPU的优化方案(减少Object以及CPU的准备工作)

1.批处理 (Batch)

批处理的原理:通过共享数据(应该是材质缩放比较相近的物体进行批处理共用一片数据)降低CPU对于大量Object的数据准备工作,降低DrawCall,优化性能。

方法: 将进行批处理的物体群体勾选Batching Static属性,即可。

我们不难看出,批处理后DrawCall下降了很多,是因为7个Cube共用了一片数据(材质颜色数据等等),CPU不需要多次计算每个cube的数据,优化了性能。在这里插入图片描述

2.使用更少的材质 (贴图组合)

3.少使用某些技术 shadow,lightMap,Reflection

Unity整体性能优化篇 第(三)节已经讲过

4.合并材质(合并mesh时注意合并材质) (性能不会优化)

共用一片材质时,会节约资源


二:资源池-Object Pool技术

1.Object Pool介绍:

前提:由于CPU非常受到Object数量的影响,例如在一款不停的生成相同东西的游戏,我们一直生成销毁,这样一瞬间CPU的准备工作量就会叠加的非常大。

资源池:将对象统一生成在对象池之下,进行管理,开始时进行全部隐藏,每次其他地方调用时激活其中一个返回即可,达到目标条件后继续被隐藏。

优点:降低了实例化对象的频繁性,降低了cpu的准备工作,gpu的一时间的渲染量也降低,场景中Object可重复利用,不会不断创建销毁,降低性能损耗。

2.Object Pool实现 (射击游戏)

在游戏运行时不断生成销毁物体是非常消耗性能的,因此我们可以通过资源池进行控制。使用一批资源代替频繁生成销毁的物体资源

Object Pool实现步骤:

1.生成一定数量的子弹在池子中,使用list存储,并初始化全部为隐藏 active(false)状态。
2.开枪时 从池子中获取一颗子弹对象,并将其设置为激活 active状态(true)供给使用,位置在枪口位置,抵达隐藏状态时进行隐藏。
3.这样开生成 销毁子弹不需要真实的销毁与生成,只需要生成一批即可重复使用,使用对象时取出显示,不使用时放入隐藏,达到Object的重复利用,减少了生成销毁次数,优化性能。


BulletPool:为子弹资源池 (负责子弹池生成,子弹获取)
ButtetShooting:负责子弹隐藏与控制发射

在这里插入图片描述

效果:(注意看DrawCall的变化,以及Hierarchy下子弹池的变化)
在这里插入图片描述








项目工程链接地址(GitHub)

求github小星星哈,谢谢啦?
Unity性能优化项目工程链接:https://github.com/HanxianshengGame/Unity-Optimize-Project






--------------------------------------------------------我是有底线的-------------------------------------------------------------

    感谢能够观看博客的各位Unity开发爱好者们,有问题发表评论呐,★,°:.☆( ̄▽ ̄)/$:.°★

猜你喜欢

转载自blog.csdn.net/chongzi_daima/article/details/101381942