Уровни в игре я решил сделать в виде комнат соединенными мостами. Что-то подобное вы можете увидеть в игре - Soul Knight, только у меня в 3D.
Трудность была в том, что комнаты должны быть разного размера. Сам размер комнат сделать разным задача на одну строчку, а вот соединить их между собой оказалось не просто.
Опыта в подобном у меня опыта мало, поэтому решил сделать так как придумал своей головушкой.
В общем поехали!
Начинается все с одной комнаты, у которой есть 4 возможных позиции спавна, которые занесены в лист, следующей комнаты. Позиции спавна - красные ромбики.
Когда комната спавнится - позиция удаляется с листа и деактивируется в игровой области(не удаляется) и после в лист заноситься такие-же позиции со второй комнаты. На скрине вы видите 6 возможных позиций для спавна комнаты.
Так можно заспавнить бесконечное количество комнат, пока Unity не скажет вам пока. На видосе в начале их около 30.
Как уже писал у каждой комнаты свой размер и поэтому нужно было вычислять размер моста, который будет соединять комнаты между собой.
Вопрос с мостами я решил так - на краях комнаты есть объекты генерации моста , на стороне созданной комнаты активируется тот самый объект.
На нем включается скрипт и он детектит такой же объект в комнате напротив и после создания моста - выключается. Размер моста равен позиция второго объекта - позиция первого объекта, а позиция - это центр между этими точками.
После полной генерации уровня, все оставшийся позиции спавна и объекты генерации мостов деактивируется, чтобы не засорять мапу.
Чёт припоминаю что есть куча готовых алгоритмов для генерации, при этом достаточно мощных, почему бы ими не воспользоваться?
Потому что если все время пользоваться готовым, то ничего нового крутого не изобретешь. Иногда нужно делать велосипед.
Кодзиме объяснять приходится это, ппц)
Готовое зачастую имеет две проблемы: оно или избыточно, или недостаточно. А иногда и то и другое одновременно.
Либо генератор Вселенной со всеми физическими законами, либо генератор квадрата, третьего не дано.)
Козя, ты сам воспользовался готовой картой Америки и Ридус у тебя за 10 минут полштата проходил. Не стыдно было после релиза?
Если вы не стеснены временем или ресурсами, это самый верный способ. При всех естесственныфх минусах переизобретений велосипеда, присутствуют весомые плюсы: саморазвитие изобретателя и дружелюбное отношение к будущему переписыванию собственных решений.
Решения по генерации сильно связаны с особенностями и требованиями игры. Это же не Speed Tree - сгенерил красивое деревце и воткнул как декор.
Для многих решений разбираться и допиливать придется больше, чем пользы получишь.
Не всегда, конечно, нужно смотреть.
правильно я понимаю, что центры комнат всегда находятся на определенной сетке? (см.скрин) может тогда проще настроить алгоритм именно на генерацию ячеек в такой сетке? в этом случае у тебя будет больше контроля
Ага, ясно.
По поводу хранения сетки. Сейчас у тебя комнаты добавляются в какой-то список-дерево скорее всего. Из-за этого будет очень сложно добавить дополнительные проходы между комнатами, которые были созданы на разных этапах построения дерева. Мне кажется, именно поэтому у тебя получаются очень длинные ветки-туннели, которые никак между собой не соединены. По геймплею такое очень сложно играется обычно.
Если же хранить именно таблицу i-j, и просто заполнить её ячейками-комнатами, тогда строить проходы между ними можно разными способами и с бОльшим контролем происходящего.
В целом я люблю велосипеды. Поэтому поддерживаю твоё начинание! Буду следить за развитием алгоритма.
Комментарий удален
Длинные тупиковые кишки (привет Торгаст) это попытка вывести из себя игрока. Не надо так.
побуду токсиком) это самый типичный алгоритм построения тупиковых лабиринтов и алгоритмов таких на ютубе полно. даже с "авторской" идеей про точки спавна.
к сожалению, играть в такое вообще не интересно, я сам так делал на какой-то из джемов.
только я не делал мостов, не знаю зачем игроку видеть как соединяются эти комнаты. разве что это заложено геймплеем
Как-то тоже игрался с генерацией комнат. Развивайте дальше концепт. "Мост" это всего лишь условность, он же является комнатой. Которому можно менять размеры вторым проходом генерации. А ещё "мост" можно использовать для объединения комнат в одну... Удачи