Pull to refresh

Comments 14

UFO landed and left these words here

Да, пустую зону можно сделать так - после генерации карты, случайным образом выбрать на ней область произвольного размера и соединить все клетки между собой, входящие в эту область. Аналогично для заполненных зон, только тогда, напротив, убирать соединения.

Касаемо замечания - я хотел охватить тему генерации лабиринтов как можно более полно, с кратким описанием генерации мешей и ссылкой на статью, где эта тема раскрывается далее. Возможно, кому-нибудь это будет полезным, кто ранее не изучал процедурную генерацию.

UFO landed and left these words here

Да, нужно будет выкачивать репозиторий и открывать в unity. Чуть позже попробую собрать билд.

Тогда можно просто рандомом накидать зон, рандомом поставить ключевые точки (боссы там, сундуки, etc) и А* через ключевые точки искать путь. Но это уже не столько генерация, сколько реализация геймдизайна, который вне рамок статьи, хотя просто упомянуть можно.

UFO landed and left these words here

Здесь также не описаны методы подсчёта uv-координат сетки, на такие лабиринты не получится наложить текстуру.

Хм, а разве в Unity нет какого-нибудь группового UVW-наложения (как в том же 3ds Max, например, через модификатор)?

Действительно интересно. Всё хочу "пощупать" Unity, но пока всё никак руки не доходят.

Я был не совсем точен. В цитате выше я имел ввиду, что, используя стандартный шейдер, не получится отобразить текстур, поскольку процедурная сетка не имеет UV-координат. Но в таком случае можно рендерить текстуру через трипланарный шейдер.

используя стандартный шейдер, не получится отобразить текстур, поскольку процедурная сетка не имеет UV-координат. Но в таком случае можно рендерить текстуру через трипланарный шейдер.

Да, спасибо, теперь понятнее.

А то я уж было испугался, что в принципе никак невозможно текстурить процедурные объекты. )

При создании геометрии можно кроме вершин и трисов писать uv/uv2/uv3 для текстур и нормали в вершинах (хотя нормали можно и встроенным методом пересчитать).

Увидел этот пост в ленте и я буквально БЛИН Я ЖЕ ДЕЛАЛ ЭТО В МАЙНКРАФТЕ 10 лет назад. У тебя какой-то слишком сложный код, не дочитал до конца ибо спринт к дедлайну закончил только вот, но поделюсь своей методикой.

Нашел где-то на англоязычных ресурсах статью и повторил следующее - берём залитый целиком массив и запускаем "крота" - он ходит в случайные не залитые стороны на два. Если все 4 стороны залиты, то телепортируемся в другое четное место. Если все позиции четные залиты, значит лабиринт готов. Как-то так. Смог это в плагине воплотить через вырезание блоков, а за основу брал бетонные блоки 101*101, всегда работало, был вход и выход.

Понастольгировал.

Это точно статья про генерацию лабиринта, а не про генерацию мешей рантайм без поддержки текстурирования и освещения?

ИМХО, было бы лучше 90% статьи про геометрию заменить на простенькую расстановку префабов стен/пола

А в идеале ещё и сделать в генерации дополнительные поля, описывающие тип клетки, чтобы было понятнее, что тут можно добавлять вариативность визуала/будущих механик и как расширять генератор объектов.

Я не описал расчёт uv-координат, поскольку не реализовывал его в игре, хотя, безусловно, это возможно сделать.

ИМХО, было бы лучше 90% статьи про геометрию заменить на простенькую расстановку префабов стен/пола

В игре я использую именно такой вариант потому, что в ней существуют другие формы лабиринтов - треугольные, шестиугольные и круглые. Если первые два ещё можно сформировать из примитивов, то с последним у меня сомнения. Но если брать общий случай, вне контекста игры, то вариант с префабами может быть альтернативой, по крайней мере для прямоугольных лабиринтов.

Дело не в "в случае круглых лабиринтов". Статья называется не "генерация мешей рантайм", а "процедурная генерация лабиринтов". Поэтому 90% статьи про генерацию мешей тут лишние и слишком сложные для примера.

Sign up to leave a comment.

Articles