Unity项目优化相关技巧

 更新时间:2021年09月03日 15:50:03   作者:LOONGV  
随着项目越做越大,工作年限的增加,对项目的优化方面要求也越来越高(面试必备),本文简单罗列一些unity项目中的优化技巧,有需要的朋友可以参考下

一、简单优化

1.图片纹理大小尽量为2的幂次方(比如128,512,1024等等),以便unity对其进行优化。

2.将多个小图片纹理合并一个大的图片纹理以降低drawcall,特别是同一个ui面板的元素都放到一个图集中,背景图片尽量单独做一个图片。

3.尽可能的共用材质球,原因同上。

4.不需要播放动画的模型把Animator或animation组件删除掉,因为不管用或不用他们都会被初始化。

5.模型方面要注意尽可能的减少顶点数和三角面数,尽可能重用顶点

6.纹理的mipmap视情况开关(一般用于3D场景,UI和2D游戏中不要使用),打开的话可以减少纹理叠加时的抖动闪烁问题加快渲染速度,减少图像锯齿;但是会占用更多的内存空间以及使项目的打包文件变大(毕竟生成了一系列逐层缩小的备份小图)。

7.将场景中不会发生变化(位移、旋转等)的物体设置为Static,方便unity进行静态批处理。

8.打开player setting中的静态批处理(Static Batching)和动态批处理(Dynamic Batching):静态批处理需要勾选场景中不需要变化的物体的Batching Static,否则不会起到优化效果;注意,使用合批处理后仅是降低了CPU到GPU的传输次数和SetPassCall且不需要再次执行顶点变化操作,但是会增大包体及内存消耗。

9.灯光方面Spotlight开销很大要尽量少用。

10.尽量少用实时阴影,若必用不可则使用Hard Shadow。

11.谨慎使用半透明材质和UI以减少overdraw,如alpha为0的image虽然不可见但是gpu仍然会对其进行绘制;若UI中存在很多半透明界面,建议UI由单独的摄像机进行渲染,且UI不要叠加到场景摄像机渲染范围内。

二、优化进阶

1.使用缓冲池管理需要经常出现和销毁的object。

2.视情况使用lod技术,使用此技术需要制作多套模型,故而会使项目的打包文件变大同时会占用更多内存,但是可以降低需要绘制的顶点数目,若距离调整不好可能会出现模型突变的情况。

3.视情况使用OC(遮挡剔除)功能(通常用于场景中有大量模型的情况),使用此功能可以大大降低overdraw(毕竟被遮挡的物体直接不渲染了),需要注意物体的大小要与单元格大小达到一个平衡;可以通过设置物体的Occluder Static和Occludee Static来控制物体为遮挡物或被遮挡物。此技术的缺点就是会耗费额外的CPU。

4.使用灯光贴图搭配light probe group来替代实时光照,使用此技术对模型要求较高,不能有UV错乱、法线错乱的情况,否则会出现很奇葩的状况;同时使用此技术将不会有动态阴影生成。

5.针对不同的平台对纹理进行压缩(比如IOS为pvrtc;安卓为ETC1,若有alpha通道则使用RGBA 16-bit),需要注意的是压缩后有时会影响纹理的质量。

6.不同UI界面使用多个Canvas,因为unity为了性能优化会合并canvas下所有元素到一个Mesh中;如果所有界面放到一个canvas,在界面发生变化的时候会造成重绘,降低性能,最优解是一个静态的ui放一个canvas,动态的ui视情况分别放到不同canvas中,注意也不要分的太细不然会造成dc的增加。

7.蒙皮网格动画改为顶点动画,用空间换时间

8.移动端若对渲染帧率没有特定要求,可以通过降低帧率的形式来节省机器性能,需要注意在 QualitySettings.vSyncCount中不能设置为Don't Sync否则下面的设置将无效,设置方式如下:

在项目配置类或主类中的Awake或Start中加入下面的代码

Application.targetFrameRate = 30;    //移动平台默认30为比较节省电量的帧率,若要达到最佳性能则设置为300(这样机器会尽其所能提高帧率,但是很大概率达不到300)

9.合理利用Profiler进行性能瓶颈分析与优化。

10.将Terrain转为Mesh,大地图使用流式加载及卸载技术。

