Как сделать переход между сценами в godot 2d

Добавил пользователь Алексей Ф.
Обновлено: 04.10.2024

Всем привет. Хочу сделать нечто похожее на Horizon на PS4 средствами Godot. Я имею ввиду не полный клон горизонта (ясно, что godot не совсем для этого годится, да и в одиночку я не осилю) - просто что-то ультрапримитивное с похожей механикой, чисто чтобы научиться работать с Godot в 3D.

В связи с этим возникли несколько вопросов.

1. Как в Godot создать локацию с горами, равнинами и реками? (я догадываюсь, что нужно загрузить TerrainMesh, а движок должен правильно это обработать, но как создать этот террейн в блендере, загрузить в годот и правильно отобразить? Поделитесь хорошим туториалом)
2. Как создать бесшовный переход между локациями без экрана подгрузки? Ну, например, я в горах нашёл пещеру, а это локация отдельная, но игрок должен видеть будто бы мир цельный и экран загрузки появляться не должен (только при первоначальной загрузке или быстром переходе в отдаленную локацию). Механика мне понятна, как программисту, но как сделать это именно средствами Godot? (вот по этому пункту вообще никакой инфы не смог нагуглить)

Буду рад за любую помощь. 2D уже неплохо освоил, но с 3D только начал разбираться и многое пока непонятно.

Danilw
> сделать клон Хоризонта
мне не нужен там крутой графон. Хватило бы и абстрактной графики.

Danilw
> не безшовный мир с переходами и загрузками
почему?
Danilw
> просто без гор
почему?
Danilw
> Это полноценная "хорошая" логика с множеством мелких объектов на карте, не
> просто "пол".
Жду с нетерпением. Кинешь сюда ссылку на видос?

Danilw
> на Юнити и УЕ4 без какихто левых плагинов делающих очень ситуативный бесшовным
> мир ты ничего не сделаешь
Т.е. единственный способ реализовать что-то подобное Horizon и Breath of the Wild - это писать самодельный движок?

Danilw
> Для полноценной реализации открытого мира по типу Хоризонта или Ассасинс
> Крида(одисеи) нужен свой движок с нуля.
Почему? В чем именно проблема в современных движках? Вон, на UE4 делают крутые проекты без экранов загрузки. Почему его нельзя использовать?

Danilw
> где стоя на горе все что ниже уходит в туман
В Breath of the Wild нет никакого тумана (кроме того, что обусловлен погодными условиями). В чем именно проблема реализации клона Breath of the Wild на современных движках?

В Godot есть какие-то ограничения на количество используемой памяти?

Danilw
> делающий бесконечный воксельный мир
Но мне не нужно бесконечный. Мне нужно лишь чтобы текущая локация и все, в которые из нее можно перейти, находились в памяти (или же какие-то буферные локации, замедляющие игрока при переходе в подгружаемую)

Ну ок, давайте абстрагируемся от 3D. Как сделать бесшовный открытый мир в 2D?

Danilw
> надо брать Юнити
чем оно лучше, чем Godot? Там проще реализовать бесшовный мир?

Robotex
Не знаю, что у вас тут произошло, но теперь твой монолог выглядит странновато.

По теме: слышал про стриминг уровней? Если нет, то почитай.
Вот в Godot из коробки такого нету. Ищи может есть какой плагин или сам доделывай движок, благо исходники есть.
В UE4 стриминг уровней есть. В Unity не знаю. Еще стриминг уровней в Xenko Engine есть, но этого зверя я вообще не знаю.

Robotex
Я бы попробовал, при приближении к переходу, динамически подгружать PackedScene и распаковывать его в свой Spatial. При отдалении - старый Spatial удалять вместе с со всем содержимым. Короче - эмулировать анриловский level streaming подручными велосипедами.

Делаешь понятие сегмент, например 64х64 делаешь сетку таких сегментов, и подгружаешь ближние. В целом мин колво сегментов на экране должно быть 9.
Делаешь условную буферную зону на стыках, метров 10 20 чтобы если человек бегает на границе туда сюда не грузились сегменты и не удалялись.
Потом решаешь задачу на асинхронную загрузку сегмента, по ближ. объектам по фруструму, сначала 5 тяжелых объектов в сл кадр 10 попроще, и так далее.

