Unity 优化相关

减少DrawCall
DrawCall 是CPU 对 GPU 发送一次渲染指令,其中传递了材质球,顶点等信息。发生DrawCall 比较损耗效率,所以要尽量减少DrawCall。
Batches 与 DrawCall 息息相关。Batches 是把一个或多个物体一次提交给gpu 渲染的流程。 也就是一个批次产生一次DrawCall。一个批次把尽可能多的物体一起渲染,就可以减少DrawCall。
批渲染分为动态批
动态批需要满足以下条件
1.一个批次总定点数小于900
2.使用相同的材质

静态批
1.在编辑器中把物体设置为static。
2.使用相同的材质。

使用批处理来减少DrawCall 并不是每次都适用,要结合实际情况,有可能一次动态处理物体过多,也可能会适得其反。

示例
在这里插入图片描述
三张图片适用同一个材质,一个批次就渲染完成。

在这里插入图片描述

image 与 image(2) 是相同材质,产生一个批次。image(1) 使用另一个材质, 产生一个批次。

在这里插入图片描述
材质不变,把Image叠加在一起。发现有3个批次。 是由于 image(1)遮挡了Image,Image(2) 遮挡了Image(1)。所以必须先渲染image 再渲染image(1) 最后渲染 image(2)。image 与 image(2) 虽然使用了相同的材质,但是他们不能一起渲染,所以产生了3个批次。

在UI中,常常把图片制作成图集来减少DrawCall。
还需要注意的是,Canvas 之外的UI 也是会被渲染的。但是这种是完全没必要的,出屏幕外应把物体设置为 Active = false

重绘
这个在UI中比较明显,当一个UI把另一个UI覆盖时,就会重复绘制。先绘制底下的物体,再绘制上方的物体。在不透明的情况下,下方的图完全看不见,也就是绘制它等于做了无用功。在透明情况下,绘制下方图片时还需要对之前绘制的图片进行混合计算。
不论是透明还是不透明,重复绘制,都是不利的。这个要在设计时尽量避免,在开发时也可以想想办法让完全遮挡的部分,进行隐藏处理。
在UI中的Image 控件中,提供了Fill Center 属性,设置为false 可以不渲染九宫格中的中间部分,底框UI常用这个来处理。

频繁创建的对象(也可以是游戏物体)
使用对象池来管理,不但可以减少创建与销毁带来的效率损耗,还可以减少GC的工作量。

加载体积大的游戏物体
使用异步加载来避免游戏卡顿。

下载
下载任务应该使用线性处理,不应出现多资源同时下载。这可能会导致协程一次迭代过长,导致卡顿。

在允许的情况下压缩资源
再图片不需要要求非常清楚时(比如,模糊的背景图),可以采用压缩图片资源,来减少内存的消耗。使用2的幂次方可以让图片得到更好的压缩(使用 Non Power of 2 可以让不是2的幂次方的图 转换为2的幂次方)。图片不需要使用到Lod 技术时,取消GenerateMipMap 选项。当图片没有透明效果时,取消alpha 通道。

动画模块优化
动画模块优化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值