Отличный видос! Всё понятно, без воды и со всем самым нужным! Жду следующий видос в этой серии!)
@МирославМалюсейко4 жыл бұрын
Видео отличное.) Очень полезная инфа. У кого не работает ElementAt, нужно подключить System.Linq. Потому как на видео она вроде не подключена, но этот метод вроде лежит там.
@ЮстинРибінский3 жыл бұрын
Дай бог тебе здоровья за эту подсказку
@TypicalRabbit5 жыл бұрын
Слишком мало подписчиков для такого качества видео....
@EmeraldPowder5 жыл бұрын
Спасибо! Надеюсь дальше будет больше с:
@andrewmolotkoff42314 жыл бұрын
Оно же и к лучшему, от автора не требуют постоянного выпуска контента, что в свою очередь положительно отражается на качестве!
@vindastris49824 жыл бұрын
@@EmeraldPowder может ребрендинг? Название канала тяжело запоминать. Хотя не уверен, что это значимо. Но то, что на слуху, проще запоминать.
@ShrekPNG4 жыл бұрын
@@vindastris4982 я тот человек, который два месяца думал, что название канала "Emerald power"
@stasaleksandrovich77704 жыл бұрын
@@ShrekPNG +++
@vegas59555 жыл бұрын
Процедурная генерация очень интересная тема! Хорошие ролики пилишь, гуд джоб!
@unity40253 жыл бұрын
Либо после python сложно переварить, либо я тупой, но со второго раза понял схему. Осталось только усовершенствовать для комнат разных размеров и частоты появления комнат. Спасибо большое:))))
@krutetskiy5 жыл бұрын
Невероятно интересно. Большое спасибо.
@Fantom-45123 жыл бұрын
Автор, спасибо за труды! Низкий поклон!)
@mdayzz5 жыл бұрын
Прекрасное видео. Подписка и лайк
@НикитаМакаров-ы2ъ6к6 ай бұрын
На осознание и реализацию данной схемы у меня ушло 6 часов. Сейчас сижу довольный, генерирую данжи. Возьму, пожалуй данный метод для своего дипломного проекта, вы ведь не против?)
@TheDaroxeRig4 жыл бұрын
Лайк Было бы интересно увидеть сложный вариант генерации
@АлесьЖ-б8ж4 жыл бұрын
Насколько сложный?
@Obelardos25 жыл бұрын
Интересно будет про генерацию не по сетке
@pivovar79924 жыл бұрын
Спасибо! ))))))))
@360cl34 жыл бұрын
Я посмотрел видос и мне понравилось, но как можно сделать коридоры между комнатами как в Enter the gungeon? Буду благодарен если ответишь :D А и ещё! Этот код подходит под 2д игры?
@EmeraldPowder4 жыл бұрын
Для 2д игры - да, подходит практически без изменений Этот алгоритм в основном для комнат одинакового размера, как в первом Айзеке скорее. Можно туда вкрутить ещё комнаты в два раза длиннее/шире, но если хочется ещё коридоры наверное лучше придумать что-нибудь другое, где у комнат может быть любой размер
@Alexey_Pe3 жыл бұрын
Забавно, я использую ue4, а не Unity, но всё равно смог чему то научиться, вообще не знал про префабы (ну в ue4 их и нет, у нас по другому))
@LIMONCHIK948 Жыл бұрын
Видео топ но у меня при открытее проекта ничего не работает
@qNighthockp3 жыл бұрын
А можно генерацию для комнат разных размеров?)
@ИльяАндреевичДиденко4 жыл бұрын
Круто, спасибо. С размещением комнат правда не очень понятно.. много ифов. Запутывают
@timetimer64292 жыл бұрын
как сделать так, чтобы комната с боссом спавнилась ровно 1 раз?
@wave12493 жыл бұрын
этот код работает для 2д юнити и работы со спрайтами?
@zloy_kak_tus2 жыл бұрын
Автору респект. А подскажите кто-нибудь, как сделать чтоб одна из комнат заспавнилась только один раз а остальные рандомно?
@EnotoButerbrodo2 жыл бұрын
Сделай переменную булевую. Когда спавнишь комнату - меняешь ее. Если изменена, то ее больше не спавнишь. При сппвне ее проверяй
@Axil-ww4 жыл бұрын
Это все конечно хорошо, но такое количество GameObject на каждый кубик - это плохо. Если у тебя стенки или пол комнаты не меняются - слей все кубики в один mesh. Кроме того если рисовать весь кубик у тебя будет бешеный Ower Draw.
@EmeraldPowder4 жыл бұрын
Да, у меня там совсем не оптимально это всё, так в продакшен не надо выкладывать. По хорошему если бы я планировал релизить эту игру то надо было бы эти комнаты собрать либо в 3д редакторе, чтобы весь пол и плоские стены были одним полигоном, или с помощью какого-нибудь ProBuilder. Есть ещё плагины которые прямо одним кликом все меши в один склеивают, но не уверен насколько они хорошо работают. Но так как туториал не про это, позволил себе на уровне прототипа сделать
@EvsBeat4 жыл бұрын
Не могу перетянуть префабы в массив в инспекторе. В чем может быть проблема?
@EmeraldPowder4 жыл бұрын
Значит тип объекта не совпадает с типом поля куда перетаскиваешь. Скорее всего на объектах не висит компонент Room, или тип переменной не тот
@EvsBeat4 жыл бұрын
@@EmeraldPowder Большое спасибо!)) Помогло, кинул скрипт на уровни и заработало. Теперь мучаюсь с другой проблемой генерация только горизонтальная и комнаты одна на другую накладываются. Видимо с vacantPlaces накосячил)
@EvsBeat4 жыл бұрын
Все разобрался это я дурной) у меня 2д а комнаты спавнились по оси z))
@_lucky_88514 жыл бұрын
ссылку на ассеты пж
@rafik51793 жыл бұрын
1 Диз, впервые я вижу такую силу
@GameWorldMrKIller4 жыл бұрын
Боже мой, а делать комнату уровня из таких блоков, это же жесть, типо оптимизация херовая же, я бы просто смоделил в бленедре комнаты, и текстуры рамдомизировал через шумы
@EmeraldPowder4 жыл бұрын
Согласен, комнаты совсем не оптимизированные, как и в прошлом видео чанки из этих же блоков. Но эти блоки у меня уже были готовые, чтобы на их примере рассказать про генерацию, а с серыми кубами не хотелось видео снимать, так что это просто для примера
@ИвановМаксим-ф8б5 жыл бұрын
А что за тип переменной, или хз что: Room. Как я понял это скрипт, есть видео где этот Room?
@EmeraldPowder5 жыл бұрын
Это просто скрипт, который висит на каждой комнате-чанке. Он на 1:33 появляется, там немного кода из прошлого туториала, цикл который рандомно вращает кирпичики, чтобы смотрелось интереснее. А потом где-то на 8:40 ещё туда добавляем переменные со ссылками на двери этой комнаты, чтобы их было легко из скрипты получить
@ИвановМаксим-ф8б5 жыл бұрын
@@EmeraldPowder Спасибо :) Автору канала респект, дружелюбный :)
@ИвановМаксим-ф8б5 жыл бұрын
@@EmeraldPowder Что делать если ошибка с ElementAt? "HashSet" Не содержит определения для "ElementAt"
@EmeraldPowder5 жыл бұрын
@@ИвановМаксим-ф8б Надо using System.Linq; написать, или в студии на лампочку нажать, чтобы библиотеку подключить
@ИвановМаксим-ф8б5 жыл бұрын
@@EmeraldPowder Спасибо :) Пытаюсь учится...
@yarichi5 жыл бұрын
Сделай пожалуйста генератор ландшафта
@EmeraldPowder5 жыл бұрын
Думаю скоро сделаю видео, как раз сейчас пытаюсь сделать красивый генератор
@bonbuasan4 жыл бұрын
Можна такой же урок но для unreal ?
@EmeraldPowder4 жыл бұрын
В нём я особо не разбираюсь, пару раз садился разобраться, но через несколько дней возвращался к удобной и привычной Unity
@bonbuasan4 жыл бұрын
@@EmeraldPowder Жаль ,что такой чудесный контент доступен только для разработчиков на Unity)
@philainel3 жыл бұрын
@@bonbuasan в разработке ведь важна логика, просто открываешь доки и сопоставляешь по каждой строчке
@artemzh273 жыл бұрын
Братан, не пропадай! У тебя на видео один (!!!) дизлайк =)))
@The_Mavrik4 жыл бұрын
пипец как интересно и познавательно, но сука мозг плавиться, как ты сам в этом не запутался?
@EmeraldPowder4 жыл бұрын
Спасибо. Со временем большие объёмы кода начинают пугать всё меньше, привыкаешь)
@GluukyBoii4 жыл бұрын
Раньше тоже плавился))
@slava75224 жыл бұрын
Автор, огромное спасибо за твои труды, очень годный контент) Взял за основу твой код из видео и перевел немного в другую механику +2д, объясняешь очень понятно, так что проблем даже не появилось)
@who_am_i39014 жыл бұрын
Привет, а у вас случайно не остался исходник с генерацией подземелья?
@npoctobblpogok37308 ай бұрын
По-моему единственный чел который объясняет норм генерацию. Я искал для UE5, но думаю тут похожая схема, на плюсах разберусь. Главное логику понять. А ты ее объясняешь. Спасибо.
@bubbletop11355 жыл бұрын
Отличный формат видео, без программистически-математических терминов. Про процедурную генерацию видео заходят! Хотелось бы услышать про генерацию на основе шума Перлина, спасибо за видос!
@EmeraldPowder5 жыл бұрын
Спасибо! Да, как раз думаю об этом в следующей серии, ладшафты на основе какого-нибудь шума, если у самого получится классный генератор
@rentil_ld2 жыл бұрын
Для тех кто взял этот код для 2д проекта и у кого проблема с спавном комнат друг в друге,тут прикол в том что надо в скрипте поменять Vector3 на Vector2 и тогда комнаты будут спавниться нормально,еще данная функция поворота комнат не корректно работает в 2д,лично я ее убрал и добавив больше вариантов комнат работает +- как и надо
@костантинденисов3 жыл бұрын
А как быть например если комнаты разного размера. У них ведь не выйдет задать определённый вектор
@risve_gliato72397 ай бұрын
А что делать если у меня комнаты спавняться в друг друге
@blettualet35675 жыл бұрын
*не скачивается оставь норм ссылку пж*
@itshcolnik46275 жыл бұрын
а нет все норм качается (мой 2 акк)
@The_Mavrik5 жыл бұрын
них не понятно, но очень интересно =)
@ivanryabinin69753 жыл бұрын
а что делать если комнаты спавнятся только по горизонтали и накладываются друг на друга?
@ZkeeeRus2 жыл бұрын
Незнаю, нужна ли тебе эта информация, но я столкнулся с этой проблемой тоже. Тк я не смог ввиду ограничения версии юнити использовать ?. я кинул try{}catch{}, возможно как и ты, мне помогло 4 таких конструкции на каждую проверку. Но! Возможно также проблему вызывало что (как мне показалось) сначала создается дверь для соседа, а только после комната ложится в массив комнат.
@BigPapochka124 жыл бұрын
0 дизов уважение! Очень интересно
@Tezla05 жыл бұрын
Предлагаю в следующий раз сделать генерацию лабиринта с входом и выходом (должна быть возможность выйти из лабиринта, а не просто тупая генерация).
@EmeraldPowder5 жыл бұрын
Да, думаю про генерацию лабиринтов видео тоже зайдёт в эту серию, как раз недавно делал игру с лабиринтами
@gardencorpse81144 жыл бұрын
Супер круто, особенно, когда на фоне тихо играли треки из OST Skyrim. Как я понимаю спавн предметов, осуществляется по той же системе как и с фонарями в комнатах, или там есть свои "подводные камни"?
@EmeraldPowder4 жыл бұрын
Да, всякие монетки/лут/сундуки можно теми же скриптами спаунить. Если нужна какая-то хитрая логика то можно конечно много вариантов ещё придумать, просто спаунить и искать им рандомное положение, или смотреть на какие-то другие параметры и подстраивать шанс спауна, тут уже от игры зависит
@qterrian41183 жыл бұрын
Вопрос наверное глупый , но из-за чего префабы комнат не хотят/не могут попасть в "RoomPrefabs" и "StartingRoom" в инспекторе? Код такой же, как у вас.
@albertmikhalev89313 жыл бұрын
На префаб повесьте скрипт Room, тогда все будет ок, если еще актуально)
@arterium25645 жыл бұрын
Супер! Дальнейшего развития.
@traderslick97635 жыл бұрын
Может, это упоминалось ранее, но можно ли в юнити прогружать небольшие локации мгновенно, примерно как в antichamber?
@EmeraldPowder5 жыл бұрын
Смотря как локация сохранена - если как у меня префаб, то да, просто Instantiate работает почти мгновенно, если конечно не очень большой префаб. Но если большой то на несколько можно разбить. А если локация в отдельной сцене - то можно вызывать SceneManager.LoadSceneAsync, он не создаёт фриза при переключении
@traderslick97635 жыл бұрын
@@EmeraldPowder, спасибо! =)
@lgsmdlgsmdn2581 Жыл бұрын
8:04
@aanxis42414 жыл бұрын
Добрый день! Ответьте пожалуйста, если GetLength(0)(он же x) возвращает количество строк, то почему при проверки ячеек (комнат поблизости), например "if (x > 0 && SpawnedRooms[x - 1, y] == null)" он проверяет левую ячейку, хотя по факту, должен проверять верхнюю ячейку, так как получиться [4, 5], то есть 4 строка и 5 столбец, не могу понять!!Помогите! Если судить по координатам x и y, то в принципе логично, но тут массив и проверка ячеек происходит!
@EmeraldPowder4 жыл бұрын
Добрый. В двумерных массивах мы сами решаем первое число будет строчкой или столбцом, я тут решил что первая координата будет x, то есть по сути номер столбца, так что и когда создавал массив передавал туда ширину первым параметром, и когда обращаюсь первым идёт X, и соответственно GetLength(0), то есть максимальное число которое можно первым параметром в массив передать - количество столбцов у меня
@aanxis42414 жыл бұрын
@@EmeraldPowder Большое спасибо!!!
@OvoshnoeRagu2 жыл бұрын
гайд отличный, но толи я наркоман, толи движок долбанутый, я не знаю почему, но у меня все двери перепутаны верх это низ, лево это право и так далее, в целом всё работает правда некоторые двери заблокированы и это создаёт вид лабиринта, но мне это даже нравится)
@unityrututorials13274 жыл бұрын
лайков мало, не благодарные, на халяву такой контент, а им пальцем кликнуть жалко! Видосы хорошие! Очень много для себя нового в C# подчерпнул. Спасибо!
@KoliaBoroda2 жыл бұрын
по вашим роликам на вид все просто, за вечер все сделать можно
@terraider73144 жыл бұрын
хороший гайд но не черта не понятно
@xakristl87364 жыл бұрын
вау русскоязычное видео с генерацией
@dcat18323 жыл бұрын
Чел ты просто лудшый
@ZmastaZz4 жыл бұрын
огромное спасибо. Игра выходит на новый уровень)
@egorkorotaev68484 жыл бұрын
Огонь как круто!) Чувак, ты бомба!)
@cross69223 жыл бұрын
подписываюсь
@TheDzhikser4 жыл бұрын
Качественные уроки спасиб
@The_Mavrik4 жыл бұрын
У меня всё работает, но выскакивает 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)
@EmeraldPowder4 жыл бұрын
Странно, на 44 строчке вроде бы ничего нет, если ничего не менял в скрипте то не должно такого быть
@The_Mavrik4 жыл бұрын
@@EmeraldPowder всё работает =)
@merekgrimaldus44974 жыл бұрын
Добрый день! У меня есть префабы комнат размером 10х10 по x и z соответственно, одна с 4-мя дверьми, одна только с одной(принципиально, точно так же, как и у вас в видео). Использовал ваш код, изменив только RoomsPlacer: поменял множитель в 57-й строке с 12 на 10. Но у меня комнаты генерируются не по сетке, а как-то случайно, накладываются друг-на-друга или находятся на расстоянии друг от друга. Можете подсказать, в чем может быть проблема?
@EmeraldPowder4 жыл бұрын
Добрый. По идее всё правильно, может быть внутри префабов сами комнаты как-то сдвинуты? Если поставить префаб в (0,0,0) то комната должна быть прямо по центру сцены
@merekgrimaldus44974 жыл бұрын
@@EmeraldPowder Спасибо за ответ, помогло. Разобрался и понял, что важно, чтоб и pivot point объекта был по центру :)
@lifeteo28464 жыл бұрын
А можно видео про генерацию более сложного "мира" для FPS ? :) или оно делается +- так же?
@EmeraldPowder4 жыл бұрын
Генерацию можно тысячей разных способов сделать, зависит от геймплея и визуального сеттинга какой лучше. Вот такой с чанками для небольших уровней в помещении подходит и для FPS, думаю, а если там всякие горы да пустоши, то уже лучше зайдёт подход со всякими шумами и ландшафтами. Ну, и куча всяких ещё вариантов какой может быть игра, чтобы пришлось что-нибудь оригинальное придумывать, хоть круглые планеты в космосе, хоть многоуровневые пещеры
@blettualet35675 жыл бұрын
Как сцену в юнити вставить котоуюю скачал
@EmeraldPowder5 жыл бұрын
Там не сцена по ссылке, а проект целиком, в Unity жми Add и указывай путь к скачаной папке
@zombiHello5 жыл бұрын
а как быть в случае когда размеры чанков разные, как высчитать их положение то что-то не могу понять. надеюсь на ваш ответ
@sasha84095 жыл бұрын
РазмерДлинногоЧанка - 12, лень описывать кодом но думаю тут и так понятно))
@zombiHello5 жыл бұрын
@@sasha8409 так а что мне это даст? конечно можно сделать чанки (комнаты они же) строго определенного размера, но не хотелось бы избавиться от этого ограничения. да и что мне даст РазмерДлинногоЧанка? типа на эту величину смещать?
@sasha84095 жыл бұрын
@@zombiHello я сам не особо понял что написал, вроде логично, вроде не, ну для того что ты хочешь можно попробовать создавать каждому чанку на каждую сторону объект, потом по нему выравнивать другой чанк, но это уже другая история да и вообще заморочек куча будет
@EmeraldPowder5 жыл бұрын
Добавить конечно же в Room параметры "ширина" и "высота" в клеточках, где-нибудь после 56 строчки (в скрипте github.com/emeraldpowder/ProceduralGeneration/blob/master/Assets/RoomsPlacer.cs#L56), когда выбираем комнату которую туда вставить, проверять влезет ли она, если она больше одной клетки, и вместо 61 строчки засовывать эту комнату не в одну клетку массива, а в несколько. Сделать конечно не так просто как сказать, но по сути либо два цикла по размеру комнаты, либо пачка ifов, если размеров комнат не так много (2х1, 1х2, 2х2). А с дверьми вот придётся подумать, тут уже не хватит четырёх переменных, придётся какой-то список вести
@sasha84095 жыл бұрын
@@EmeraldPowder а почему бы не выравнивать способом с пустыми обьектами? Как в 1 уроке
@njaab50974 жыл бұрын
Некоторые операторы и методы не работают так же, как и у тебя.
@EmeraldPowder4 жыл бұрын
Какие?
@njaab50974 жыл бұрын
@@EmeraldPowder Как минимум ElementAt(), другие не помню, увы. Пришлось делать через костыль - сделал обычный массив, куда через цикл перекинул все значения и от туда уже брал нужное.
@EmeraldPowder4 жыл бұрын
Для неё нужно подключить библиотеку System.Linq. В ней многие функции для списков и массивов, которые я иногда использую
@_Dreamer5 жыл бұрын
Привет! Как тебе такая идея, сделать видео уроки болт?