当前位置: 首页 > article >正文

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释放不使用的资源

http://www.kler.cn/a/376388.html

相关文章:

  • Python 的 Pygame 库来开发一个游戏
  • 华为机试HJ18 识别有效的IP地址和掩码并进行分类统计
  • Windows下Jenkins自动启动jar包
  • 【创建型】单例模式
  • 用Python设置、更新和获取Excel单元格的值
  • 虚拟现实与增强现实:重塑娱乐和教育的边界!
  • 刘艳兵-DBA023-控制文件是Oracle 数据库用来查找数据库文件,控制文件包含以下哪些信息:
  • 微信小程序 - 数组 push / unshift 追加后数组返回内容为数字(数组添加后打印结果为 Number 数值类型)
  • 现代卷积神经网络(GoogLeNet+批量归一化+ResNet)
  • https和http的区别,及HTTPS的工作流程
  • windows临时安装solr
  • 2024 Rust现代实用教程 Error错误处理
  • 【tomcat系列漏洞利用】
  • 原生html+js+css+php多图上传带预览可增删判断图片大小和后缀
  • 用100行python代码制作俄罗斯方块游戏,俄罗斯方块游戏教程-附完整代码
  • ros与mqtt相互转换
  • NuGet Next发布,全新版私有化NuGet管理
  • RabbitMQ的路由模式
  • MySQL — 事务 (o゚▽゚)o
  • 【运动的&足球】足球运动员球守门员裁判检测系统源码&数据集全套:改进yolo11-DBBNCSPELAN
  • Django 5企业级Web应用开发实战-日志
  • 前端表格复制粘贴自动根据标识进行填充
  • Python CGI编程-cookie的设置、检索
  • Jenkins面试整理-Jenkins Pipeline 是什么?
  • 「面试必背」Linux面试题(2024最新版)
  • 【LeetCode每日一题】——LCP 07.传递信息