【Unity项目实践】性能优化

Unity的性能优化主要聚焦在3个方向:内存、CPU、GPU

内存

概述

主要是指资源内存的占用、引擎模块自身内存占用、托管堆占用。


处理手段

  • ​前置堆内存分配,尽量降低碎片化
  • 查验内存泄漏
  • 资源预处理
  • 字符串拼接、配置表优化、对象池​

1)资源

资源的内存占用往往占据了总体内存的70%以上。资源主要包括:纹理(Texture)、网格(Mesh)、动画片段(Animation Clip)、音频片段(Audio Clip)、材质、着色器、字体、文本资源等。其中Texture、Mesh、AnimationClip、AudioClip最容易造成很大的内存开销。

1)纹理Texture

  • 格式
  • 尺寸
  • Mipmap

2)网格

检查是否需要所有网格数据

2)引擎自身

占内存比较大的是:WebStream和SerializedFile

3)托管堆

大多数项目中,托管堆由Mono来进行分配和管理。”托管“是指Mono可以自动调整堆的大小来适应所需的内存,并且可以自动GC。

存在的问题:一旦分配不会返还,所以堆内存只升不降。

一些需要注意的细节:

  • 不要在Update、FixedUpdate等高频调用的函数中开辟堆内存
  • 不要频繁的Log输出
  • 慎重使用UIPanel.LateUpdate
  • String连接



CPU

概述

引擎模块性能开销、自身代码开销

处理手段

  • Unity资源
  • 批处理:静态、动态
  • 剔除:遮挡剔除、远近剔除
  • AOI
  • 图集:合理划分图集、动态图集
  • 模型:顶点控制、特效面数控制
  • GPU Instancing
  • UGUI
  • 业务代码
  • 执行效率优化

GPU

概述

OverDraw、显存带宽

主要的瓶颈

  • 填充率
  • 像素的复杂度
  • 几何体的复杂度
  • GPU的显存带宽


处理手段

  • 减少顶点的数量,简化计算的复杂度
  • 材质纹理:尽可能少;使用图集;使用Renderer.sharedMaterial代替Renderer.material
  • 光照:使用光照纹理,而不是实时灯光
  • 距离:使用LOD,离得远的细节可以忽略
  • 剔除:遮挡剔除
  • Shader:使用mobile版本的shader,更加简单
  • 压缩图片,适应显存带宽
  • 打包设置的时候,OpenGl中选择ETC1、PVRTC等
  • 使用mipmap:存储了原图和一系列缩小的备份图,游戏中选择合适尺寸的小图来渲染;这样图片渲染的质量会比压缩要好,但是消耗了一些内存。

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空