Тёмный

Процедурная генерация лабиринта [Unity 3D] [Tutorial] 

Emerald Powder
Подписаться 77 тыс.
Просмотров 55 тыс.
0% 0

Как процедурно генерировать лабиринты, для использования как уровни в игре-головоломке, или как основу для создания более сложного уровня. Вообще для генерации лабиринтов существует множество разных алгоритмов, в этом видео я расскажу про алгоритм Recursive Backtracking, и покажу как реализовать его в Unity 3D, на примере простого случайного генератора лабиринтов
Содержание:
Настройка сцены и spawner'a - 0:24
Алгоритм генерации - 7:38
Установка финиша - 14:46
Ссылка на готовый проект: github.com/emeraldpowder/Proc...
Ссылка на статью про лабиринты: habr.com/ru/post/445378/
На этом канале регулярно появляются новые видео, которые позволят тебе научиться создавать игры, или подарят новые идеи и вдохновение, если ты уже умеешь. Подписывайся!
Остались какие-то вопросы, пожелания, или идеи для других видео? Смело пиши в комментарии под видео

Опубликовано:

 

30 май 2019

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 63   
@antlklngzr8063
@antlklngzr8063 5 лет назад
когда я смотрю эти видео у меня острое чувство неполноценности
@user-gp2eu5kn7t
@user-gp2eu5kn7t Год назад
А почему именно неполноценности?
@Alex-fc7ob
@Alex-fc7ob 5 лет назад
Как всегда отлично вышло, спасибо за урок! Пожалуйста, продолжайте.
@krutetskiy
@krutetskiy 5 лет назад
Невероятно интересно! Спасибо.
@valentinsuyarov7345
@valentinsuyarov7345 2 года назад
Спасибо, как всегда лучший! 👍👍👍 Изменил алгоритм под свои нужды (каждая клетка либо стена, либо нет) работает отлично.
@videdirec5033
@videdirec5033 3 года назад
топчик.) Написал месяц назад где то генератор лабиринтов похожий на с++ + SFML, а сейчас решил разобраться с юнити вообще. И тут такой подгончик.)
@grigoriyvs
@grigoriyvs 3 года назад
Коротко и по делу, в самый раз
@RinaldoKUN
@RinaldoKUN 2 года назад
Спасибо, очень интересно!
@LunaresWolf
@LunaresWolf 4 года назад
Привет, спасибо тебе за урок!
@mrybs
@mrybs 3 года назад
Спасибо, я теперь понял как писать алгоритм
@valeronik_vlr
@valeronik_vlr 5 лет назад
Спасибо, качественно делаешь! Можешь в будущем рассказать про Tilemap и с чем его едят? :)
@EmeraldPowder
@EmeraldPowder 5 лет назад
Спасибо! Как раз записываю в заметки что можно интересного рассказать про Tilemap, как наберётся обязательно сделаю видео
@Korol0101
@Korol0101 3 года назад
@@EmeraldPowder можете помочь а как сделать для 2 или более играку
@medic7347
@medic7347 2 года назад
Спасибо за идею, мне нужно для 3д мира, и я все делал в ручную, но теперь я заполню локацию комнатами и буду удалять не нужное))
@qz1759
@qz1759 3 года назад
<a href="#" class="seekto" data-time="1054">17:34</a> за это лайк, спасибо)
@user-ic4dk4sp3y
@user-ic4dk4sp3y 4 года назад
спасибо
@alicewithalex
@alicewithalex 5 лет назад
Такое бы только, с расстановкой объектов внутри тайлов ( только 3д, например, комнат). А ещё круто было бы посмотреть на исполнение алгоритма Maze and Rooms - очень интересный алгоритм
@EmeraldPowder
@EmeraldPowder 5 лет назад
Да, Maze and Rooms это вроде больше концепция, там можно применять разные алгоритмы чтобы раскидать комнаты по карте, потом разные алгоритмы чтобы лабиринт корридоров сгенерить. Как раз что-то среднее между этим видео и видео про генерацию подземелий думаю дальше сделать, чтобы комнаты спаунились вместо 2д клеточек
@alicewithalex
@alicewithalex 5 лет назад
@@EmeraldPowder, согласен) жду с нетерпением) просто как совместить думаю комнаты и лабиринты
@andrewalexart
@andrewalexart 2 года назад
блин... как до этого дойти своим умом?? спасибо за видео!
@unitynavigator3328
@unitynavigator3328 5 лет назад
Console. WriteLine("need more") ;
@d3dx259
@d3dx259 Год назад
возможно глупый вопрос, но почему из полей Height и Width вычетают 2?
@negrime
@negrime 5 лет назад
Расскажи пожалуйста про obj pool
@neverworld8815
@neverworld8815 3 года назад
Интересно он будет работать с Navigation Mesh
@screamlaps7857
@screamlaps7857 3 года назад
а как заполнить этот лабиринт например мусором, листьями, камнями и так далие?
@The_Mavrik
@The_Mavrik 3 года назад
Но чёрт возьми, каааак? Как можно додуматься до этого всего????? Долго ты это делал, подскажи пожалуйста =)
@EmeraldPowder
@EmeraldPowder 3 года назад
Все навыки с опытом приходят, если долго пытаться всякие игрушки делать, то рано или поздно научишься такое быстро придумывать )
@alekseivlasov
@alekseivlasov 4 года назад
ПОЧЕМУ У ТЕБЯ ТАК МАЛО ПОДПИСЧИКОВ???
@user-kf3sw2ep2j
@user-kf3sw2ep2j 2 года назад
не могу воспроизвести вообще код, начала с "решетки", не воспроизводит, решила, что проблема в коде и просто начала в той же последовательности шлепать твой код, все проставлено, не работает, что делать? может ли это быть из-за версии?
@_________5287
@_________5287 4 года назад
IndexOutOfRangeException: Index was outside the bounds of the array. MazeGenerator.RemoveWallLeftBotton (MazeGeneratorCell[,] Lab) (at Assets/LabGenerator.cs:54) LabGenerator.GeneratorLabirint () (at Assets/LabGenerator.cs:35) WallSpawn.Start () (at Assets/WallSpawn.cs:11) Не могу, почему ошибка .
@f1f1stashka
@f1f1stashka Год назад
в функции ты обращаеся к списку по индексу который юольше чем длина самого списка
@rofe9285
@rofe9285 Год назад
@@f1f1stashka так а пофиксить-то как
@NECjAR
@NECjAR 5 лет назад
Такое же бы да в 3D.
@EmeraldPowder
@EmeraldPowder 5 лет назад
Можно вместо линий сделать модельки стен какие-нибудь, поменять координаты в MazeSpawner, и будет 3D. Но чтобы красиво было конечно надо ещё добавить разнообразия, что-нибудь вроде чанков из видео про подземелья можно сюда вставить вместо клеточек, и тогда будут получаться большие и запутанные карты
@qiwik8195
@qiwik8195 2 года назад
Здравствуйте , а вы можете подсказать как увеличить стены лабиринта ? Я пытался увеличить размеры стен , но не выходило . Может кто нибудь знает , как это сделать?
@darkfrei2
@darkfrei2 2 года назад
Десять человек, не нашедших выхода из лабиринта поставили дизлайки.
@wismm3697
@wismm3697 3 года назад
А как разделить сцену на клетки?
@alexisnienov4677
@alexisnienov4677 Месяц назад
За урок однозначный лайк. Только "кюррент" ухо режет.
@boristyulkin8951
@boristyulkin8951 5 лет назад
Что такое циклы в лабиринтах?
@EmeraldPowder
@EmeraldPowder 5 лет назад
Когда можешь идти куда-то не возвращаясь назад, и прийти в ту же клетку. То есть если удалить какую-нибудь стену между двумя коридорами в моём лабиринте, то скорее всего получится цикл. С ними запутанее выглядит лабиринт, и не проходится если просто всегда сворачивать только направо или только налево
@askaranarbekov3145
@askaranarbekov3145 4 года назад
Здравствуйте ваш урок прекрасен , но можно ли задать вопрос? как мне сохранить генерированный лабиринт в сцене? чтоб один и тот ж лабиринт грузился ? как мне его сохранить через плеер префс?
@EmeraldPowder
@EmeraldPowder 4 года назад
Самый красивый способ, хотя он не всегда подходит, это сохранять сид генератора перед созданием лабиринта. То есть примерно напписать перед тем как запускать первый раз генератор: int seed = Random.Range(-100000,100000); PlayerPrefs.SetInt("seed", seed); Random.InitState(seed); А перед тем как запускать второй раз (при загрузке), int seed = PlayerPrefs.GetInt("seed"); Random.InitState(seed); Ну и отдельно тогда сохранить всякое вроде положения игрока, и прочего что есть в геймплее
@LunaresWolf
@LunaresWolf 4 года назад
​@@EmeraldPowder а можно для чайников объяснить как это впихнуть в ваш скрипт? Ps. мне очень нужна система сидов.
@user-qt1oi9wl1d
@user-qt1oi9wl1d 10 месяцев назад
Как можно сделать чтоб Width и Height можно было менять в редакторе юнити а не только в скрипте?
@reapercrow7623
@reapercrow7623 4 года назад
А в каком формате ты создавал проект ? 2D или 3D ?
@unitycraftzone5888
@unitycraftzone5888 4 года назад
2
@andriystarunskiy6943
@andriystarunskiy6943 5 лет назад
Как удалять пол на крайних клетках, как в первом видео стены?
@EmeraldPowder
@EmeraldPowder 5 лет назад
Добавить в Cell рядом со стенами ссылку на пол, какой-нибудь public GameObject Floor; А в MazeSpawner.Start() смотреть, если x == maze.GetLength(0)-1, и тоже самое с y, значит сейчас последний ряд ячеек, и выключать/уничтожать c.Floor, так же как и стены выключаются
@TheGamingWorldTVtvTV
@TheGamingWorldTVtvTV 4 года назад
Привет! Видео классное! Мне понравилось, всё понятно объясняешь. Правда у меня не получается полноценный лабиринт. Дружище, не знаю слышишь ли ты меня, я писал в твоём дискорд чате в #помощь (gengiank). Надеюсь ты там увидишь и сможешь помочь. К видео однозначно лайк)
@user-oc8qe6hl8s
@user-oc8qe6hl8s 3 года назад
Помогите мне пожалуйста я никак не могу сделать <a href="#" class="seekto" data-time="28">0:28</a> эту сцену с маленьким зелёным шариком..
@ronews4723
@ronews4723 3 года назад
...
@EmeraldPowder
@EmeraldPowder 3 года назад
Скачай готовый проект, там можно поразбираться как всё устроено, что отвечает за движение игрока, что за генерацию лабиринта
@TeamSLywnow
@TeamSLywnow 2 года назад
<a href="#" class="seekto" data-time="432">7:12</a> Зачем учить плохому? Ты не используешь GameObject, а сразу берешь Cell, так почему бы не заменить переменную CellPerfab на тип Cell и тогда не надо будет вызывать грузовик (в плане нагрузки) GetComponent, а сразу получать нужный компонент при спавне, если лабиринт очень большой это сэкономит значительное время <a href="#" class="seekto" data-time="577">9:37</a> Еще одна ошибка, ну или скорее нарушение структуры кода. Да, такой флаг это оптимально по производительности. Но ты создаешь лишнюю переменную в классе, который, как сам сказал в начале, может использоваться другими генераторами. Намного проще было добавить все клетки в лист и потом просто производить проверку List.Find(Cell) == null Но опять же это не ошибка, а скорее просто придирка, которая важна только если работаешь в компании или с командой Хотя если если смотреть на твой код с точки зрения рефакторинга, то и класс генерации по хорошему статик, чтобы новые объекты не плодить и много чего еще. Так что наверное опущу. В остальном отличный урок
@clapper2564
@clapper2564 3 года назад
ALT+Колёсико вверх Когда ты уже *УВЕЛИЧИШЬ* текст, надо жмуриться что-бы увидеть что ты там пишешь
@Kitsikoo
@Kitsikoo 4 года назад
Моск обиделся и ушёл. Как можно всё это знать?)
@EmeraldPowder
@EmeraldPowder 4 года назад
Спасибо) На самом деле если долго смотреть на гифку в википедии то алгоритм генерации совсем не кажется сложным
@deadsmileds9995
@deadsmileds9995 3 года назад
а можно мне пожалуйста скрипт движения с этого ролика
@SoulScreamPlay
@SoulScreamPlay 9 месяцев назад
Не дырка, а отверстие
@namik_mdm
@namik_mdm 3 года назад
Когда я увидел что ты удалил МоноБехавиор я понял что это не мое
@_dAlbAj0b_
@_dAlbAj0b_ 3 года назад
Не работает метод по удалению стен
@_dAlbAj0b_
@_dAlbAj0b_ 3 года назад
прости, сам сделал опечатку спасибо за видос
@volleyball_epta
@volleyball_epta 3 года назад
Б563
Далее
BABYMONSTER - ‘FOREVER’ M/V
03:54
Просмотров 8 млн
⚡ Всё про события в Unity 3D
21:38
Просмотров 102 тыс.