Проект
HTML-код
- Опубликовано: 15 июл 2024
- Поддержать проект можно по ссылкам:
www.donationalerts.com/r/game...
boosty.to/gamedevlavka
paypal.me/gamedevlavka
Просили третью сцену? Добавляем третью сцену с главным меню! Пока визуально все выглядит скудно, зато архитектурная база понятна! Да, с оговорочками, но это исключительно для того, чтобы не перегрузить видео разнородной информацией, чтобы лучше усвоилось. Шаг за шагом. Итеративный подход! Короче, смотрите уже!
Описание игры в телеграм-канале Лавки Разработчика:
t.me/c/1748704478/7458
Проект на GitHub:
github.com/vavilichev/mBuilding
Отсылки:
t.me/gamedevlavka - телеграм канал Лавки Разработчика
t.me/gamedevtavern - ламповый чат
/ discord - дискорд
__________
0:00 Вступление-демонстрация
1:39 Почему не не будем использовать стейт машину
3:20 Начинаем работу с IU (а то у нас его еще нет толком)
4:06 Правки внутри UIRoot префабе
5:22 Добавляем функционал для UIRootView
7:44 Готовим префабы для UI на сценах Gameplay и MainMenu
9:06 Пишем UIGameplayRootBinder - баиндер для рутового UI объекта на сцене Gameplay
11:10 Правим точку входа на сцену Gameplay
13:43 Правим GameEntryPoint и смотрим промежуточный этап
14:49 Готовим сцену для MainMenu
15:50 Готовим запуск сцены MainMenu из точки входа в игру
17:50 Готовим точку входа в сцену MainMenu и другие скрипты идентично сцене Gameplay
20:00 Доготавливаем сетап сцены и ссылки и смотрим, что получилось с MainMenu
21:03 Дописываем переходы по сценам (грязно, потому что мы бандиты)
22:15 Результаты и заключительные пояснения
Спасибо за SceneManagment! И спасибо что читаешь комментарии! Очень ценный канал.
Ждём видосы почаще ;)
Ждал продолжения и вот оно вышло ❤. Хочу сказать спасибо за такой обучающий конент.
Еще было интересно про хорошую систему DataPersistence между сценами
🔥🔥🔥!
Большое спасибо, и жду продолжения!
Великолепно! Большое спасибо, что сделали!👍
Лучше любого курса за 50 000 руб и всяких "летних лагерей" имени краснознаменного Сакутина
Супер, спасибо!
А они все ложат и ложат!)
Супер! Спасибо большое! Еще бы понять как Di юзать. Ок, мы в точке входа все засетапили, но я так понимаю, к контейнеру нужен глобальный доступ. Через singleton? Чувствую это как то красивее можно сделать....
@@MrGolovewkin все будет, нужно подождать) двумя словами понятно не описать)
Привет, теперь стало намного понятней как взаимодействовать между меню и геймплей сценой. Есть вопрос как переключать несколько геймплей сцен. Я планирую делать игру с несколькими локациями, в которых геймплей будет идентичен, а переключение между локациями происходит не из меню, а с помощью вызова канваса на кнопку ESC и выбора локации из списка. В даном случае переключение геймплей локации будет на стороне скрипта канваса который хендлит все ето? Или можно как то прикрутить все в глобальний SceneManagement?
Класс, спасибо за видео! А есть какое-то расписание выхода? Курс смотреть и игру делать хочется, а ролики непонятно когда выходят
@@Vorono4ka пока конкретно по проекту видео выходят раз в 1-2 недели, чаще у меня просто физически не получается
У тебя наверное есть какой-то план на темы будущих видео. Но если их не много, или просто нужны идеи, дай знать, накидаю тебе список, который может кому-то показаться интересным или полезным!) Сейчас джуню на большом игровом проекте и часто сталкиваюсь с задачами, которые не всегда даже понимаю, как лучше решить.)
План более менее есть, но ты накидывай, вдруг чего упускаю)
еще вопрос: в методе RunGame(), в проверке на имя сцены главного меню, есть смысл от return? просто в видео ты его не написал, а у меня он написан :D
Да, это не совсем ошибка. Дело в том, что работать будет корректно, т.к. после проверки на сцену меню больше нет загрузок и в следующей проверке на пустую сцену метод завершится. То есть фактически ничего не сломается, но код пройдёт чутка больше проверок
Почему такая нелюбовь к экшинам? Так ли реактивный подход лучше?
Я немного преувеличиваю их фу, экшны имеют право жить, это вкусовщина больше. Реактивный подход гораздо гибче, поэтому он мне нравится больше, однако, в нем нужно хорошо разобраться, прежде чем использовать
Это такая ловушка. Месяц придумываешь архитектуру вместо того что бы писать игру.
Смотря чего ты от жизни ожидаешь. Когда понимаешь, как создавать архитектуру - то решаешь кучу проблем с отказоустойчивостью и багами. Плюс открывается бесконечное пространство для переплетения различных механик без риска оказаться в заднице с нерабочей лапшой вместо кода. То есть, если цель делать небольшие сингловые игры - то архитектурой можно не заморачиваться. Если цель - большие и сложные игры, то тут придётся позаботиться о коде
Вообще еще Иисус в Нагорной проповеди намекал на то, что дом нужно строить на каменном фундаменте, а не на песочке... Хотя да, на закладку фундамента, конечно, требуется время.
@@igor_mutny у меня достаточно опыта. Я соглашусь что разработчику нужно пойти через solid, ioc контецнеры. Обмазать всё интерфейсами. Проникнуться TDD.
Я скорее сомневаюсь что этому можно научиться не набивая шишки. Сложно объяснить зачем нужна инверсия управления на примере. Это будет выглядеть как ненужное переусложнение.
прости, что за Canvas (Environment) в префабах UI? Видимо у меня из за его отсутствия неправильно аттачатся префабы UI к основному UIRoot
Скажи временную метку, а то я что-то не понимаю вопроса
@@gamedevlavka 7:52, в префабах самый первый объект Canvas (Environment)
Долго не мог понять о чем речь, но все таки понял)
Нет, это не причина. Canvas (Environment) - это подсказка, что префаб работает в окружении Canvas, а не World, то есть координаты работают по-другому. Смотри внимательней, где-то что-то пропустил)
@@gamedevlavka всё, разобрался. спасибо
@@gamedevlavka как так получилось, что GameplayUI не содержит Canvas? Что еще за окружение? У меня при добавлении Image в GameplayUI автоматически создается Canvas, а на видео этого нет. Из-за этого при старте игры UI неправильно центрируется.
А ничего что про загрузке между сценами мы каждый раз переходим в бут сцену? Или в дальнейшем этого перехода не будет?
Об этом я пояснял в предыдущем видео, это лучшая практика, если хочешь избежать проблем создания новых объектов, пока старые ещё не удалились (в юнити новая сцена стартует раньше, чем старая уничтожается)
Это костыль с верой в чистое будущее, чтобы не делать асинхронную выгрузку сцены
@@DarkIllusoire некоторые платформы требуют переходы между сцен делать через пустую сцену (например, нинтендо), вероятно у них там свои "нюансики".
Переход через пустую сцену не обеспечивает исключение асинхронной выгрузки, но делает этот процесс понятнее и менее рискованным
@@gamedevlavka а можно еще примеры платформ, где это требуется, кроме нинтендо? Можно так же пример обсуждения этой проблемы на нинтендо, очень интересно почитать решение данной рпоблемы?
При виде "грязного вонючего кода" глаза не закрывал, потому что у меня чистовые варианты ничуть не лучше 🤣 Вот прямо вот так и делаю: вешаю на кнопку скрипт с Action'ом, ОченьВажныйCoreОбъект подписывается на этот Action и по нажатию кнопки запускает ОченьВажныеCoreМетоды 🤣 Даже не представляю, как это должно реализовываться по-нормальному.
Пока до конца не вкурил, почему UI делается НАСТОЛЬКО отдельно от содержимого сцены (ну, DontDestroyOnLoad с "глобальным" загрузчиком UI-ев и прочее).
Смотри:
1. UI должен быть независимым от сцены, потому что есть загрузочный экран, который должен закрывать как там за ним сцены меняются, объекты создаются, инициализируются и т.д. Это факт, тут просто по-другому не закроешь это дело. Конечно, если мы не говорим о ситуациях БЕЗ всяких закрытий, где на создании объектов в рантайме происходят фризы.
2. Каждая сцена содержит свой список префабов окошек. Если их поместить сразу в один список, то они загрузятся в оперативную память все сразу. То есть все ссылки, которые ты кидаешь в редакторе на префабы, они загрузят эти префабы в память сразу. Больше префабов - больше использования памяти. Поэтому разделив все окошки на списки, мы оптимизируем количество используемой памяти.
@@gamedevlavka теперь понял, спасибо 👍
@@gamedevlavka подписался на Boosty 👍
Пасибо❤️