Unity游戏优化

官方的优化方案:

https://docs.unity3d.com/cn/current/Manual/30_search.html?q=%E4%BC%98%E5%8C%96

 

压缩包体

导出一个apk后,在console窗口的右上角打开Open Editor Log,搜索uncompressed,即可看到apk包体里面使用到的各种资源从大到小排序

 

 

 

Static Batching 静态批处理

只要这些物体不移动,并且拥有相同的材质,静态批处理就允许引擎对任意大小的几何物体进行批处理操作来降低描绘调用。

物体是静止的,并且在游戏中永远不会移动、旋转和缩放。想完成这一步,你只需要在检测器(Inspector)中将Static复选框打勾即可。

 

3d游戏中的纹理使用Mipmap

Mipmap 是图像逐渐减小版本的列表,用于优化实时 3D 引擎的性能。远离摄像机的对象使用较小的纹理版本。使用 Mipmap 会多占用 33% 的内存,但不使用它们会导致巨大的性能损失。3d游戏中的纹理应当始终使用 Mipmap;唯一的例外是变小的纹理(例如,GUI 纹理、天空盒、游标和剪影)。Mipmap 对于避免许多形式的纹理锯齿和闪烁也是必不可少的。

Mipmap 纹理使 GPU 能够为较小的三角形使用较低分辨率的纹理

 

可以使用勾选了“Generate Mip Maps”的Inspector 中的滑块和所选纹理来检查mipmap纹理。

 


LOD(Level of Detail 细节级别)和摄像机每层剔除距离

将对象简化或在对象移动到更远位置时完全剔除它们。这是减轻 CPU 和 GPU 负载的有效方法。

使用细节级别 (LOD) 技术可以随着某个游戏对象与摄像机的距离增加而减少渲染对象的三角形数量

在许多游戏中,在不影响玩家体验的情况下快速有效地执行此操作的方法是,相对于大对象,更激进地剔除小对象。例如,可让远处的小岩石和碎片不可见,而大型建筑物仍然保持可见。

有多种方式实现此目标:

  1. 使用细节级别系统

2、手动设置摄像机上的每层剔除距离

3、将小对象放入单独一层,并使用 Camera.layerCullDistances 脚本函数设置每层剔除距离

https://docs.unity3d.com/2018.4/Documentation/Manual/LevelOfDetail.html

 

通过摄像机的剔除遮罩功能仅绘制场景的某一部分

利用摄像机的剔除遮罩,您可以选择性地渲染位于某一特定层中的对象

 

减少不必要的实时阴影

实时阴影很不错,但它们对性能有很大影响,同时会增加 CPU 的绘制调用次数和 GPU 的处理量。

 

使用烘焙光照而不是动态光照

 

使用纹理图集代替多个单独的纹理。这些纹理图集的加载速度更快

 

纹理若不需要Read/Write,则关闭

 

工程的物理设置中,取消勾选不参加碰撞检测的layer

 

控制模型的面数减少骨骼数量

有的建筑物被遮挡了一部分,被遮挡部分可以减面甚至把这一块抠掉留空。

 

控制特效的粒子数量

 

压缩纹理,如安卓平台,选择RGB Compressed ETC之类的。

 

 

 

代码

GC的机制

Unity内部有两个内存管理池,堆内存和栈内存,垃圾回收主要是指堆上的内存分配和回收,unity中会定时对堆内存进行GC操作。

GC操作是一个极其耗费的操作,堆内存上的变量或者引用越多则其运行的操作会更多,耗费的时间越长。

 

 为游戏内的动态物体使用内存对象池,减少系统开销和内存碎片,复用对象实例,构建自己的内存管理模式,减少Instantiate和Destory;

 

Resources.UnloadUnusedAssets 卸载场景中不再引用的所有资源。所以,切记终止对不再需要的资源的引用。

 

避免在频繁调用的函数中调用getcomponents,创建list、dictionary,应该缓存下来。

 

用“for”循环代替“foreach”循环

 

发布版本屏蔽Debug.Log

Log函数不会因为打包为release版本就会自动屏蔽,需要使用宏定义来屏蔽。

 

尽量减少Unity回调函数,哪怕是空函数也不要留着;(例如空的Update、FixedUpdate函数)

 

尽量少使用FindObjectsOfType函数,这个函数非常慢,尽量少用且一定不要在Update里调用;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值