Когда я должен пометить GameObjects как статический?

9

Вот соответствующая документация Unity .

Согласно пояснениям на страницах документации Unity о статических GameObjects, иногда пометка GameObjects как статической может негативно повлиять на производительность (например, статическое пакетирование приводит к большему использованию памяти) .

Так, когда я должен точно хотеть использовать эти функциональные возможности?

Заранее спасибо.

Сноски: В
настоящее время я разрабатываю 2D-игру сверху вниз, в которой много спрайтов и линейных рендеров, но нет 3D-объектов (даже квадраторов). Все GameObjects создаются процедурно из готовых префабов. LineRenderers обновляются из сценариев каждый кадр. И почти все спрайты движутся постоянно. Большинство спрайтов используют один и тот же материал. Все LineRenderers также делятся своими собственными материалами.

С. Тарык Четин
источник
1
НЕ ДЛЯ ДЕРЕВОВ В ЛЕСАХ. Нас укусило это плохо. ДОЛГОЕ время сборки, МАССИВНЫЕ данные на ваших уровнях. Примечание: в документах по этому вопросу особо сказано, что вы не должны использовать его для лесов. :)
Almo
@ Almo Я с мальчиком, могу понять эту боль
Хамза Хасан

Ответы:

6

Не существует жесткого правила относительно того, когда вы должны или не должны делать GameObjects статичными.

По крайней мере, делайте это только для объектов, которые никогда не будут двигаться в течение жизни. Но вы должны знать, что он делает, чтобы оценить, стоит ли вам это делать.

Он замораживает сетку в данных сцены, поэтому у вас нет накладных расходов на GameObject для элемента. Это означает повышение производительности за счет изменения данных сцены во время сборки и дополнительных затрат памяти для окончательно созданного приложения.

Это хорошо во многих случаях, хотя это может вызвать проблемы, например, с лесами. Кроме того, это означает, что вместо однократного хранения вершин для дерева и копий чертежа графического процессора, он должен дублировать эти вершины повсюду. Это занимает время во время сборки и пространство в приложении. Наше приложение выросло с 3-4 ГБ до 300-400 МБ, когда мы сделали деревья не статичными. Время сборки ушло от 3-4 часов до 1 часа.

Сказав все это! Ваша игра 2D, и вам, вероятно, будет полезно установить GameObjects в сценах на статический, если у вас их нет.

Almo
источник
Не делает ли сборный статический экземпляр статичным?
С. Тарык Четин
Нет, если вы создадите их во время выполнения ... Как они могут быть "статичными"? Может я ошибаюсь ... Проверим.
Almo
2
Я только что подтвердил, что, если prefab помечен как статический, экземпляры экземпляров также являются статическими.
С. Тарык Четин
1

Если я скажу вообще, то все, что никогда не будет двигаться (даже пиксель) за всю жизнь приложения, должно помечаться как статическое. Обычно это полезно для запекания огней, для запекания дорожек и т.д.

Что ж, если вы разрабатываете без 3D-объектов, просто расслабьтесь и расслабьтесь. Не нужно беспокоиться о рендеринге в реальном времени, тенях или любых других проблемах. Даже удалить единственный свет приходит с новой сцены;)

Ну, любой может исправить меня, если я ошибаюсь в любом месте.

Хамза Хасан
источник
3
Это действительно неправильно для таких вещей, как леса. Это уменьшает вызовы ... но запекает все деревья в сетку. Это означает, что вместо однократного хранения вершин для дерева и копий чертежа графического процессора он должен дублировать эти вершины повсюду. Это занимает время во время сборки и пространство в приложении. Наше приложение выросло с 3-4 ГБ до 300-400 МБ, когда мы сделали деревья не статичными.
Almo
@ Almo huggggeeeeee разница
Хамза Хасан
Я думаю, вы должны уточнить в начале вашего ответа, что вы рекомендуете это только потому, что это 2D игра.
Almo
@Almo Благодаря вам, теперь я думаю, что статическое дозирование - это опасная вещь, которую нужно трогать, например печь, в которой вы не можете быть уверены, что она горячая или нет. :)
С. Тарык Четин
@ Almo не стесняйтесь редактировать этого брата, если вам это нужно. Иди вперед
Хамза Хасан