欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > Unity性能优化(简略版)

Unity性能优化(简略版)

2025/2/25 20:36:40 来源:https://blog.csdn.net/m0_67428211/article/details/143437145  浏览:    关键词:Unity性能优化(简略版)

一、规范美术的资源

  • 比如对于没有透明通道的图片美术导出时就不需要带透明通道,因为RGB和RGBA压缩的内存大小有一倍的差距
  • 降低模型面数,降低模型骨骼数量,降低贴图大小

二、UI的Draw Call优化

  • 通过打图集减少DrawCall次数
  • Canvas会打断合批
  • Text也算一次DrawCall也会打断合批
  • Mask也会打断合批,使用RectMask2D可以避免
  • 直接修改Image的Color属性会造成Rebulid,可以通过修改材质的Color属性来避免

三、批处理

  • 静态批处理:将相同材质的物体合批,静态合批的物体不能自由移动,并且会增加内存占用
  • 动态批处理:动态批处理开启后会自动合批,但是对定点数有限制
  • GPU Instancing:将多个相同网格和材质的对象进行合批,与静态相比不会造成内存激增,但是是通过传递Transform列表,如果物体没有移动/旋转/缩放只需要一次开销,所以不合适需要频繁修改Transfrom的物体
  • 通过代码运行时做批处理

四、UI优化

  • 频繁调用SetActive,隐藏一个较大的有很多子节点的UI界面会有很大的开销,可以通过移除屏幕或者修改Layer的方式,频繁对Canvas进行Enable操作会重新执行构建Rebuild以及重新批处理Rebatch
  • Image和Text不需要响应时间去掉RaycastTarget可以节省性能
  • Mask替换为RectMask2D,Mask会打断合批
  • 将UI进行动静分离,不可活动的元素放在一个Canvas下,可获得的放在一个Canvas下,虽然打断了合批,但是减少了网格重建的时间

五、代码上

  • 减少GC调用,合理使用值类型和引用类型(等到GC时才会释放),合理使用局部变量(频繁调用的作为全局变量避免不断产生垃圾)和全局变量,每帧调用的函数中限定只有需要分配时才使用某些函数
  • 对象池,对于频繁创建和删除的对象利用对象池操作,避免频繁的垃圾回收
  • 字符串,移步String和StringBuild的区别
  • 装箱会产生GC,Unity创建一个临时的Sytem.Object去包装值类型,临时的引用对象创建和销毁时产生了垃圾
  • 协程,注意嵌套协程
  • 使用异步加载避免一次性加载大量资源,使用AssetBundle释放不使用的资源

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词