Что-то вроде Minecraft на Unity #2. Изменение генерации
Вот такого результата я достиг на данный момент. Теперь чанки генерируются бесконечно в зависимости от положения игрока, а так же удаляются далекие от игрока чанки.
Видео "геймплея" можно посмотреть в моем телеграмм канале (ссылка внизу статьи).
Я немного изменил подход построения чанков. Об этом подробнее ниже.
Как строится чанк: 1. Вначале генерируется id каждого блока в чанке.2. Затем строится Меш (геометрия чанка). Перебираются все блоки.- Если id блока - 0, то этот блок пропускается, и берется следующий блок. - Если id - 1, то нужно нарисовать этот блок. Для этого нужно пройтись по всем блокам, которые соприкасаются с текущим. - Если id соседнего блока - 0, то рисуется стенка (грань куба-блока). - Если id соседнего блока - 1, то стенку рисовать не нужно, так как пользователь ее все равно видеть не будет.
На примере сверху заметна одна проблема. Мы не знаем нужно ли отрисовывать черные стенки или нет. Для этого нужно обратиться к соседнему чанку и узнать id блоков.
Например блок с координатами (0, 0) - это левый нижний угол. Мы обращаемся к чанку левее и узнаем id блока (3, 0) - это правый нижний угол.
Такой подход имеет много недостатков и делает код сложнее.
Недостатки:
- Нужно сначала сгенерировать id блоков во всех чанках, а потом уже строить чанки.
- Генерировать id блоков нужно и за пределами чанков, которые будут строиться, так как крайние чанки как-то должны строить границы.
- Нужно следить за порядком удаления и появления чанков при перемещении игрока.
Решение. Я нашел его быстро.
Возьмем для примера 2D чанк, размером 4х4 блока. Я буду генерировать id блоков размером 6x6, тем самым мне не нужно будет обращаться к соседним чанкам.
А так как все чанки генерируются по одному алгоритму, то id за пределами чанков будут актуальными и совпадать с id соседних чанков, о чем я говорю:
Всем спасибо за внимание! Переходите в мой телеграмм канал по этой игре.