Ваш канал просто находкаю. За тему паттернов отдельное спасибо! Не знаю думали вы об этом или нет, но было бы здорово иметь под каждым видио сылку на репотозиторий с материалами урока.
Касательно вопроса из видео, мне посоветовали всегда использовать паттерны, их по сути не нужно писать совсем с нуля, но они могут быть лучше чем стандартные методы Unity
@@gaitavr1992 дело в том, что несмотря на то, что видео короткое, я трачу на него раз в 5 больше времени, т.к. приходится останавливать и самому вникать в написанный код. Зачастую десятиминутное видео изучается около часа.
@@gaitavr1992 ну зачастую вы показываете сразу 3 класса на одном экране, которые наследуют друг-друга и при этом объясняете как оно все работает. Я думаю, мало кто сможет сразу прочитать весь код и вникнуть в суть за такое короткое время. Возможно, некоторые просто вообще не вникают в код, а просто слушают как оно на словах работает, тогда им нормально.
Отличное видео. Но надо посидеть, разобраться в каждом скрине и начинает доходить. Хотя в начале заходишь, думаешь такой: "О Обсервер за 6 мин, огонь, ща" Но в реальности зависаешь на паузе на часик другой.
Спасибо за видос!) Макс, на 2:07 ты вызываешь деструктор, получается сборщик мусора добавит этот объект в очередь на удаление и выполнит отписку? Просто не понятно с активными ссылками, вроде же GC такие объекты игнорит
Добрый день, вопрос как быть с очередностью подписок на каком-то ивенте? Пример: персонаж получает урон, подписано 2 ивента 1 хочет убрать 10 от входного урона, а второй 20%. Из бизнес требований ясно, что сначала должны вычитаться проценты, а только потом целые части. Как решаются такие проблемы? Заранее спасибо
Спасибо за видео. Подскажите, что за синтаксис на 2:05 на строке 20: ~Player(){... - будто конструктор. Что за тильда? Вызывается при уничтожении объекта?
Unitask это часть UniRX, а Zenject это совсем другая история. Недавно на канале вышел ролик про async await чисто C#, это даст понимание примерное об UniRX, а Zenject я через несколько месяцев прикручу к tower defense
Добрый день, вопрос применим ли этот паттерн к следующему поведению. Персонаж взаимодействует с обьектами, либо передвигается по navmesh. Если нажать на обьект песонаж должен подойти к нему и толкьо после этого повзаимодействовать с ним. Обычно это дело делают через проверку дистанции до обьекта, но выглядит это давольно тапорно. Либо как это реализуется без патернов?
Совсем маленьким паттерны еще не нужны) Нужен рабочий, простой код и понимание используемого инструментария (если брать этот ролик, то понимать отличие делегата от события)
@@gaitavr1992 Так же как и linq, во всем нужна своя мера, но я вот пришел к тому что мне не нужен update в 95% случаев. ну и я имел опыт что update`ы "жрут" намного больше чем мусор от unirx - между двух зол выбирай меньшее
2:50 Говоришь "Слабая связанность" - и тут же делаешь жоскую ссылку на статический класс, вместо нормального получения зависимости через конструктор и подписки на событие у этой реализации >__
Со статическим классом связанность жесткая, а между конфиг провайдером и остальными частями системы слабая. Когда у вас в проекте будет необходимость пробросить в несколько конструкторов вглубь какую-либо систему - я бы на это посмотрел. Ну или в крайнем случае использовать DI контейнер
@@gaitavr1992 а кто в наше время в здравом уме работет без DI на сложных проектах? В любом случае, код с конструктором проще поддерживать, чем код в котором куча статических классов с состоянием. Потому как понятно какие у класса зависимости и их можно подменить во врем тестирования (при условии использования интерфейсов).
Сразу 2 пункта: DI тяжелый, для многих проектов это критично, проходили. DI - расслабляет разработчика планировать свою архитектуру, бахнул INJECT и готово, вы когда-нибудь строили дерево зависимостей в таких проектах, я видел тысячи узлов, которые невероятно сложно менять. EventHolder это один из классических способов внедрения посредников в работу, есть возражения?
@@gaitavr1992 EventHolder - это типичная шина событий из времён AS3 - AddEventListener и прочее безобразие, столько этого мусора перековырял в проектах того времени не перечесть - подисаться подписался - а отписаться забыл - приплыли, потеря памяти, плавающие ошибки. А на счёт бахнуть Inject - я вот ща в проекте на 165000 строк запустил поиск - 2 применения (компонент локализации и система окон - для резолва панелей) - все остальные зависимости передаются через конструктор - в среднем не больше 5 зависимостей (локализация и аналитика не в счёт). Зависит от того как вы выстроите в своей команде подход к разработке, проверке кода и прочему - следуешь простым правилам и код не становится совсем уж плохим.
4:00 жиза 100%, когда игра готова, а из последних сил еще надо прикручивать аналитику то хардкодом ляп ляп в методах, которые делают что-то интересное через статик аналитик класс)
Я в таких случаях делаю медиатор, который реагирует на какое-то событие с данными, при срабатывании события медиатор берёт эти данные и отправляет в аналитику. Но я тоже грешу и иногда прям в коде хреначу))
Вначале я посмотрел - не понял. Решил поискать инфу у других, вроде как нашел - (th-cam.com/video/cXU1rETKm24/w-d-xo.html) - понял Во второй раз посмотрел - кое как, если честно. Тяжело было понять кто там наблюдатель, кто наблюдаемый, где агрегатор и т.д. В конце более менее уже было похоже, то что я где-то в другом месте увидел. "Голова уже кружится, пора отдыхать видимо". Можно вопрос? Везде пишут, то что паттерны не нужно на право и на лево впихивать. Для чего как вы думаете больше всего подходит паттерн наблюдатель?
Наблюдатель это, наверное, самый употребляемый паттерн, так как инструмент в языке уже готовый(события). Поэтому и применяется везде, где обработчики действия могут меняться и не известны отправителю. Это ослабляет связь(особенно важно при использовании событий на низком уровне, а подписывается высокоуровневый)
Конечно инетерсно это видео. У тебя самый прикольный канал среди русскоязычных юнити девелоперов. Жаль только видео давно не выходят.
Заебись!)
Продолжай)
Ваш канал просто находкаю. За тему паттернов отдельное спасибо!
Не знаю думали вы об этом или нет, но было бы здорово иметь под каждым видио сылку на репотозиторий с материалами урока.
Спасибо, у меня почти под каждым видео репозиторий. Исключение теоретические видосы)
@@gaitavr1992 Ну тогда вообще все идеально! ) Еще раз спасибо за канал и работу!
Спасибо за такую информацию, в связке (юнити + паттерны) я такого не находил. Очень полезно.
Приятно удивлен, что тема вызывает интерес у разработчиков
@@gaitavr1992 да просто хочется научиться писать красивый код, который можно будет в будущем поддерживать)
UniRx наше всё! Очень интересна тема жонглирования потоками в UniRx
Там нет потоков
@@gaitavr1992 Ага, я понимаю, не так выразился - подписками.
комментарий в поддержку )
Касательно вопроса из видео, мне посоветовали всегда использовать паттерны, их по сути не нужно писать совсем с нуля, но они могут быть лучше чем стандартные методы Unity
Использую UniRx и Zenject, хочу еще наконец-то разобраться в UniTask
Делал что то подобное...как по мне очень удобно.
Чотко, мне понравилось)
Шикарные видосы! Но слишком плотно наваливаешь) можешь делать на один уровень подробнее?
Сложно соблюсти баланс между длиной видео и понятностью материала. Если есть вопросы - спрашивай
@@gaitavr1992 дело в том, что несмотря на то, что видео короткое, я трачу на него раз в 5 больше времени, т.к. приходится останавливать и самому вникать в написанный код. Зачастую десятиминутное видео изучается около часа.
А кто-то справляется за раз, ему ускорять видео или мотать нужно в таком случае?
@@gaitavr1992 ну зачастую вы показываете сразу 3 класса на одном экране, которые наследуют друг-друга и при этом объясняете как оно все работает. Я думаю, мало кто сможет сразу прочитать весь код и вникнуть в суть за такое короткое время. Возможно, некоторые просто вообще не вникают в код, а просто слушают как оно на словах работает, тогда им нормально.
@@Nightmareinfos Это ведь канал о unity, а не изучении Шарпа) Непонятно - ставишь на паузу и разбираешься. Весь код же на экране
Вот бы угадать требования по аналитике
Лайк за делегат комбайн! Я думаю, 99% юнити-разработчиков и слов-то таких не знают)
Очень хотелось бы больше материалов по ECS ( От Entitas или Юнитишный) как никак, но юнитеки видят в этом будущее, да и у компаний спрос растет.
Спасибо
Спасибо за то, что ты есть. Ты делаешь очень хороший и качественный контент для программистов!)
Ничего не понял но было очень интересно, лайк.
Пытался в UniRX, не очень получилось. Хотелось бы видео о нем)
Спасибо !!! коротко и информативно
А есть ли смысл в дтошке использовать свойство с публичным get и set?
Отличное видео. Но надо посидеть, разобраться в каждом скрине и начинает доходить.
Хотя в начале заходишь, думаешь такой: "О Обсервер за 6 мин, огонь, ща"
Но в реальности зависаешь на паузе на часик другой.
Полезно! Спасибо за инфу!
Видео просто бомба) Спасибо за старания)
Коммент просто накрученный треш.
Полезно! Спасибо!❤️
Спасибо за видос!) Макс, на 2:07 ты вызываешь деструктор, получается сборщик мусора добавит этот объект в очередь на удаление и выполнит отписку? Просто не понятно с активными ссылками, вроде же GC такие объекты игнорит
Это я протупил и оставил, оно не нужно
Добрый день, вопрос как быть с очередностью подписок на каком-то ивенте?
Пример: персонаж получает урон, подписано 2 ивента 1 хочет убрать 10 от входного урона, а второй 20%.
Из бизнес требований ясно, что сначала должны вычитаться проценты, а только потом целые части.
Как решаются такие проблемы?
Заранее спасибо
Добрый. Порядок подписки определяет порядок обработки, но это ненадёжно. Нужен посредник, который обработает урон и нанесет результат
Наконец-то видео по паттернам в Unity, Хоспаде, храни Максима
Спасибо за видео. Подскажите, что за синтаксис на 2:05 на строке 20: ~Player(){... - будто конструктор. Что за тильда? Вызывается при уничтожении объекта?
Да, это деструктор
деструктор
А вообще нужен ли Update? Я только изучаю Unity, тренируюсь и проверяю разные идеи и практически забыл, что есть Update. Всё делаю в сопрограммах.
Очень хотелось бы услышать видео о UniRx, желательно в связке с Zenject
Да, до этих тулзов я тоже доберусь, там одним видео не отделаться
Хотелось бы про связку UniRx, UniTask и Zenject послушать
Unitask это часть UniRX, а Zenject это совсем другая история. Недавно на канале вышел ролик про async await чисто C#, это даст понимание примерное об UniRX, а Zenject я через несколько месяцев прикручу к tower defense
Я вообще начинающий. Смотрю и ничего не понимаю. И это отличный повод разобраться.
тоже самое, настолько круто, что я не понимаю ничего)))
Це дуже цікаво хотілось би більше інформації і прикладов в коді
Добрый день, вопрос применим ли этот паттерн к следующему поведению.
Персонаж взаимодействует с обьектами, либо передвигается по navmesh.
Если нажать на обьект песонаж должен подойти к нему и толкьо после этого повзаимодействовать с ним.
Обычно это дело делают через проверку дистанции до обьекта, но выглядит это давольно тапорно.
Либо как это реализуется без патернов?
Стейт машина подойдет
Зачет, благодарю бро!
Я не понимаю откуда ты взял IClickHandler, где ты его описал?
Но насколько я понял в этом интерфейсе один метод, который ты вызываешь
Максим, а расскажи про классы с окончанием Provider. В этом видео они упоминаются часто. Это паттерн какой то или ты просто от себя так именуешь?
Это не паттерн, просто суффикс, который очерчивает суть класса
Ты крут! Но это пока не мой уровень, загляну через пару лет, может что-то понятно станет)) А пока подпишусь на будущее.
Хотелось бы более разжевано...так сказать, для совсем маленьких)
Совсем маленьким паттерны еще не нужны) Нужен рабочий, простой код и понимание используемого инструментария (если брать этот ролик, то понимать отличие делегата от события)
Что то я не до конца понял... В UserRegistrationInfo то что? В 5.55
Это обычный класс, там нечего показывать
Безусловно очень полезно, но капец сложно 😅
От души, Благодарю!
Как понять паттерн? Типа шаблон или что?
Да
Давно уже на Rx. Касаемо Unity: UniRx, а когда вижу методы Update в чужом коде, то становится не по себе.
Не нужно от update отказываться. Unirx генерит много мусора
@@gaitavr1992 Так же как и linq, во всем нужна своя мера, но я вот пришел к тому что мне не нужен update в 95% случаев. ну и я имел опыт что update`ы "жрут" намного больше чем мусор от unirx - между двух зол выбирай меньшее
нет вообще не догадался, даже мысли такой не было
2:50 Говоришь "Слабая связанность" - и тут же делаешь жоскую ссылку на статический класс, вместо нормального получения зависимости через конструктор и подписки на событие у этой реализации >__
Со статическим классом связанность жесткая, а между конфиг провайдером и остальными частями системы слабая. Когда у вас в проекте будет необходимость пробросить в несколько конструкторов вглубь какую-либо систему - я бы на это посмотрел. Ну или в крайнем случае использовать DI контейнер
@@gaitavr1992 а кто в наше время в здравом уме работет без DI на сложных проектах? В любом случае, код с конструктором проще поддерживать, чем код в котором куча статических классов с состоянием. Потому как понятно какие у класса зависимости и их можно подменить во врем тестирования (при условии использования интерфейсов).
Сразу 2 пункта: DI тяжелый, для многих проектов это критично, проходили.
DI - расслабляет разработчика планировать свою архитектуру, бахнул INJECT и готово, вы когда-нибудь строили дерево зависимостей в таких проектах, я видел тысячи узлов, которые невероятно сложно менять. EventHolder это один из классических способов внедрения посредников в работу, есть возражения?
@@gaitavr1992 EventHolder - это типичная шина событий из времён AS3 - AddEventListener и прочее безобразие, столько этого мусора перековырял в проектах того времени не перечесть - подисаться подписался - а отписаться забыл - приплыли, потеря памяти, плавающие ошибки. А на счёт бахнуть Inject - я вот ща в проекте на 165000 строк запустил поиск - 2 применения (компонент локализации и система окон - для резолва панелей) - все остальные зависимости передаются через конструктор - в среднем не больше 5 зависимостей (локализация и аналитика не в счёт). Зависит от того как вы выстроите в своей команде подход к разработке, проверке кода и прочему - следуешь простым правилам и код не становится совсем уж плохим.
Если бы все эти правила были просты, то тех долг никогда не возникал бы
4:00 жиза 100%, когда игра готова, а из последних сил еще надо прикручивать аналитику то хардкодом ляп ляп в методах, которые делают что-то интересное через статик аналитик класс)
Я в таких случаях делаю медиатор, который реагирует на какое-то событие с данными, при срабатывании события медиатор берёт эти данные и отправляет в аналитику. Но я тоже грешу и иногда прям в коде хреначу))
Ты случае не работал в Blizzard ?
Хех, если бы) это моя любимая компания по части игр
такой годный контент и очень мало просмотров((
Макс го видео по AI в Unity!
О, это как-нибудь потом) Наверное буду делать такое в TowerDefense
Вначале я посмотрел - не понял.
Решил поискать инфу у других, вроде как нашел - (th-cam.com/video/cXU1rETKm24/w-d-xo.html) - понял
Во второй раз посмотрел - кое как, если честно. Тяжело было понять кто там наблюдатель, кто наблюдаемый, где агрегатор и т.д. В конце более менее уже было похоже, то что я где-то в другом месте увидел. "Голова уже кружится, пора отдыхать видимо".
Можно вопрос? Везде пишут, то что паттерны не нужно на право и на лево впихивать. Для чего как вы думаете больше всего подходит паттерн наблюдатель?
Наблюдатель это, наверное, самый употребляемый паттерн, так как инструмент в языке уже готовый(события). Поэтому и применяется везде, где обработчики действия могут меняться и не известны отправителю. Это ослабляет связь(особенно важно при использовании событий на низком уровне, а подписывается высокоуровневый)
нашёл баг: я смотрел, но у меня всплыла подсказка)
EventHolder уже сильно похож на на другой шаблон
В первом или втором случае?
@@gaitavr1992 5:30 - больше похоже на посредника
Ну да, связка получилась
колбэк зло, await рулит)
+
Я думал я прям совсем говнокодер,а оказывается что я "наблюдатель"=)
В рамках этого канала продолжайте оставаться)
Вроде тема хорошая и текст неплохой, но этот говор или акцент… пи***ц бесит что тошнить начинает после 5 минут просмотра
Не смотри, мне не сильно интересен подобный фидбек