11.模型的蒙皮网格动画改为顶点动画,用空间换时间。

12.使用Animation Instancing优化大量模型动画。

13.尽可能用BoxCollider替代MeshCollider。

三、深度优化(操作起来比较复杂,需要掌握一些底层知识或需要极端优化的情况)

1.使用自定义shader

2.合并mesh(此处可以学习下林大佬写的相关博客

3.UI中不涉及到射线检测的Canvas把GraphicRaycaster组件删掉

4.尽量少用LayoutGroup和contentSizeFitter,虽然用起来比较方便,但是在用户操作时会导致整个ui界面的重绘,有能力的大牛建议自己写一个算法来实现局部的重绘,没有能力的就只能在使用这俩组件的地方使用单独的Canvas来尽量避免整个UI的重绘了。

5.视情况使用单通道实例化渲染:要启用此功能,请打开 Player 设置(选择 Edit > Project Settings__,然后选择 Player__ 类别)。在 Player 设置中,导航到底部的 XR Settings 面板,选中 Virtual Reality Supported 选项,然后从 Stereo Rendering Method 下拉菜单中选择 Single Pass Instanced (Preview)

四、代码相关优化

1.用for循环替代foreach、

2.用gameObject.CompareTag("tag")替代gameObject.tag="tag".

3.Find、GetComponent方法尽量在Start、Awake之中调用,不要在Update之类方法中调用。

4.用string.format替代+拼接字符串。

5.物理检测在fixedUpdate中进行。

以上就是Unity项目优化相关技巧的详细内容,更多关于Unity项目优化的资料请关注脚本之家其它相关文章!

相关文章

  • 手把手教你学会HBuilder打包APP

    手把手教你学会HBuilder打包APP

    我们打包APP需要用到HBuilder,所以本文主要介绍了HBuilder下载安装以及如何使用,最后介绍如何打包app,感兴趣的可以了解一下
    2021-06-06
  • gitlab项目如何修改主分支main为master以及可能遇到的问题详解

    gitlab项目如何修改主分支main为master以及可能遇到的问题详解

    本文详细介绍了如何将Git仓库的主分支名称从main修改为master,包括本地和远程仓库的更改步骤,以及如何在GitLab上更改默认分支和删除受保护分支
    2024-11-11
  • 进制转换基础

    进制转换基础

    很多年前大学里学过的进制转换还是挺简单的,没想到多年不用了,都忘了,刚好看到这篇文章,特分享下,方便需要的朋友
    2013-02-02
  • linux 部署apache服务的步骤

    linux 部署apache服务的步骤

    这篇文章主要介绍了linux部署apache服务的步骤,部署apache服务的步骤本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-02-02
  • win11 C盘出现锁和黄色感叹号的解决方法

    win11 C盘出现锁和黄色感叹号的解决方法

    这篇文章主要介绍了win11 C盘出现锁和黄色感叹号的解决方法,文中有详细的解决方案,对大家的解决问题有一定的帮助,需要的朋友可以参考下
    2007-02-02
  • 浅谈Git分支管理策略

    浅谈Git分支管理策略

    这篇文章主要介绍了浅谈Git分支管理策略,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • IDEA怎么切换Git分支的实现方法

    IDEA怎么切换Git分支的实现方法

    这篇文章主要介绍了IDEA怎么切换Git分支的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Git的使用规范流程总结

    Git的使用规范流程总结

    大家都明白在团队开发中,遵循一个合理、清晰的Git使用流程,是非常重要的。否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护。所以这篇文章给大家分享了Git的使用规范流程,有需要的可以参考借鉴。
    2016-09-09
  • 2018年GitHub账户注册图文教程(github从注册到使用)

    2018年GitHub账户注册图文教程(github从注册到使用)

    Github是最流行的代码库,里面存储着丰富的优秀的开源代码。不仅如此,作为一款免费的代码存储利器也是流的一逼,支持各种编程语言,代码显示效果堪称完美,可以随时随地查看自己记录的笔记
    2018-02-02
  • vscode使用markdown无法预览网络图片的解决方法

    vscode使用markdown无法预览网络图片的解决方法

    本文主要介绍了vscode使用markdown无法预览网络图片的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01

最新评论