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项目优化的资料请关注我们其它相关文章!

(0)

相关推荐

  • Unity排行榜优化滚动效果

    本文实例为大家分享了Unity排行榜优化滚动效果的具体代码,供大家参考,具体内容如下 自己做的一个优化排行榜的功能 当有大量的数据需要在scroolRect中可以通过 只夹在几个item循环利用便可以展示所需的内容: 下面是效果实现图 下面是我的一个中心思想 通过对处在视野第一个Item左上和左下左边点的位置来判断 是将最后一个移动到第一个前面 还是将第一个移动到最后一个后面 用到的我目前来说不太常用的数据结构 LinkedList 方便用于移除第一个 和最后一个: 以下是代码 using Sy

  • Unity中Instantiate实例化物体卡顿问题的解决

    本文实例为大家分享了Unity中Instantiate实例化物体卡顿问题的解决方法,供大家参考,具体内容如下 一.前言 当在执行多次Instantiate实例化物体时,会卡顿严重甚至在移动端会导致程序崩溃 因为Instantiate会产生大量的GC,使CPU过高,导致崩溃 下面是一段测试代码:当我们按下按键时实例化100000个预制体 using UnityEngine; public class Test : MonoBehaviour { public GameObject prefab;

  • Unity3D动态对象优化代码分享

    具体解释请仔细看注释里已经讲解的很细致了,这里就不多废话了 复制代码 代码如下: using UnityEngine; using System.Collections; using System.Collections.Generic; /// <summary> /// 动态对象优化 /// </summary> public class DynamicOptimization : MonoBehaviour {     // Use this for initializati

  • Unity项目优化相关技巧

    目录 一.简单优化 二.优化进阶 四.代码相关优化 一.简单优化 1.图片纹理大小尽量为2的幂次方(比如128,512,1024等等),以便unity对其进行优化. 2.将多个小图片纹理合并一个大的图片纹理以降低drawcall,特别是同一个ui面板的元素都放到一个图集中,背景图片尽量单独做一个图片. 3.尽可能的共用材质球,原因同上. 4.不需要播放动画的模型把Animator或animation组件删除掉,因为不管用或不用他们都会被初始化. 5.模型方面要注意尽可能的减少顶点数和三角面数,尽

  • 优化RequireJS项目的相关技巧总结

    本文将演示如何合并与压缩一个基于RequireJS的项目.本文中将用到苦干个工具,这其中就包括Node.js. 因此,如果你手头上还没有Node.js可以点击此处下载一个. 动机 关于RequireJS已经有很多文章介绍过了.这个工具可以将你的JavaScript代码轻易的分割成苦干个模块(module)并且保持你的代码模块化与易维护性.这样,你将获得一些具有互相依赖关系的JavaScript文件.仅仅需要在你的HTML文档中引用一个基于RequireJS的脚本文件,所有必须的文件都将会被自动引

  • 分享12个Vue开发中的性能优化小技巧(实用!)

    目录 前言 1.长列表性能优化 1.不做响应式 2.虚拟滚动 2.v-for遍历避免同时使用v-if 3.列表使用唯一key 4.使用v-show复用DOM 5.无状态的组件用函数式组件 6.子组件分割 7.变量本地化 8.第三方插件按需引入 9.路由懒加载 10.keep-alive缓存页面 11.事件的销毁 12.图片懒加载 总结 前言 性能优化,是每一个开发者都会遇到的问题,特别是现在越来越重视体验,以及竞争越来越激烈的环境下,对于我们开发者来说,只完成迭代,把功能做好是远远不够的,最重要

  • 分享五个PHP7性能优化提升技巧

    PHP7已经发布了, 作为PHP10年来最大的版本升级, 最大的性能升级, PHP7在多放的测试中都表现出很明显的性能提升, 然而, 为了让它能发挥出最大的性能, 我还是有几件事想提醒下. 1. Opcache 记得启用Zend Opcache, 因为PHP7即使不启用Opcache速度也比PHP-5.6启用了Opcache快, 所以之前测试时期就发生了有人一直没有启用Opcache的事情. 启用Opcache非常简单, 在php.ini配置文件中加入: zend_extension=opcac

  • mysql优化小技巧之去除重复项实现方法分析【百万级数据】

    本文实例讲述了mysql优化小技巧之去除重复项实现方法.分享给大家供大家参考,具体如下: 说到这个去重,脑仁不禁得一疼,尤其是出具量比较大的时候.毕竟咱不是专业的DB,所以嘞,只能自己弄一下适合自己去重方法了. 首先按照常规首段,使用having函数检查重复项,完事一个一个的删除.不要问我having检测重复项的sql咋写,你懂得哈...这个在只有几条重复的时候还可以.要是几千上万条不同数据重复,那咋办... 完事呢,咱就考虑了,用having函数查询的时候,原始sql如下: select `n

  • Jvm调优和SpringBoot项目优化的详细教程

    一.Jvm调优. 参考文章 1.先看一下未设置JVM参数的情况,默认情况下,没有设置任何Jvm参数. idea中安装VisualVM监控jvm的图文教程 2.设置Jvm参数. 配置参数: 关于这些设置的JVM参数是什么意思,参考Jvm调优. -XX:MetaspaceSize=128m (元空间默认大小) -XX:MaxMetaspaceSize=128m (元空间最大大小) -Xms1024m (堆最大大小) -Xmx1024m (堆默认大小) -Xmn256m (新生代大小) -Xss256

  • vue2.x 从vue.config.js配置到项目优化

    vue.config.js 是一个可选的配置文件,如果项目的 (和 package.json 同级的) 根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载.你也可以使用 package.json 中的 vue 字段,但是注意这种写法需要你严格遵照 JSON 的格式来写. 前言 在实际项目中优化也是经常需要做的事情,特别在中大型项目中降低打包体积大小,提高首屏加载时间是必不可少的,同时在面试中也是一个高频问题.本片文章我将从vue.config.js配置到项目优化前后效果

  • Vue项目优化的一些实战策略

    Vue项目完成后就要从开发环境转成生产环境 一些第三方的包体积过大,导致生成js文件过于庞大,这是时候可以生成打包报告来查看项目中的问题 1.生成报告有两种方式,一种使用npm run build --report 2.另一种使用vue脚手架的ui可视化面板,在项目中输入vue ui 3.点击生产环境下的运行按钮,可以看到打包出来的js文件一共有2M之多,js/chunk-vendors.js就是一些项目依赖文件, 再右侧可以看到element-ui 和echarts 以及富文本编辑器,树状表格

  • uniapp项目优化方式及建议

    目录 1.复杂页面数据区域封装成组件 2.避免使用大图 3.小程序.APP分包处理pages过多 4.图片懒加载 5.禁止滥用本地存储 6.可在外部定义变量 7.分批加载数据优化页面渲染 8.避免视图层和逻辑层频繁进行通讯 9.CSS优化 10.善用节流和防抖 11.优化页面切换动画 12.优化背景色闪白 13.优化启动速度 14.优化包体积 15.禁止滥用外部js插件 1.复杂页面数据区域封装成组件 场景: 例如项目里包含类似论坛页面:点击一个点赞图标,赞数要立即+1,会引发页面级所有的数据从

  • Vue项目优化打包之前端必备加分项

    目录 前言 一.路由懒加载 1. 为什么需要路由懒加载 2. 如何实现路由懒加载 3. 路由懒加载中的魔法注释 二.分析包大小 1. 需求 2. 如何生成打包分析文件 三.webpack配置排除打包 1. 需求 2. 排除打包 四. 引用网络资源 1. 需求 2. CDN 3. 实现步骤 五. 打包去除console.log 1. 需求 2. 代码演示 总结 前言 Vue项目开发完毕后,对项目进行打包发布之前,必不可少的操作就是项目优化,这也是程序猿的加分项.跟随本文的脚步来看看如何对项目进行优

随机推荐