Unity3D UGUI (он же "новый пользовательский интерфейс" )

Недавно мы создали актив, который отображает данные в макете таблицы в "новом" ( > 4.6) Unity UI. Некоторые из наших пользователей спрашивают о производительности вызова вызова, и нам интересно, какие (если есть) варианты, которые мы должны улучшить, обращаются к вызовам в пользовательском интерфейсе.

Использование таблицы GIF

Таким образом, приведенная выше таблица довольно устойчиво сочетается с 19 обратными вызовами...

введите описание изображения здесь

Он отлично работает на любом уровне ipad2 и выше, но Unity dev (понятно) ненавидит призывы рисования, поэтому мы хотим как можно больше свести к минимуму это число.

Вы можете увидеть иерархию, которую мы создаем для нашей таблицы в приведенном выше скриншоте. Мы используем маски для Верхнего/нижнего колонтитула/тела и ColumnOverlay. Per Unity, кажется, что каждая маска занимает как минимум 2 ничьи:

http://forum.unity3d.com/threads/unity-4-6-ui-mask-component-takes-2-draw-calls.279840/

Кроме того, мы, очевидно, используем кучу Unity UI Text и Sprite для рисования всего. Основной характер табличной компоновки в значительной степени означает, что есть несколько слоев объектов Sprite и Text друг на друга (данные ячейки поверх фона ячейки и т.д.). Unity dev, похоже, говорит, что просто нет способа НЕ иметь несколько вызовов при рисовании, когда это происходит, когда движок требует ничьей за "слой"... период.

http://forum.unity3d.com/threads/solved-new-ugui-and-too-many-draw-calls.266631/

Итак... кажется, что, как только у вас есть нетривиальный макет пользовательского интерфейса в Unity UI, вы почти гарантированно получите нетривиальное (10-20) количество обратных вызовов. Это правда? Если это не так, есть ли у кого-нибудь идеи по чему-либо, что мы могли бы сделать, чтобы минимизировать ничьи в нашей таблице?

Обновление 1:

Я смог сократить свои обратные вызовы одним путем инактивации пользовательского элемента "меры", который у меня есть в каждой строке данных. Это в основном взломанный объект "Текст", но я просто использую его для измерения ячеек для определения размеров сетки, и он принимает дополнительный призыв к рисованию. Функции меры действительно отлично работают с отключенным GameObject.

Текущие призывы вызова == 18

Обновление 2:

Нашел большое улучшение. Я упомянул выше, что мой заголовок/нижний колонтитул/тело и колонка "Оверлей" используют маски. Оказывается, мне удалось перестроить мою систему, чтобы включить одну маску на новый элемент корневого уровня и удалить маски в заголовке, колонтитуле и столбце. Теперь у меня есть только маска для этого корневого элемента и тела.

Улучшения масок

Текущие призывы вызова == 13

Обновление 3 [сбои]:

Таким образом, каждая строка содержит это изображение нижней границы, чтобы смещать его от своих братьев и сестер. Я подумал, что, возможно, он печатает "поверх" элементов текста и заставляет лишнюю ничью. Оказывается, нет... это не так.

Также... все мои фоновые элементы изображения не имеют свойства sprite. Они просто используют "null" с применяемым цветом. Я подумал, может быть, если бы я создал один общий "белый" спрайт и применил его ко всем моим объектам с нулевым изображением, он мог бы улучшить доработку и уменьшить мои призывы рисования. Оказывается, нет... это не так.

Текущие призывы вызова == 13