Derek
> например 64х64 делаешь сетку таких сегментов, и подгружаешь ближние
А если я стою в одном сегменте на горе и оттуда видно соседние сегменты?

Как они в Breath of the Wild реализовали видимость всего мира без просадок производительности и огромных объемов используемой памяти?

Robotex
> Как они в Breath of the Wild реализовали видимость всего мира без просадок
> производительности и огромных объемов используемой памяти?
за BotW не скажу, но обычно это делается используя так называемые LOD. Для каждого куска мира есть несколько вариантов детализации.
Самый последний - это вообще весь мир одной упрощенной моделью для вида при падении с парашутом или из самолета или из космоса.
Самый первый - одной моделью представлен кусок 200х200 метров (и таких кусков много - на сцену выставляются не все, - как рассказал Derek).
И несколько промежуточных. Вот в зависимости от того, откуда мы смотрим на ту или иную часть мира - те ее LODы и показываем.

Unity и Unreal Engine захватили большую часть рынка геймдева, но другие движки могут быть не хуже. В этом видео расскажем, как создать игру на Godot Engine.

00:00 Краткий анонс того, что будет происходить в видео. Нарезка моментов.

00:20 Введение и выбор темы для проекта. Для выбора темы используется генератор случайных фраз, который выдал тему про шампунь. Сеттинг определяется следующим образом: главный герой находится в некоем альтернативном мире (предположительно, это его сон), в котором ему предстоит отстреливаться от монстров с грязными волосами шампунем (ох уж этот генератор случайностей).

02:40 Моделирование объектов окружения, оружия и врагов. Для моделирования используется программа Blender 3D версии 2.8, используются простые модели без текстур, оформленные материалами с плотной заливкой.

Создание игрового уровня

6:20 Перемещаемся в игровой движок Godot Engine, создаём новый проект. Для проекта определяем рендер OpenGL ES 2.0 для большей совместимости. Также такой проект удобно портировать для WEB.

6:46 Поскольку игра подразумевает переход между уровнями, рассмотрим шаблон проектирования, при котором данную возможность довольно просто реализовать. Данный подход не требует навыков проектирования и моделирования ситуаций. Попутно создаём структуру папок и необходимый набор базовых сцен. Определяем синглтон (глобальный объект), подключаем его к проекту, а также конфигурируем его.

8:30 Программируем загрузку уровня.

9:00 Переносим объекты, смоделированные в Blender, в игровой проект. Для экспорта используется формат glTF 2.0, который поддерживается как движком, так и пакетом моделирования.

9:25 На основе моделей создаём игровые объекты, настраиваем материалы, пока без поведения. Также масштабируем все объекты так, чтобы они имели нормальный размер относительно игрока и друг друга, пропорции сохраняем. Расставляем объекты, получая приблизительный вид будущего уровня для игры.

11:24 Добавляем объект Environment, отвечающий за окружение. Настраиваем боковое освещение и убираем скайбоксы. Настраиваем Glow эффект для игрового мира. Создаём объекты, отвечающие за освещение, настраиваем тени.

Создание персонажа

16:35 Модифицируем комнату, в которой происходит действие.

17:30 Программируем поведение игрока. Управление осуществляется мышью и клавиатурой. Соответственно, необходимо обработать поступающие команды. Godot позволяет сделать это очень просто.

21:00 Настраиваем перемещение по миру при помощи клавиш, задействуя стандартный механизм действий движка. Клавиши настраиваются через настройки проекта. В коде проверяем только срабатывание действий.

25:37 Обрабатываем клавишу паузы и условия выходы из игры. Также обрабатываем мышь и скрываем её в игровом процессе, отображаем только в меню паузы или при выходе в меню.

26:40 Включаем тени от источников света и настраиваем их отображение.

Создание вражеских персонажей

27:43 Переходим ко вражескому объекту. Говорим о локальных осях, настраиваем материалы объекта. Добавляем поведение объекту: враги будут двигаться к игроку, пока не приблизятся на удобное расстояние, постоянно выстреливая изо рта светящимися шарами, убивающими игрока. При приближении игрока они должны отъезжать от него, чтобы сохранять нужное расстояние.

