Я копался в документации по функции Tilemap в Unity 2017.2.
Ограничивает ли Unity максимальное количество плиток, которые оно будет поддерживать для конкретной сетки тайлкарт?
Я знаю, что каждый фрагмент создается один раз и используется для текстурирования четырехугольников на сетке Tilemap во время выполнения, поэтому я предполагаю, что предел количества квадов сетки в конечном счете зависит от аппаратного обеспечения и более или менее произвольно высок.
Это правильное предположение, или в двигателе жесткая крышка?
Ответы:
Ваша RAM - это ваш предел .
Следующие тесты были выполнены в системе с этими спецификациями:
Вот скрипт, который я запустил, который увеличивает карту листов, заполняя ее одной плиткой (32x32 пикселей). Метод
Grow()
добавляет еще один столбец и еще одну строку к текущей карте. Метод вызывается 100 раз при каждом обновлении.Через несколько минут на моем компьютере не хватило памяти, и Unity упала. На тот момент он составлял 8400x8400 (70 миллионов) тайлов, а Unity.exe занимал чуть более 11 ГБ ОЗУ, согласно диспетчеру задач.
Ну, а как насчет разреженных карт?
Вот другой скрипт, который помещал одну плитку с увеличением координат x и y с шагом 100 плиток:
Объем памяти Unity.exe фактически увеличился очень мало, что намекает на то, что пустым ячейкам набора тайлов почти не требуется ОЗУ. Тем не менее, FPS продолжал падать по мере роста набора тайлов. Он достиг 60 кадров в секунду при 30000x30000, 30 кадров в секунду при 60000x60000 и 15 кадров в секунду при 90000x90000. Fps оставался таким низким, когда я убрал скрипт, когда тестовая игра была запущена. Так что это замедление не было связано с изменением карты тайлов. Это было просто от рендеринга. Поэтому, когда вы хотите создать действительно огромную игру с открытым миром, вам, возможно, придется использовать несколько небольших мозаичных карт, которые вы создаете и уничтожаете во время выполнения.
Выводы: Огромные, но в основном пустые карты тайлов не используют много оперативной памяти, но они являются узким местом рендеринга , даже когда большая часть этого не находится в области просмотра камеры.
Затем я поэкспериментировал с этим сценарием, который генерирует мозаичные карты с заданным размером:
Я использовал этот скрипт для генерации карты 8192x8192. Это заняло несколько минут, но когда сценарий был закончен, он работал со стабильными 95 кадрами в секунду.
Вывод: карты с миллионами плиток возможны, по крайней мере, на игровых ПК .
источник
Update
метод во время генерации, игра и редактор Unity останавливаются до завершения генерации. Если вы хотите, чтобы ваша игра реагировала на генерацию карт, переместите поколение в сопрограмму, которая генерирует один блок за раз и уступает между ними.