我想避免在显示/隐藏UI元素时发生重建/重新批处理过程,因此我遵循HERE的建议: 解决方法是将要显示/隐藏的UI放置在自己的Canvas ...并...启用/禁用此对象上的Canvas组件。
通过将5000张图像放置在单独的空Canvas下并使用此脚本仅在该画布父游戏对象上启用/禁用画布组件进行测试:
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调用上产生大峰值(〜100ms)。为什么会发生这种情况,或者我做错了什么?