Я хочу, чтобы процесс перестроения / повторной сборки не происходил при отображении / скрытии элементов пользовательского интерфейса, поэтому я следовал совету ЗДЕСЬ : Обходной путь - разместить пользовательский интерфейс, который будет отображаться / скрытые на собственном Canvas ... и ... включить / отключить компонент Canvas для этого объекта.
Протестировано с размещением 5000 изображений в отдельном пустом Canvas и включением / отключением только компонента Canvas в этом родительском игровом объекте 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 () по-прежнему генерирует большие пики (~ 100 мс) при вызовах UGUI.Rendering.UpdateBatches. Почему это происходит или что я делаю не так?