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。

 

發佈了62 篇原創文章 · 獲贊 53 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章