UGUI 优化

一、Raycast Target

众所周知,UGUI中的响应鼠标点击事件,是通过勾选RaycastTarget,来接收射线。如组件Button、Image、Text、Toggle、InputField、ScrollView等。以Image为例:

当Unity运行时,Unity会遍历所有当前已经勾选的Raycast Target的组件,找到当前点击位置的最上层的组件来作为当前点击的响应点。所以场景中勾选太多的Raycast Target的组件的话,会降低游戏运行的效率。并且有可能会遮挡需要被点击的物体(因为层级问题)。并且Unity在创建组件如Image、RawImage、Text、Button(里外两个)等,Raycast Target默认是勾选的。

二、打包图集

https://blog.csdn.net/qq_38721111/article/details/79870373

三、OverDraw

(1)、首先创建两个Button不重叠组件,看Batches(批处理的数量为4)。

然后再看一下两个Button组件重叠的显示:

由此可见同层级之间物件如果重叠会增加CPU的渲染次数,所以同层级之间物体尽量不要重叠。

(2)、Image中有一些中部镂空的背景图片,理论上中部是不需要去绘制的,但是即使他中部被设置成透明,也会被渲染,做法是将Image组件上的FillCenter取消勾选。如下:

(3)、使用Mask组件,会增加两层OverDraw。

(4)、尽量减少OutLine和Shadow,Shadow会增加一层OverDraw,而OutLine则是复制了四份Shadow实现的。

(5)、对于某些区域只需要点击,不需要显示图片时,如果使用Image即使是alpha = 0(透明),虽然不显示也是会渲染增加一层OverDraw,可以使用脚本代替,脚本如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ReplaceImage : MaskableGraphic
{
    protected ReplaceImage()
    {
        useLegacyMeshGeneration = false;
    }

    protected override void OnPopulateMesh(VertexHelper toFill)
    {
        toFill.Clear();
    }
}

(6)、可以将不可见的Canvas设置一下Canvas.enable = true,在Canvas下的对象就不被渲染,减少了OverDraw。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值