Генерация уровней в игре как в 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

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

42
21 комментарий