2

我想避免在显示/隐藏 UI 元素时发生重建/重新批处理过程,所以我遵循了HERE的建议:解决方法是将要显示/隐藏的 UI 放置在它自己的 Canvas 上......并且......启用/禁用此对象上的 Canvas 组件。

通过将 5000 个图像放置在单独的空画布下进行测试,并且仅使用此脚本启用/禁用该画布父游戏对象上的画布组件:

public class CanvasScript : MonoBehaviour
{
    public Canvas canvas;
    private Image[] images = new Image[5000];

    public void CreateImages()
    {
       for (int i = 0; i < 5000; i++)
       {
           GameObject NewObj = new GameObject(); //GameObject
           images[i] = NewObj.AddComponent<Image>(); //Image Script                       
           NewObj.GetComponent<RectTransform>().SetParent(canvas.transform); //set child
        }
    }

    public void EnableDisableSubCanvas()
    {
        canvas.enabled = !canvas.enabled;
    }
}

问题:调用 EnableDisableSubCanvas() 仍会在 UGUI.Rendering.UpdateBatches 调用上产生较大的峰值(~100 毫秒)。为什么会发生这种情况或我做错了什么?

4

0 回答 0