Тёмный

Vertical Scroller - заключение, Паттерны на практике, DialogManager, Entry Point, Unity C# 

Sergey Kazantsev
Подписаться 4,7 тыс.
Просмотров 2,1 тыс.
50% 1

Ох, ребятушки, вроде темы небольшие, но запотеть пришлось знатно. Так как было много именно практики - мало красивых схем и много трансляций записи с кода. Надеюсь, вам понравилось :)
Ссылка на гитхаб игры:
github.com/Haywaar/VerticalSc...
Автору на кофе и шаурму
4276 5500 5792 8742 - карта Сбербанка
Если будут вопросы
мой тг @wargy
моя почта kazancev.s215@gmail.com
Тайминги:
00:00 Введение
00:36 Проблема создания окон в игре
01:55 Всё про DialogManager
04:43 Организация конфигов в игре
07:24 Чуть-чуть про Entry Point
10:47 Критика и слабые места
13:27 О приемлемом уровне разработки
16:17 Финал

Игры

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

 

27 июл 2024

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 36   
@user-mm7ch3xw4e
@user-mm7ch3xw4e Год назад
Комментарий в поддержку канала. Смотреть будем потом)))
@mikki5923
@mikki5923 Год назад
Я сейчас пробежусь по всем видео и каждому лайк поставлю. Ты топ! Продолжай за MVVP, MVP огромное спасибо. Просто пушка.
@pashafilenko1567
@pashafilenko1567 Год назад
Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?
@StratoCatster
@StratoCatster 8 месяцев назад
Спасибо за контент! Касательно entry point и composition root - это все про DI. Как раз читаю книжку по нему. И да в копозишн рут может полная шляпа твориться и это не всегда страшно.
@yuryk3397
@yuryk3397 Год назад
Царский лайк! Очень долго не тыкал в юнити потому что было непонятно как писать по науке без драга префабов в инспектор (;
@nightyonetwothree
@nightyonetwothree 10 месяцев назад
по сути весь DI очень удобно прокидывать через ентри поинт, там же использовать сервис локатор. Что убирает потребность в синглтонах, т.к. все зависимости теперь либо достаются из локатора, либо прокидываются в конструктор/инициализацию из ентри поинта.
@sergeykazantsev1655
@sergeykazantsev1655 10 месяцев назад
Согласен. В том же зенжекте все зависимости устанавливаются в тех же MonoInstaller, который етри поинтом и является. Впрочем у меня под одним из видео была жаркая дискуссия где оппонент доказывал, что сервис локатор имеет те же проблемы что и у синглтона и вообще используйте DI-контейнеры а не SL. Оппонент был во многом прав, но всё же я считаю что в некоторых местах SL вполне себе подходит)
@darkhaunt9930
@darkhaunt9930 Год назад
Спасибо за видос! Наткнулся недавно на канал, пересмотрел все видео. Спасибо,что освящаете темы более продвинутого программирования, такие каналы, как вы - на вес золота сейчас в сегменте!
@maxn6233
@maxn6233 Год назад
Спасибо за классное видео! У меня вопрос по окнам: Почему нельзя держать всё диалоговые окна на канвасе в неактивном состоянии и просто Show/Hide их когда это необходимо? Мне даже тяжело вспомнить случай диалогового окна, которое не покажется за время жизни сцены… У окон Win/Lose - ~50% быть показанными. Т.е. я хочу спросить, в чём кроется главная проблема, которая вынуждает нас инстанциировать прифабы окон при их необходимости, а при закрытии дистроить их?
@sergeykazantsev1655
@sergeykazantsev1655 Год назад
Если у вас 5 типов окон, да, можно их создать и пусть лежат выключенными на сцене. Но надо контролировать за ними ссылки и чтобы не было каких-то условий чтобы одновременно на сцене не было 2х окон одного типа(например 2 окна шмотки, когда вы сравниваете новый и старый меч) Если же окон у вас много(100+), как в каком-нибудь Raid, то хранить всю эту портянку на сцене будет и визуально муторно и по памяти не очень. К тому же не стоит забывать что есть вложенные окна, когда одно окно является внутренним меню другого(инвентарь - инфо о предмете - окошко усиления предмета). Такое на сцене хранить будет крайне неудобно и сложно.
@botcser
@botcser 8 месяцев назад
Уважаемый товарисч джедай, будут ли ролики про паттерны Адаптер, Декоратор, Proxy?
@sergeykazantsev1655
@sergeykazantsev1655 8 месяцев назад
Декоратор в планах, где-то четвёртый в очереди
@botcser
@botcser 8 месяцев назад
@@sergeykazantsev1655 Мда, на Адаптер лучше даже не тратить время
@sergeykazantsev1655
@sergeykazantsev1655 7 месяцев назад
Почему?)
@botcser
@botcser 7 месяцев назад
@@sergeykazantsev1655 Слишком элементарный и очевидный
@twsqrt-1228
@twsqrt-1228 Год назад
Здравствуйте. Хотел спросить, можно ли использовать Service Locator (и подобные сомнительные паттерны) для демонстрационного проекта, который будет оценивать работодатель? Насколько вообще это критично для джуна?
@sergeykazantsev1655
@sergeykazantsev1655 Год назад
Здравствуйте, я бы сказал, что зависит от того, будет ли общение по вашему проекту с работодателем. Если после отправки задания обязательно будет созвон с лидом который задаст вам вопросы по проекту - то можно. Просто вы на созвоне объясните что знаете, что сервис локатор много где считается антипаттерном, и что в целом все рекомендуют вместо него использовать DI-контейнер. Если же созвона не будет или есть высок риск что после отправки проекта до созвона не дойдет... Может нет смысла рисковать. Хотя несмотря на то, что у нас было под видео про сервис локаторов несколько жарких дискуссий где мне довольно конструктивно объясняли почему сервис локатор - антипаттерн, я всё ещё убеждён что для небольших проектов его можно использовать.
@twsqrt-1228
@twsqrt-1228 Год назад
@@sergeykazantsev1655 Спасибо за ответ.
@claudiff5581
@claudiff5581 Год назад
Нравятся ваши видео, не думали завести тг канал?
@sergeykazantsev1655
@sergeykazantsev1655 Год назад
Ну если 5к подписчиков наберу - заведу) А пока нет особой нужды)
@Djegur
@Djegur Год назад
Сергей, вы собираете делать свой курс, или вы настоко щедрый,что бесплатно и дальше будите выкладывать такие хорошие уроки.
@sergeykazantsev1655
@sergeykazantsev1655 Год назад
Пока курс делать не планирую, так как придумать полноценный курс на кучу видеоуроков, с домашкой, обратной связью, раскруткой рекламы и тд это не то же самое что раз 2-4 недели по вечерочкам собирать материал и заснять видосик. Ну и плюс у меня есть основная работа, а если делать курс, работу придётся бросать. А я этого пока не хочу)
@Djegur
@Djegur Год назад
@@sergeykazantsev1655 Спасибо, вы у нас на вес бриллиантов)
@user-mu2du3np7d
@user-mu2du3np7d 4 месяца назад
Спасибо за инфу. А в чем реально проблема со script execution order? Everyone talks about this sh*t, but noone explains "почему плохо его использовать, и в чем реально состоит проблема?"
@sergeykazantsev1655
@sergeykazantsev1655 4 месяца назад
Проблема заключается в том, что если у вас игра зависит от порядка инициализирования систем и вы используете Script Execution Order - высока вероятность того, что в будущем у вас будут большие проблемы. Много систем будут зависеть друг от друга, правильный порядок инициализации настроить будет очень болезненно, в Script Execution Order попадёт больше половины написанных систем и огромную часть времени вы будете тратить не на модификацию или написание нового кода, а на распутывание этого порядка инициализации
@user-mu2du3np7d
@user-mu2du3np7d 4 месяца назад
А в чем разница прописать порядок инициализации систем в script order-е или через свежий класс bootstrap-a, entryPoint-a? Из далека действия очень похожи между собой...
@sergeykazantsev1655
@sergeykazantsev1655 4 месяца назад
Да, они действительно похожи между собой, но я бы сказал что тут проблема в наглядности и явности. Если у вас есть entry point или bootstrap, любой разработчик вступающий в команду сразу видит порядок вызовов. А если разработчик не в курсе, до идеи залезть в Script Execution Order он дойдет очень не сразу)
@user-mu2du3np7d
@user-mu2du3np7d 4 месяца назад
Получается какая-то аксиома Эскобара если сравнивать
@sergeykazantsev1655
@sergeykazantsev1655 4 месяца назад
Один из вариантов считается более прозрачным и нагглядным)
@botcser
@botcser 6 месяцев назад
"Странно пропихивать префабы окон в gamecontroller"? А не странно ли гавнокодить окна вручную в инструменте, который предоставляет возможность создания и управления окнами посредством UI Editor, чтобы не нужно было гавнокодить их вручную. Да и зачем префабы, просто включать/отключать объекты на сцене (окна).
@sergeykazantsev1655
@sergeykazantsev1655 6 месяцев назад
То есть если у тебя под тридцать разных окошек в игре, они все должны быть сразу на сцене? А модифицировать и переделывать окна как если префабов нет? Прямо на сцене? Как историю изменения префабов отслеживать?
@botcser
@botcser 6 месяцев назад
@@sergeykazantsev1655 Да хоть 100500, какая разница, если они все аккурат разложены по папочкам с говорящей иерархией и имеют простую и понятную структуру, тем более что одновременно активны из них 1 - 4шт. И зачем кучу окон? Одно окно-оверлей для сообщений пользователю с гридом для кнопок (ошибка, инфо, вопрос (даже ввод цифр можно встроить)), другое для наград, третье для результатов игры... штучная вещь. Окна само переделываются исходня из входных данных (количество награды, иконки... небольшие изменения). Тем более что с того что они на сцене, не нужно тратиться на инстанцирование и удаление. Мутить ObjectPool както слишком мелко. Я не понимаю, зачем чтото программируется вручную, если для этого было сделана среда разработки, чтобы это разрабатывать мышкой через интерфейс. Тоже самое, что создавать массив, структуру, наделять его методами, когда можно воспользоваться готовым List.
@sergeykazantsev1655
@sergeykazantsev1655 6 месяцев назад
Как я уже сказал есть несколько причин. Первая - это командная разработка. Если префабов окон нет, первый разработчик сделал новое окно А, а второй разработчик в этот же момент сделал новое окно Б, в главной ветке будет конфликт в файле сцены. Распутывать такое без префабов очень сложно. То же самое касается отслеживания истории изменений окна. По префабу легко и довольно удобно отследить мелкие точечные изменения (сделали шрифт побольше, цвет кнопки поменял и тд) - по сцене непонятно какой именно элемент поменялся Плюс есть окна которые используются в нескольких сценах. (Окна подтверждения, каких нибудь настроек и тд) - добавлять их на несколько сцен? А если окно изменилось, надо на каждую сцену переносить новое окно? А как если нет префаба
@botcser
@botcser 6 месяцев назад
@@sergeykazantsev1655 Спасибо за разъяснения. Но. Чтото насчет командной разработки мутно объяснил) конфликты могут быть везде, если нет взаимосвязей и системы и возможностью бесконтрольно создавать. При окнах-объектах на сцене всё понятно - вот есть окно оверлей отвечающее за вывод инфу поверх всех окон, хочешь чтото сказать пользователю - узнай как оно работает и вызывай; вот окно результатов... нужно новое окно - обсуди, создай по подобию существующих; а создать префаб объекта и плюхнуть его на новую сцену, распаковав префаб - изи. Менеджер окон наконец мб с аля шиной эвентов. История? Гитхаб в помощь. Не знаю, ощущение, что создавать UI в Unity из кода из статичных данных это зашквар (простой в 90%).
@sergeykazantsev1655
@sergeykazantsev1655 6 месяцев назад
Ну давай попробую яснее объяснить Есть два юнитолога в команде: Вася и Петя Васе надо сверстать окно YouWinDialog, Пете YouLoseDialog. Вася и Петя как правильные люди создают ветки от мастера в Гите, верстают окна и добавляют их как не префабы на сцену. Вася вливает свой диалог в ветку мастер, Петя пытается влить свою и бац, возникает мерж конфликт, потому что на месте куда Петя поставил youlosedialog, стоит Васин youwindialog И опять же, как ты по Гиту по истории гита поймёшь какие изменения ты сделал в том или ином окне? У тебя а истории будут изменения только в файле сцены
Далее
БАТЯ И ТЁЩА😂#shorts
00:58
Просмотров 2,4 млн
EVENT BUS in Unity (with Unity Events!)
15:37
Просмотров 1,3 тыс.
20 Advanced Coding Tips For Big Unity Projects
22:23
Просмотров 168 тыс.
КРАФТИМ 10 НЕМЛЕСС ФРАГМЕНТОВ
1:59:07