Объединить подложу карты в Unity2d из множества случайных спрайтов в один
Я еще начинающий в Unity и пытаюсь сделать пошаговую игру 2D. Карта, сгенерированная при старте игры случайно из 1200 шестиугольников(Prefab), выглядит довольно громоздко. Есть идея занести все данные сетки в отдельный объект, а спрайты создавать как один, склеенный из всех в начале игры(карта не будет меняться в процессе). Единственный найденный способ - создать текстуру из пикселей спрайтов, но переносить по пикселям получается еще дольше. Возможно в Unity есть еще что-то для этого? Или же все варианты склейки спрайтов будут более громоздкими чем просто отрисовать 1200 спрайтов? Буду рад, если подскажете куда копать и стоит ли.
Ответы (1 шт):
У обоих вариантов свои но.
Сгенерировать текстуру можно. Точнее текстуры, лучше всё-таки её распилить на сектора. Texture2D.Apply должен быть только один, это самая грузная операция. Так-же нужно не забывать уничтожать сгенерированные текстуры, кода они уже не нужны (например смена уровня), чтобы они не висели в памяти Destroy(YourGenericTexture)!
Тут ещё важно знать правило выделения памяти под размер картинки. Память выделяется под размеры 2, 4, 8, 16, 32, 64, 128 и т.д. То-есть картинка 600x600 в памяти займёт столько-же как 1024x1024. Размеры сектора должны это учитывать.
Вот только проблема в шестигранности. При нанесении пикселей они будут пересикаться и нужно, что бы новый шестигранник не перезатерал тестуру прозрачными пиксели, спрайт то квадратный и условия наложения будут существенно тормозить процесс генерации текстур. Но есть вариант, после того, как уровень готов, сгенерировать всё заранее и в итоговой игре использовать заготовки, тогда время генерации значения не имеет, но с тем же успехом это можно сделать и в фотошопе, поскольку ставить это на рельсы для начинающего трудновато.
Вариант с 1тайл-1спрайт тоже имеет право на жизнь. Но тысячи это конечно перебор. В данном случае объекты с спрайтами не должны содержать вообще никакой игровой логики, игра должна работать, да же если их нет. Это нужно для того, чтобы поделить карту на чанки и иметь возможность удалять и спавнить визуальное представление чанка (спрайты) которые попадают или выходят из поля зрения камеры при её движении. В этом случае игровая карта может быть невироятных размеров, но это не выльется в миллионы объектов на сцене. Для этого тоже некий навык нужен.
Например в том-же майнкравте вся карта состоит из чанков размером 16x16x256 блоков.
Начал программировать, молодец, добро пожаловать в ад. Мне кажется с обоих способов тебе охота на стенку полезть, но ещё есть какой-то Tilemap-Hexagonal. Ни сразу о нём вспомнил, никогда не пользовался родными Tilemap юнити и ничего про них сказать не могу, но скорее всего тебе самое оно ?.