Генерация уровней в игре как в Soul Knight

Пример генерации карты WhatIsLove

Уровни в игре я решил сделать в виде комнат соединенными мостами. Что-то подобное вы можете увидеть в игре - Soul Knight, только у меня в 3D.
Трудность была в том, что комнаты должны быть разного размера. Сам размер комнат сделать разным задача на одну строчку, а вот соединить их между собой оказалось не просто.
Опыта в подобном у меня опыта мало, поэтому решил сделать так как придумал своей головушкой.
В общем поехали!

Начальная комната <a href="https://t.me/pininegames" rel="nofollow noreferrer noopener" target="_blank">WhatIsLove</a>
Начальная комната WhatIsLove

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

Спавн одной комнаты <a href="https://t.me/pininegames" rel="nofollow noreferrer noopener" target="_blank">WhatIsLove</a>
Спавн одной комнаты WhatIsLove

Когда комната спавнится - позиция удаляется с листа и деактивируется в игровой области(не удаляется) и после в лист заноситься такие-же позиции со второй комнаты. На скрине вы видите 6 возможных позиций для спавна комнаты.
Так можно заспавнить бесконечное количество комнат, пока Unity не скажет вам пока. На видосе в начале их около 30.
Как уже писал у каждой комнаты свой размер и поэтому нужно было вычислять размер моста, который будет соединять комнаты между собой.

Демонстрация объектов для генерации мостов <a href="https://t.me/pininegames" rel="nofollow noreferrer noopener" target="_blank">WhatIsLove</a>
Демонстрация объектов для генерации мостов WhatIsLove

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

2.3K2.3K открытий
25 комментариев

Чёт припоминаю что есть куча готовых алгоритмов для генерации, при этом достаточно мощных, почему бы ими не воспользоваться?

Ответить

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

Ответить

Готовое зачастую имеет две проблемы: оно или избыточно, или недостаточно. А иногда и то и другое одновременно.

Ответить

Ну у этой задачи на самом деле будет куча вариантов по решению. Автор воспользовался интуитивным решением, оно работает и ему подходит. Почему бы и нет. Со своим решением по крайней мере всегда будет проще работать

Ответить

Комментарий недоступен

Ответить

мне захотелось сделать самому, это как раз то что мне нужно ни больше ни меньше. Ну и плюс дальше будет проще дорабатывать.

Ответить

Решения по генерации сильно связаны с особенностями и требованиями игры. Это же не Speed Tree - сгенерил красивое деревце и воткнул как декор.
Для многих решений разбираться и допиливать придется больше, чем пользы получишь.
Не всегда, конечно, нужно смотреть.

Ответить