31:50 Программируем объект, генерирующий вражеские объекты. Этот объект будет порождать их на уровне, пока не будет уничтожен сам. Таким образом, чтобы пройти уровень, в первую очередь требуется уничтожить объекты, генерирующие врагов. Полное их уничтожение гарантирует переход на следующий уровень. Враги генерируются по таймеру.

Программирование боя

35:37 Добавляем игроку оружие. Это бутылка шампуня. Позиционируем его правильно в камере. Так же добавляем прицел, чтобы игрок мог целиться.

37:39 Теперь надо разработать то, чем бутылка шампунем будет стрелять. Это будет поток из капель, который при движении очень походит на струю. Для организованного движения шариков необходимо задать их поведение. Это делается для каждого шарика. Поток будет имитировать гравитацию и инерцию. Выстрелы происходят по левой кнопке мыши, так что механизм обработки делаем такой же, как и раньше. При прикосновении пуль к чему-либо, целесообразно их уничтожать. Обработаем и это.

46:12 Переходим к обработке пуль и реакции объектов на них. Помимо того, что пули уничтожаются, они должны как-то влиять на то, во что они попадают. Соответственно всё, что нужно, — настроить обработчики у нужных объектов.

47:41 Добавляем возможность стрельбы вражеским объектам. За основу берём настроенный ранее механизм стрельбы для шампуня. Меняем лишь цвет и немного поведения. После этого немного меняем направление стрельбы, чтобы вражеские пули всегда летели в камеру, усиливая эффект устрашения.

50:54 Конфигурируем глобальный объект и некоторые параметры реакции игрока и врагов. Такая калибровка происходит на протяжении первых этапов разработки практически всегда.

52:12 Теперь на 2D слое делаем визуализацию попадания пули в игрока. Делаем это при помощи заполнения экрана красным и плавным исчезанием заливки. Данный эффект помогает идентифицировать попадание, даже когда оно происходит со спины.

Программирование технической части

54:05 Переходим к настройке достижения цели уровня. Для этого определяем механизм достижения какого-то числового счёта. При создании врагов мы будем запоминать их количество на уровне, при уничтожении проверять, сколько было убито. Как только убиваем последнего, активируется механизм отпирания двери на следующий уровень. Визуально на двери это отобразится путем смены красного цвета лампы на зелёный.

1:00:15 Далее разрабатываем механизм перехода между уровнями. И тут мы возвращаемся к понятию паттерна, про который я говорил в самом начале. Механизм довольно простой: у нас есть одна сцена, которая перезагружает уровни в зависимости от текущего индекса. Для демонстрации моделируется ещё один уровень.

1:03:38 Теперь нужно разграничить слои объектов, чтобы определить, что с чем сталкивается, и что на что реагирует. Это нужно в первую очередь для того, чтобы исключить попадание пуль в самого себя, и чтобы пули не сталкивались с объектами дверей, потому что это просто не нужно. Для настройки слоев в Godot Engine есть специальные маски, расставляя галочки в которых можно добиться нужного эффекта.

1:08:34 Создание уровня с Боссом игры. Моделируем объект, экспортируем и настраиваем его материалы и поведение. Тут всё очень похоже на работу с другими объектами, поэтому многие части дублируют и код, и поведение в целом.

Заключение

1:15:26 Бонус — создание механизма, позволяющего оставлять следы от капель шампуня на стенах и полу, и завершение урока.
Итог — создание игры в Godot Engine — процесс намного более увлекательный, чем может показаться на первый взгляд, а кажущиеся сложными вещи выполняются довольно просто и удобно.


Слушать

Длительность: 21 мин и 16 сек

Битрейт: 192 Kbps

Cлушайте онлайн и cкачивайте песню Переход Между Локациями В Godot Engine 3 2 1 Переход Между Сценами В Godot размером 27.99 MB и длительностью 21 мин и 16 сек в формате mp3.

Похожие песни

Урок Создание Портала В Unreal Engine 4 Часть 1

