Что-то вроде Minecraft на Unity #2. Изменение генерации

Что-то вроде Minecraft на Unity #2. Изменение генерации

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

Как строится чанк: 1. Вначале генерируется id каждого блока в чанке.2. Затем строится Меш (геометрия чанка). Перебираются все блоки.- Если id блока - 0, то этот блок пропускается, и берется следующий блок. - Если id - 1, то нужно нарисовать этот блок. Для этого нужно пройтись по всем блокам, которые соприкасаются с текущим. - Если id соседнего блока - 0, то рисуется стенка (грань куба-блока). - Если id соседнего блока - 1, то стенку рисовать не нужно, так как пользователь ее все равно видеть не будет.

Схематичных пример в 2D формате. Черный - граница чанка, синий - нужно отрисовывать стены, серый - не нужно отрисовывать стены.
Схематичных пример в 2D формате. Черный - граница чанка, синий - нужно отрисовывать стены, серый - не нужно отрисовывать стены.

На примере сверху заметна одна проблема. Мы не знаем нужно ли отрисовывать черные стенки или нет. Для этого нужно обратиться к соседнему чанку и узнать id блоков.
Например блок с координатами (0, 0) - это левый нижний угол. Мы обращаемся к чанку левее и узнаем id блока (3, 0) - это правый нижний угол.
Такой подход имеет много недостатков и делает код сложнее.
Недостатки:
- Нужно сначала сгенерировать id блоков во всех чанках, а потом уже строить чанки.
- Генерировать id блоков нужно и за пределами чанков, которые будут строиться, так как крайние чанки как-то должны строить границы.
- Нужно следить за порядком удаления и появления чанков при перемещении игрока.

Решение. Я нашел его быстро.
Возьмем для примера 2D чанк, размером 4х4 блока. Я буду генерировать id блоков размером 6x6, тем самым мне не нужно будет обращаться к соседним чанкам.
А так как все чанки генерируются по одному алгоритму, то id за пределами чанков будут актуальными и совпадать с id соседних чанков, о чем я говорю:

2 чанка которые являются соседними. Значения, которые выходят за границы чанка, являются значениями на границе соседнего чанка. Я выделил одинаковым цветом одни и те же значения.
2 чанка которые являются соседними. Значения, которые выходят за границы чанка, являются значениями на границе соседнего чанка. Я выделил одинаковым цветом одни и те же значения.

Всем спасибо за внимание! Переходите в мой телеграмм канал по этой игре.

1
1
2 комментария