Генерация подземелья как в Binding of Isaac [Unity 3D] [Tutorial]

  Рет қаралды 47,162

Emerald Powder

Emerald Powder

Күн бұрын

Пікірлер: 125
@alexeyrival
@alexeyrival 5 жыл бұрын
Отличный видос! Всё понятно, без воды и со всем самым нужным! Жду следующий видос в этой серии!)
@МирославМалюсейко
@МирославМалюсейко 4 жыл бұрын
Видео отличное.) Очень полезная инфа. У кого не работает ElementAt, нужно подключить System.Linq. Потому как на видео она вроде не подключена, но этот метод вроде лежит там.
@ЮстинРибінский
@ЮстинРибінский 3 жыл бұрын
Дай бог тебе здоровья за эту подсказку
@TypicalRabbit
@TypicalRabbit 5 жыл бұрын
Слишком мало подписчиков для такого качества видео....
@EmeraldPowder
@EmeraldPowder 5 жыл бұрын
Спасибо! Надеюсь дальше будет больше с:
@andrewmolotkoff4231
@andrewmolotkoff4231 4 жыл бұрын
Оно же и к лучшему, от автора не требуют постоянного выпуска контента, что в свою очередь положительно отражается на качестве!
@vindastris4982
@vindastris4982 4 жыл бұрын
@@EmeraldPowder может ребрендинг? Название канала тяжело запоминать. Хотя не уверен, что это значимо. Но то, что на слуху, проще запоминать.
@ShrekPNG
@ShrekPNG 4 жыл бұрын
@@vindastris4982 я тот человек, который два месяца думал, что название канала "Emerald power"
@stasaleksandrovich7770
@stasaleksandrovich7770 4 жыл бұрын
@@ShrekPNG +++
@vegas5955
@vegas5955 5 жыл бұрын
Процедурная генерация очень интересная тема! Хорошие ролики пилишь, гуд джоб!
@unity4025
@unity4025 3 жыл бұрын
Либо после python сложно переварить, либо я тупой, но со второго раза понял схему. Осталось только усовершенствовать для комнат разных размеров и частоты появления комнат. Спасибо большое:))))
@krutetskiy
@krutetskiy 5 жыл бұрын
Невероятно интересно. Большое спасибо.
@Fantom-4512
@Fantom-4512 3 жыл бұрын
Автор, спасибо за труды! Низкий поклон!)
@mdayzz
@mdayzz 5 жыл бұрын
Прекрасное видео. Подписка и лайк
@НикитаМакаров-ы2ъ6к
@НикитаМакаров-ы2ъ6к 6 ай бұрын
На осознание и реализацию данной схемы у меня ушло 6 часов. Сейчас сижу довольный, генерирую данжи. Возьму, пожалуй данный метод для своего дипломного проекта, вы ведь не против?)
@TheDaroxeRig
@TheDaroxeRig 4 жыл бұрын
Лайк Было бы интересно увидеть сложный вариант генерации
@АлесьЖ-б8ж
@АлесьЖ-б8ж 4 жыл бұрын
Насколько сложный?
@Obelardos2
@Obelardos2 5 жыл бұрын
Интересно будет про генерацию не по сетке
@pivovar7992
@pivovar7992 4 жыл бұрын
Спасибо! ))))))))
@360cl3
@360cl3 4 жыл бұрын
Я посмотрел видос и мне понравилось, но как можно сделать коридоры между комнатами как в Enter the gungeon? Буду благодарен если ответишь :D А и ещё! Этот код подходит под 2д игры?
@EmeraldPowder
@EmeraldPowder 4 жыл бұрын
Для 2д игры - да, подходит практически без изменений Этот алгоритм в основном для комнат одинакового размера, как в первом Айзеке скорее. Можно туда вкрутить ещё комнаты в два раза длиннее/шире, но если хочется ещё коридоры наверное лучше придумать что-нибудь другое, где у комнат может быть любой размер
@Alexey_Pe
@Alexey_Pe 3 жыл бұрын
Забавно, я использую ue4, а не Unity, но всё равно смог чему то научиться, вообще не знал про префабы (ну в ue4 их и нет, у нас по другому))
@LIMONCHIK948
@LIMONCHIK948 Жыл бұрын
Видео топ но у меня при открытее проекта ничего не работает
@qNighthockp
@qNighthockp 3 жыл бұрын
А можно генерацию для комнат разных размеров?)
@ИльяАндреевичДиденко
@ИльяАндреевичДиденко 4 жыл бұрын
Круто, спасибо. С размещением комнат правда не очень понятно.. много ифов. Запутывают
@timetimer6429
@timetimer6429 2 жыл бұрын
как сделать так, чтобы комната с боссом спавнилась ровно 1 раз?
@wave1249
@wave1249 3 жыл бұрын
этот код работает для 2д юнити и работы со спрайтами?
@zloy_kak_tus
@zloy_kak_tus 2 жыл бұрын
Автору респект. А подскажите кто-нибудь, как сделать чтоб одна из комнат заспавнилась только один раз а остальные рандомно?
@EnotoButerbrodo
@EnotoButerbrodo 2 жыл бұрын
Сделай переменную булевую. Когда спавнишь комнату - меняешь ее. Если изменена, то ее больше не спавнишь. При сппвне ее проверяй
@Axil-ww
@Axil-ww 4 жыл бұрын
Это все конечно хорошо, но такое количество GameObject на каждый кубик - это плохо. Если у тебя стенки или пол комнаты не меняются - слей все кубики в один mesh. Кроме того если рисовать весь кубик у тебя будет бешеный Ower Draw.
@EmeraldPowder
@EmeraldPowder 4 жыл бұрын
Да, у меня там совсем не оптимально это всё, так в продакшен не надо выкладывать. По хорошему если бы я планировал релизить эту игру то надо было бы эти комнаты собрать либо в 3д редакторе, чтобы весь пол и плоские стены были одним полигоном, или с помощью какого-нибудь ProBuilder. Есть ещё плагины которые прямо одним кликом все меши в один склеивают, но не уверен насколько они хорошо работают. Но так как туториал не про это, позволил себе на уровне прототипа сделать
@EvsBeat
@EvsBeat 4 жыл бұрын
Не могу перетянуть префабы в массив в инспекторе. В чем может быть проблема?
@EmeraldPowder
@EmeraldPowder 4 жыл бұрын
Значит тип объекта не совпадает с типом поля куда перетаскиваешь. Скорее всего на объектах не висит компонент Room, или тип переменной не тот
@EvsBeat
@EvsBeat 4 жыл бұрын
@@EmeraldPowder Большое спасибо!)) Помогло, кинул скрипт на уровни и заработало. Теперь мучаюсь с другой проблемой генерация только горизонтальная и комнаты одна на другую накладываются. Видимо с vacantPlaces накосячил)
@EvsBeat
@EvsBeat 4 жыл бұрын
Все разобрался это я дурной) у меня 2д а комнаты спавнились по оси z))
@_lucky_8851
@_lucky_8851 4 жыл бұрын
ссылку на ассеты пж
@rafik5179
@rafik5179 3 жыл бұрын
1 Диз, впервые я вижу такую силу
@GameWorldMrKIller
@GameWorldMrKIller 4 жыл бұрын
Боже мой, а делать комнату уровня из таких блоков, это же жесть, типо оптимизация херовая же, я бы просто смоделил в бленедре комнаты, и текстуры рамдомизировал через шумы
@EmeraldPowder
@EmeraldPowder 4 жыл бұрын
Согласен, комнаты совсем не оптимизированные, как и в прошлом видео чанки из этих же блоков. Но эти блоки у меня уже были готовые, чтобы на их примере рассказать про генерацию, а с серыми кубами не хотелось видео снимать, так что это просто для примера
@ИвановМаксим-ф8б
@ИвановМаксим-ф8б 5 жыл бұрын
А что за тип переменной, или хз что: Room. Как я понял это скрипт, есть видео где этот Room?
@EmeraldPowder
@EmeraldPowder 5 жыл бұрын
Это просто скрипт, который висит на каждой комнате-чанке. Он на 1:33 появляется, там немного кода из прошлого туториала, цикл который рандомно вращает кирпичики, чтобы смотрелось интереснее. А потом где-то на 8:40 ещё туда добавляем переменные со ссылками на двери этой комнаты, чтобы их было легко из скрипты получить
@ИвановМаксим-ф8б
@ИвановМаксим-ф8б 5 жыл бұрын
@@EmeraldPowder Спасибо :) Автору канала респект, дружелюбный :)
@ИвановМаксим-ф8б
@ИвановМаксим-ф8б 5 жыл бұрын
@@EmeraldPowder Что делать если ошибка с ElementAt? "HashSet" Не содержит определения для "ElementAt"
@EmeraldPowder
@EmeraldPowder 5 жыл бұрын
@@ИвановМаксим-ф8б Надо using System.Linq; написать, или в студии на лампочку нажать, чтобы библиотеку подключить
@ИвановМаксим-ф8б
@ИвановМаксим-ф8б 5 жыл бұрын
@@EmeraldPowder Спасибо :) Пытаюсь учится...
@yarichi
@yarichi 5 жыл бұрын
Сделай пожалуйста генератор ландшафта
@EmeraldPowder
@EmeraldPowder 5 жыл бұрын
Думаю скоро сделаю видео, как раз сейчас пытаюсь сделать красивый генератор
@bonbuasan
@bonbuasan 4 жыл бұрын
Можна такой же урок но для unreal ?
@EmeraldPowder
@EmeraldPowder 4 жыл бұрын
В нём я особо не разбираюсь, пару раз садился разобраться, но через несколько дней возвращался к удобной и привычной Unity
@bonbuasan
@bonbuasan 4 жыл бұрын
@@EmeraldPowder Жаль ,что такой чудесный контент доступен только для разработчиков на Unity)
@philainel
@philainel 3 жыл бұрын
@@bonbuasan в разработке ведь важна логика, просто открываешь доки и сопоставляешь по каждой строчке
@artemzh27
@artemzh27 3 жыл бұрын
Братан, не пропадай! У тебя на видео один (!!!) дизлайк =)))
@The_Mavrik
@The_Mavrik 4 жыл бұрын
пипец как интересно и познавательно, но сука мозг плавиться, как ты сам в этом не запутался?
@EmeraldPowder
@EmeraldPowder 4 жыл бұрын
Спасибо. Со временем большие объёмы кода начинают пугать всё меньше, привыкаешь)
@GluukyBoii
@GluukyBoii 4 жыл бұрын
Раньше тоже плавился))
@slava7522
@slava7522 4 жыл бұрын
Автор, огромное спасибо за твои труды, очень годный контент) Взял за основу твой код из видео и перевел немного в другую механику +2д, объясняешь очень понятно, так что проблем даже не появилось)
@who_am_i3901
@who_am_i3901 4 жыл бұрын
Привет, а у вас случайно не остался исходник с генерацией подземелья?
@npoctobblpogok3730
@npoctobblpogok3730 8 ай бұрын
По-моему единственный чел который объясняет норм генерацию. Я искал для UE5, но думаю тут похожая схема, на плюсах разберусь. Главное логику понять. А ты ее объясняешь. Спасибо.
@bubbletop1135
@bubbletop1135 5 жыл бұрын
Отличный формат видео, без программистически-математических терминов. Про процедурную генерацию видео заходят! Хотелось бы услышать про генерацию на основе шума Перлина, спасибо за видос!
@EmeraldPowder
@EmeraldPowder 5 жыл бұрын
Спасибо! Да, как раз думаю об этом в следующей серии, ладшафты на основе какого-нибудь шума, если у самого получится классный генератор
@rentil_ld
@rentil_ld 2 жыл бұрын
Для тех кто взял этот код для 2д проекта и у кого проблема с спавном комнат друг в друге,тут прикол в том что надо в скрипте поменять Vector3 на Vector2 и тогда комнаты будут спавниться нормально,еще данная функция поворота комнат не корректно работает в 2д,лично я ее убрал и добавив больше вариантов комнат работает +- как и надо
@костантинденисов
@костантинденисов 3 жыл бұрын
А как быть например если комнаты разного размера. У них ведь не выйдет задать определённый вектор
@risve_gliato7239
@risve_gliato7239 7 ай бұрын
А что делать если у меня комнаты спавняться в друг друге
@blettualet3567
@blettualet3567 5 жыл бұрын
*не скачивается оставь норм ссылку пж*
@itshcolnik4627
@itshcolnik4627 5 жыл бұрын
а нет все норм качается (мой 2 акк)
@The_Mavrik
@The_Mavrik 5 жыл бұрын
них не понятно, но очень интересно =)
@ivanryabinin6975
@ivanryabinin6975 3 жыл бұрын
а что делать если комнаты спавнятся только по горизонтали и накладываются друг на друга?
@ZkeeeRus
@ZkeeeRus 2 жыл бұрын
Незнаю, нужна ли тебе эта информация, но я столкнулся с этой проблемой тоже. Тк я не смог ввиду ограничения версии юнити использовать ?. я кинул try{}catch{}, возможно как и ты, мне помогло 4 таких конструкции на каждую проверку. Но! Возможно также проблему вызывало что (как мне показалось) сначала создается дверь для соседа, а только после комната ложится в массив комнат.
@BigPapochka12
@BigPapochka12 4 жыл бұрын
0 дизов уважение! Очень интересно
@Tezla0
@Tezla0 5 жыл бұрын
Предлагаю в следующий раз сделать генерацию лабиринта с входом и выходом (должна быть возможность выйти из лабиринта, а не просто тупая генерация).
@EmeraldPowder
@EmeraldPowder 5 жыл бұрын
Да, думаю про генерацию лабиринтов видео тоже зайдёт в эту серию, как раз недавно делал игру с лабиринтами
@gardencorpse8114
@gardencorpse8114 4 жыл бұрын
Супер круто, особенно, когда на фоне тихо играли треки из OST Skyrim. Как я понимаю спавн предметов, осуществляется по той же системе как и с фонарями в комнатах, или там есть свои "подводные камни"?
@EmeraldPowder
@EmeraldPowder 4 жыл бұрын
Да, всякие монетки/лут/сундуки можно теми же скриптами спаунить. Если нужна какая-то хитрая логика то можно конечно много вариантов ещё придумать, просто спаунить и искать им рандомное положение, или смотреть на какие-то другие параметры и подстраивать шанс спауна, тут уже от игры зависит
@qterrian4118
@qterrian4118 3 жыл бұрын
Вопрос наверное глупый , но из-за чего префабы комнат не хотят/не могут попасть в "RoomPrefabs" и "StartingRoom" в инспекторе? Код такой же, как у вас.
@albertmikhalev8931
@albertmikhalev8931 3 жыл бұрын
На префаб повесьте скрипт Room, тогда все будет ок, если еще актуально)
@arterium2564
@arterium2564 5 жыл бұрын
Супер! Дальнейшего развития.
@traderslick9763
@traderslick9763 5 жыл бұрын
Может, это упоминалось ранее, но можно ли в юнити прогружать небольшие локации мгновенно, примерно как в antichamber?
@EmeraldPowder
@EmeraldPowder 5 жыл бұрын
Смотря как локация сохранена - если как у меня префаб, то да, просто Instantiate работает почти мгновенно, если конечно не очень большой префаб. Но если большой то на несколько можно разбить. А если локация в отдельной сцене - то можно вызывать SceneManager.LoadSceneAsync, он не создаёт фриза при переключении
@traderslick9763
@traderslick9763 5 жыл бұрын
@@EmeraldPowder, спасибо! =)
@lgsmdlgsmdn2581
@lgsmdlgsmdn2581 Жыл бұрын
8:04
@aanxis4241
@aanxis4241 4 жыл бұрын
Добрый день! Ответьте пожалуйста, если GetLength(0)(он же x) возвращает количество строк, то почему при проверки ячеек (комнат поблизости), например "if (x > 0 && SpawnedRooms[x - 1, y] == null)" он проверяет левую ячейку, хотя по факту, должен проверять верхнюю ячейку, так как получиться [4, 5], то есть 4 строка и 5 столбец, не могу понять!!Помогите! Если судить по координатам x и y, то в принципе логично, но тут массив и проверка ячеек происходит!
@EmeraldPowder
@EmeraldPowder 4 жыл бұрын
Добрый. В двумерных массивах мы сами решаем первое число будет строчкой или столбцом, я тут решил что первая координата будет x, то есть по сути номер столбца, так что и когда создавал массив передавал туда ширину первым параметром, и когда обращаюсь первым идёт X, и соответственно GetLength(0), то есть максимальное число которое можно первым параметром в массив передать - количество столбцов у меня
@aanxis4241
@aanxis4241 4 жыл бұрын
@@EmeraldPowder Большое спасибо!!!
@OvoshnoeRagu
@OvoshnoeRagu 2 жыл бұрын
гайд отличный, но толи я наркоман, толи движок долбанутый, я не знаю почему, но у меня все двери перепутаны верх это низ, лево это право и так далее, в целом всё работает правда некоторые двери заблокированы и это создаёт вид лабиринта, но мне это даже нравится)
@unityrututorials1327
@unityrututorials1327 4 жыл бұрын
лайков мало, не благодарные, на халяву такой контент, а им пальцем кликнуть жалко! Видосы хорошие! Очень много для себя нового в C# подчерпнул. Спасибо!
@KoliaBoroda
@KoliaBoroda 2 жыл бұрын
по вашим роликам на вид все просто, за вечер все сделать можно
@terraider7314
@terraider7314 4 жыл бұрын
хороший гайд но не черта не понятно
@xakristl8736
@xakristl8736 4 жыл бұрын
вау русскоязычное видео с генерацией
@dcat1832
@dcat1832 3 жыл бұрын
Чел ты просто лудшый
@ZmastaZz
@ZmastaZz 4 жыл бұрын
огромное спасибо. Игра выходит на новый уровень)
@egorkorotaev6848
@egorkorotaev6848 4 жыл бұрын
Огонь как круто!) Чувак, ты бомба!)
@cross6922
@cross6922 3 жыл бұрын
подписываюсь
@TheDzhikser
@TheDzhikser 4 жыл бұрын
Качественные уроки спасиб
@The_Mavrik
@The_Mavrik 4 жыл бұрын
У меня всё работает, но выскакивает 1 раз ошибка IndexOutOfRangeException: Index was outside the bounds of the array. RoomPlacer.PlaceOneRoom () (at Assets/Scripts/RoomPlacer.cs:44) RoomPlacer+d__3.MoveNext () (at Assets/Scripts/RoomPlacer.cs:20)
@EmeraldPowder
@EmeraldPowder 4 жыл бұрын
Странно, на 44 строчке вроде бы ничего нет, если ничего не менял в скрипте то не должно такого быть
@The_Mavrik
@The_Mavrik 4 жыл бұрын
@@EmeraldPowder всё работает =)
@merekgrimaldus4497
@merekgrimaldus4497 4 жыл бұрын
Добрый день! У меня есть префабы комнат размером 10х10 по x и z соответственно, одна с 4-мя дверьми, одна только с одной(принципиально, точно так же, как и у вас в видео). Использовал ваш код, изменив только RoomsPlacer: поменял множитель в 57-й строке с 12 на 10. Но у меня комнаты генерируются не по сетке, а как-то случайно, накладываются друг-на-друга или находятся на расстоянии друг от друга. Можете подсказать, в чем может быть проблема?
@EmeraldPowder
@EmeraldPowder 4 жыл бұрын
Добрый. По идее всё правильно, может быть внутри префабов сами комнаты как-то сдвинуты? Если поставить префаб в (0,0,0) то комната должна быть прямо по центру сцены
@merekgrimaldus4497
@merekgrimaldus4497 4 жыл бұрын
@@EmeraldPowder Спасибо за ответ, помогло. Разобрался и понял, что важно, чтоб и pivot point объекта был по центру :)
@lifeteo2846
@lifeteo2846 4 жыл бұрын
А можно видео про генерацию более сложного "мира" для FPS ? :) или оно делается +- так же?
@EmeraldPowder
@EmeraldPowder 4 жыл бұрын
Генерацию можно тысячей разных способов сделать, зависит от геймплея и визуального сеттинга какой лучше. Вот такой с чанками для небольших уровней в помещении подходит и для FPS, думаю, а если там всякие горы да пустоши, то уже лучше зайдёт подход со всякими шумами и ландшафтами. Ну, и куча всяких ещё вариантов какой может быть игра, чтобы пришлось что-нибудь оригинальное придумывать, хоть круглые планеты в космосе, хоть многоуровневые пещеры
@blettualet3567
@blettualet3567 5 жыл бұрын
Как сцену в юнити вставить котоуюю скачал
@EmeraldPowder
@EmeraldPowder 5 жыл бұрын
Там не сцена по ссылке, а проект целиком, в Unity жми Add и указывай путь к скачаной папке
@zombiHello
@zombiHello 5 жыл бұрын
а как быть в случае когда размеры чанков разные, как высчитать их положение то что-то не могу понять. надеюсь на ваш ответ
@sasha8409
@sasha8409 5 жыл бұрын
РазмерДлинногоЧанка - 12, лень описывать кодом но думаю тут и так понятно))
@zombiHello
@zombiHello 5 жыл бұрын
@@sasha8409 так а что мне это даст? конечно можно сделать чанки (комнаты они же) строго определенного размера, но не хотелось бы избавиться от этого ограничения. да и что мне даст РазмерДлинногоЧанка? типа на эту величину смещать?
@sasha8409
@sasha8409 5 жыл бұрын
@@zombiHello я сам не особо понял что написал, вроде логично, вроде не, ну для того что ты хочешь можно попробовать создавать каждому чанку на каждую сторону объект, потом по нему выравнивать другой чанк, но это уже другая история да и вообще заморочек куча будет
@EmeraldPowder
@EmeraldPowder 5 жыл бұрын
Добавить конечно же в Room параметры "ширина" и "высота" в клеточках, где-нибудь после 56 строчки (в скрипте github.com/emeraldpowder/ProceduralGeneration/blob/master/Assets/RoomsPlacer.cs#L56), когда выбираем комнату которую туда вставить, проверять влезет ли она, если она больше одной клетки, и вместо 61 строчки засовывать эту комнату не в одну клетку массива, а в несколько. Сделать конечно не так просто как сказать, но по сути либо два цикла по размеру комнаты, либо пачка ifов, если размеров комнат не так много (2х1, 1х2, 2х2). А с дверьми вот придётся подумать, тут уже не хватит четырёх переменных, придётся какой-то список вести
@sasha8409
@sasha8409 5 жыл бұрын
@@EmeraldPowder а почему бы не выравнивать способом с пустыми обьектами? Как в 1 уроке
@njaab5097
@njaab5097 4 жыл бұрын
Некоторые операторы и методы не работают так же, как и у тебя.
@EmeraldPowder
@EmeraldPowder 4 жыл бұрын
Какие?
@njaab5097
@njaab5097 4 жыл бұрын
@@EmeraldPowder Как минимум ElementAt(), другие не помню, увы. Пришлось делать через костыль - сделал обычный массив, куда через цикл перекинул все значения и от туда уже брал нужное.
@EmeraldPowder
@EmeraldPowder 4 жыл бұрын
Для неё нужно подключить библиотеку System.Linq. В ней многие функции для списков и массивов, которые я иногда использую
@_Dreamer
@_Dreamer 5 жыл бұрын
Привет! Как тебе такая идея, сделать видео уроки болт?
@niklasxxx1
@niklasxxx1 4 жыл бұрын
очень крутой гайд, можно продолжить тему)))
🎲 Как работает Random в играх
8:45
Emerald Powder
Рет қаралды 140 М.
Running With Bigger And Bigger Lunchlys
00:18
MrBeast
Рет қаралды 105 МЛН
How To Get Married:   #short
00:22
Jin and Hattie
Рет қаралды 21 МЛН
Полная теория процедурной генерации
18:51
Создавать Игры ПРОЩЕ, чем ты думаешь
9:56
Daru - Разработка игр
Рет қаралды 180 М.
Делаю процедурную генерацию в Unity
13:15