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

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

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

Начальная комната <a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Ft.me%2Fpininegames&postId=269217" rel="nofollow noreferrer noopener" target="_blank">WhatIsLove</a>
Начальная комната WhatIsLove

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

Спавн одной комнаты <a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Ft.me%2Fpininegames&postId=269217" rel="nofollow noreferrer noopener" target="_blank">WhatIsLove</a>
Спавн одной комнаты WhatIsLove

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

Демонстрация объектов для генерации мостов <a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Ft.me%2Fpininegames&postId=269217" rel="nofollow noreferrer noopener" target="_blank">WhatIsLove</a>
Демонстрация объектов для генерации мостов WhatIsLove

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

4242
25 комментариев

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

4
Ответить

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

22
Ответить

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

8
Ответить

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

3
Ответить

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

1
Ответить

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

Ответить

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

Ответить