Восстановление проекта и подготовка к генерации
Необходимо исправить несоответствие размеров блоков земли единице сетки в Unity. Блоки имели ширину, отличную от одного юнита, что затрудняло генерацию. Проблема решается установкой значения Pixels Per Unit в настройках спрайта, равного ширине спрайта в пикселях (в данном случае 128). Это выровняет спрайты по сетке, упрощая дальнейшую работу. Рекомендуется использовать инструмент Snap и привязку к сетке для удобства перемещения спрайтов.
Исправление ошибок и оптимизация
Обнаруженные проблемы:
- Отсутствие физики у персонажа, из-за чего он не взаимодействует с землей.
- Неэффективные коллайдеры: использование одного большого коллайдера для всей земли не подходит для генерации. Оптимальным решением является создание отдельных коллайдеров для длинных прямых полосок земли для повышения производительности.
- Все объекты должны иметь целые координаты для правильного выравнивания по сетке.
Проблемы решены: восстановлен компонент физики персонажа, используются отдельные коллайдеры. Корнем сетки будет объект, содержащий объекты с целыми координатами.
Создание генератора ландшафта
Генерация ландшафта выполняется в несколько этапов:
- Создание базового элемента: Создается пустой белый спрайт-квадрат, представляющий ячейку ландшафта. Он превращается в префаб.
- Выбор метода генерации: Используется компонент TerrainGenerator. Создается простой генератор, формирующий рельеф без сложных элементов (пещеры будут добавлены позже). Генерация происходит в редакторе Unity.
- Структура генератора: Создается поле (field) для размещения тестового спрайта (префаба ячейки). Генератор — компонент Unity, наследующий от MonoBehaviour.
- Алгоритм генерации: Ландшафт генерируется построчно. Каждая ячейка сдвигается относительно предыдущей на +1 или -1 по оси Y, создавая плавный рельеф. Начальная точка задается вручную, с возможностью перемещения объекта-родителя генератора.
- Настройка параметров: Ширина и высота генерируемой зоны настраиваются в инспекторе.
- Добавление изгибов: Для естественности рельефа к значению Y добавляется случайное число от -1 до 1 с определенной периодичностью (каждый второй или четвертый шаг), чтобы избежать резких перепадов высот.
Заполнение ячеек и дальнейшие планы
Генерация происходит путем создания дочерних объектов (ячеек) относительно объекта-родителя генератора. Для заполнения ячеек по высоте используется вложенный цикл. Высота генерируемой земли контролируется переменной groundY. Алгоритм уточняется для избежания резких перепадов высот.
В последующих уроках будут добавлены: детализация ландшафта, улучшенный редактор генератора с настройкой зон генерации и, возможно, генерация пещер.