Создание 3D Шутера Для Android 6 Выстрелы Отображение Патронов Анимация

Можно Ли Сделать Игру Если Ты Ничего Не Умеешь

Как Попасть На Мкс Или Как Стать Космонавтом

Плавный Переход Между Уровнями В Godot Engine 3 2 Часть 2

Level Design With Blender And Godot

Godot How To Save Game Progress In A Single Resource File

Ui Частицы В Unity 2D Раннер 2 Unity Создание Игр

Самый Полезный Гайд По Строительству В Брик Ригс Как Строить В Брик Ригс Как Строить Красиво В Брике

Godot Tutorial Switching Levels Made Easy

Publishing Your Godot Game

Godot Terrain Tutorial

Low Poly Моделирование Для Игр 3 Симметричное Редактирование Mirror Low Poly Уроки Blender

Один День Изучения Юнити Или Как Я Делаю Игру В Годо Bash 1

Сбор Ресурсов В Игре На Godot Engine 3 2 1

Rus Как Делать Видео По Undertale С Помощью Пейнта 1080P60

Создание 3D Игры В Godot За Час Уроки Godot Engine 3D

Делаю Свою Игру 4 Новая Карта И Перс Gamedev

Alven - Разработка игр

Создание 2D Платформера В Godot За 30 Минут Изучение Движка Godot

Слушают

Smr Lve Story Of Your Heart

Усма Куйибди Кошига

Интро 14 Сезона Ниндзяго

Голибчон Юсупов Чупон Духтар

Альберт Комаров Я Люблю Тебя

Песня На День Рождения Мужу От Жены

Турал Седали Сен Менин Севдийим Инсансан

Wednesday Infidelity Fnf Ost

Nightcore Twin Flame Lyrics

Гром Среди Ясного Неба

Stay The Kid Laroi Justin Bieber

Best Friends The Weeknd

Скачивают

Дребезг И Лязг Тормозных Колодок В Суппортах Передних На Нива Шевролет

Выдающиеся Личности Исламской Цивилизации 5 Омар Хайям Наука И Исламский Мистицизм

Never Let Ateez Cover Your Song Leave The Door Open

My Coffee Substitute Yummy Morning Tonic

Describe A Line That You Remember From Poem Or Song

Peter Pan And The Pirates Episode 44 The Footrace Part 3

Суперзвезда Живущая В Тени Бога Electronic И S1Mple Na Vi Cs Go

Wizkid S Starboy Shakkar Shades Abike Shop Try On Haul

Hijabeaze Niqab Patti Hijabeaze By Urooj

Boardgame Heaven Review 109 Tales From The Loop Rpg Free League

Переход Между Локациями В Godot Engine 3 2 1 Переход Между Сценами В Godot

Guru Josh Edward Maya Och Eddy Wata Remix

Train Simulator 2021 Class 411 170 450 Multiple Routes Featuring Adam Haigh

Godot Engine: 3D движение персонажа (ходьба / бег / прыжок)

достигнутый Прогулка / бежать / прыгать ,

Интеллектуальная рекомендация


Mongodb Foundation, Документация, Пользователь

Сравнение SQL и MongoDB, разные точки Запрос базы данных Показать запрос DBS Все данные ДБ отображает текущую базу данных 2. Создайте базу данных use Database_Name Без этой библиотеки автоматич.


TP5 использует SDK Express 100

Рендеринг запросов По коду Код контроллера Экспресс 100 код 2 способа получения экспресс-информации (с расширением curl и без curl), Если у вас есть расширение curl, вы можете просто скопировать класс.


Серия руководств по Webpack4 (3): многостраничное решение - извлечение открытого кода

Объясните в этом урокеwebpack4В процессе упаковки многостраничных приложенийИзвлечь открытый кодРаздел. По сравнению сwebpack3,4.0Для версииoptimization.splitChunksКонфигурация заменена3.0ВерсияCommon.

LeetCode-448. Найти все пропущенные числа в массиве

титульный Для целочисленного массива с диапазоном 1 ≤ a [i] ≤ n (n = размер массива) некоторые элементы в массиве появляются дважды, а другие - только один раз. Найти все числа, которые не появл.

Читайте также: