我想避免在显示/隐藏 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 毫秒)。为什么会发生这种情况或我做错了什么?