UGUI 优化

南楼画角 提交于 2020-02-07 02:33:59

一、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。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!