【Unity入门教程】 第十四章 性能优化 【中国大学MOOC游戏引擎原理及应用】

本文详细介绍了Unity游戏性能审查、代码优化、内存管理和性能优化的实践技巧。通过性能分析窗口,可以检测游戏运行时的瓶颈,并通过优化代码,如减少不必要的函数调用和改进内存管理,提高游戏性能。例如,避免频繁的字符串创建和利用协程函数。此外,还讨论了渲染优化策略,如合并材质、使用静态GameObject和启用遮挡剔除技术,以减少GPU和CPU的负载。
摘要由CSDN通过智能技术生成

以下均为来自中国大学mooc 游戏引擎原理及应用时的学习笔记,不含商用,仅供学习交流使用,如果侵权请联系作者删除。

14.1 性能审查

在这里插入图片描述
在这里插入图片描述

这个是性能分析窗口
在这里插入图片描述
点击游戏运行后即可分析运行效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分析完之后还可以通过save按钮来保存这些结果,还可以将以前保存的结果载入进来进行分析。
之后进行性能优化之后,我们可以通过打开这个窗口来对比是否达到了预期的效果。

性能优化很重要,即便使用游戏引擎开发的游戏,即便游戏提供了很多性能开发的瓶颈,仍然需要你来定位所开发游戏的一些性能瓶颈,进一步来提升游戏性能。

19版本的界面:
在这里插入图片描述

14.2 代码优化

在这里插入图片描述
早期硬件效果差,需要使用很多的代码来进行优化。

在这里插入图片描述

这些高消耗函数要限制它的使用量。

优化建议:
在这里插入图片描述
子弹的碰撞检测比较快,可能需要使用连续的碰撞检测,所以可以通过为子弹定制特数的碰撞检测方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
脚本详情如图所示
在这里插入图片描述
这个自带了update函数
接下来我们来看看带了update和不带update的区别

为父物体cube添加上这个脚本

在这里插入图片描述
接下来进入窗口分析,对比下有无update函数的区别,在这里插入图片描述

有update函数playerloop是8.毫秒
没update函数 playerloop是6.多
在这里插入图片描述
像以后没有用的函数可以干脆删除掉

接下来展示第二个优化的例子

来看这个脚本
在这里插入图片描述
QE和是实时生成和销毁
AD是将物体设置为true或者false

接下来创建一个空物体并为其挂上这个脚本,为其添加上预制件,当我们按下Q和E的时候可以看到峰值很高

在这里插入图片描述
如果是Q和E的话则开销没有那么大

在这里插入图片描述

14.3 内存管理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
看以下这段代码,每次在update的时候都会重新产生一个字符串变量,这种编码方式会导致频繁进行垃圾回收,降低游戏性。
在这里插入图片描述
我们可以将 string不设置为局部变量
在这里插入图片描述
堆和栈在内存管理时,所表达的意义是不一样的。

在这里插入图片描述
在这里插入图片描述
还有一种是协程函数:
在这里插入图片描述
可以直接创建一个waitForSeconds对象
在这里插入图片描述

14.4 性能优化

在这里插入图片描述
受制于GPU(图像显示卡)和CPU(图像处理器)

在这里插入图片描述
在这里插入图片描述
影响提交的batch数量:
什么意思呢,如果一千个三角形属于同一个物体,cpu会一次性提交给CPU。如果是一千个三角形属于一千个物体,则需要提交一千次。

渲染的优化和图形学关系密切:
1.对于模型,要控制模型的顶点数,如果在大场景中,需要使用IOD,模型在远处可以切换成粗糙的模型
2.同屏的材质,如果可以合并成一个材质则合并成一个材质
3.不运动的GameObject要设置成static类型,unity会进行材质的合并,并且减少calldraw(好像听错了)的压力
4.渲染管现场最好设置成deferred延迟渲染,在手机端则设置成forward 前向渲染
5.应用一些其他的技术,比如遮挡技术
比如,建筑一个这样的一堵墙
在这里插入图片描述
可以在相机里面选中这个遮挡选项:
在这里插入图片描述
但是这样还不够,还需要将其遮挡和被遮挡的物体的类型设置为
在这里插入图片描述

接下来调出来遮挡技术窗口:
在这里插入图片描述
可以看到这样的窗口:
在这里插入图片描述
在object中可以选择遮挡方式,一般选择默认的遮挡方式:
在这里插入图片描述
Bake这里可以看到三个参数,

  1. 第一个参数Smallest Occluder是能够遮挡物体的最小尺寸。当物体的某个长宽高大于这个尺寸的时候,便可以对后面的物体进行遮挡
  2. 第二个参数Smallest
    Hole可以设置相机通过最小间隙或者孔洞可以看到之后的物体,当孔洞小于这个值的时候,这个孔洞后方的物体可能不会进行渲染
  3. 第三个参数Backface Threshold设置的是物体的背面是否可见,设置成100时,所有物体都是可见的,当小于100的时候,物体背面将从occlusion的数据集中删除,一般可以使用默认设置的100
    在这里插入图片描述
    当bake烘焙完毕后可以看到当物体被遮挡时则可能不会被渲染
    在这里插入图片描述
    实践:当相机移动到上方时,下面的cube可能就不会被渲染
    在这里插入图片描述
    当相机移动到下方的时候,上面的cube就不会被渲染
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值