Паттерн наблюдатель в unity3D

  Рет қаралды 25,933

Максим Крюков

Максим Крюков

Күн бұрын

Продолжаем разбираться в паттернах проектирования в рамках unity3D и C#. Сегодня в выпуске самый распространенный паттерн - наблюдатель (observer).
Теория делегатов и событий - • Делегаты и события в u...
Паблик игроделов - special3d
Поддержка канала:
Patreon - www.patreon.co...
В крипте:
BTC - 16WmTb4VTFGYrwEjjnMKNNMMzsMB1rPEqD
ETH - 0x8d35406f8317b846528d0a9ea4a34ce59968dff2
XRP - rLW9gnQo7BQhU6igk5keqYnH3TVrCxGRzm (TAG - 1438215071)
LTC- MNSWdzdVsUMnozSU5HhUPEscfxaUK3Fdck
#unity3d #observer #patterns #gamedev

Пікірлер: 104
@IvanKriuchkov
@IvanKriuchkov 3 жыл бұрын
Шикарные видосы! Но слишком плотно наваливаешь) можешь делать на один уровень подробнее?
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Сложно соблюсти баланс между длиной видео и понятностью материала. Если есть вопросы - спрашивай
@Nightmareinfos
@Nightmareinfos 2 жыл бұрын
@@gaitavr1992 дело в том, что несмотря на то, что видео короткое, я трачу на него раз в 5 больше времени, т.к. приходится останавливать и самому вникать в написанный код. Зачастую десятиминутное видео изучается около часа.
@gaitavr1992
@gaitavr1992 2 жыл бұрын
А кто-то справляется за раз, ему ускорять видео или мотать нужно в таком случае?
@Nightmareinfos
@Nightmareinfos 2 жыл бұрын
@@gaitavr1992 ну зачастую вы показываете сразу 3 класса на одном экране, которые наследуют друг-друга и при этом объясняете как оно все работает. Я думаю, мало кто сможет сразу прочитать весь код и вникнуть в суть за такое короткое время. Возможно, некоторые просто вообще не вникают в код, а просто слушают как оно на словах работает, тогда им нормально.
@ruslan_yefimov
@ruslan_yefimov 2 жыл бұрын
@@Nightmareinfos Это ведь канал о unity, а не изучении Шарпа) Непонятно - ставишь на паузу и разбираешься. Весь код же на экране
@vladfinni6797
@vladfinni6797 2 жыл бұрын
Очень хотелось бы больше материалов по ECS ( От Entitas или Юнитишный) как никак, но юнитеки видят в этом будущее, да и у компаний спрос растет.
@ИбрагимИванов-э3р
@ИбрагимИванов-э3р Жыл бұрын
Конечно инетерсно это видео. У тебя самый прикольный канал среди русскоязычных юнити девелоперов. Жаль только видео давно не выходят.
@nezdanchickkun
@nezdanchickkun Жыл бұрын
Вот бы угадать требования по аналитике
@delalen8012
@delalen8012 3 жыл бұрын
Заебись!) Продолжай)
@ericetto1089
@ericetto1089 3 жыл бұрын
Использую UniRx и Zenject, хочу еще наконец-то разобраться в UniTask
@sh1nler243
@sh1nler243 3 жыл бұрын
Вначале я посмотрел - не понял. Решил поискать инфу у других, вроде как нашел - (kzbin.info/www/bejne/mYm4YqV7ibCgaJY) - понял Во второй раз посмотрел - кое как, если честно. Тяжело было понять кто там наблюдатель, кто наблюдаемый, где агрегатор и т.д. В конце более менее уже было похоже, то что я где-то в другом месте увидел. "Голова уже кружится, пора отдыхать видимо". Можно вопрос? Везде пишут, то что паттерны не нужно на право и на лево впихивать. Для чего как вы думаете больше всего подходит паттерн наблюдатель?
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Наблюдатель это, наверное, самый употребляемый паттерн, так как инструмент в языке уже готовый(события). Поэтому и применяется везде, где обработчики действия могут меняться и не известны отправителю. Это ослабляет связь(особенно важно при использовании событий на низком уровне, а подписывается высокоуровневый)
@ncinsli
@ncinsli Жыл бұрын
Пытался в UniRX, не очень получилось. Хотелось бы видео о нем)
@АлександрМальков-щ8л
@АлександрМальков-щ8л 3 жыл бұрын
Очень хотелось бы услышать видео о UniRx, желательно в связке с Zenject
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Да, до этих тулзов я тоже доберусь, там одним видео не отделаться
@Veyron104
@Veyron104 Жыл бұрын
нашёл баг: я смотрел, но у меня всплыла подсказка)
@ve1c0m
@ve1c0m 3 жыл бұрын
Хотелось бы про связку UniRx, UniTask и Zenject послушать
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Unitask это часть UniRX, а Zenject это совсем другая история. Недавно на канале вышел ролик про async await чисто C#, это даст понимание примерное об UniRX, а Zenject я через несколько месяцев прикручу к tower defense
@sweeepeeeeng
@sweeepeeeeng 2 жыл бұрын
А есть ли смысл в дтошке использовать свойство с публичным get и set?
@redice8928
@redice8928 Жыл бұрын
нет вообще не догадался, даже мысли такой не было
@RoGa766
@RoGa766 2 жыл бұрын
Добрый день, вопрос как быть с очередностью подписок на каком-то ивенте? Пример: персонаж получает урон, подписано 2 ивента 1 хочет убрать 10 от входного урона, а второй 20%. Из бизнес требований ясно, что сначала должны вычитаться проценты, а только потом целые части. Как решаются такие проблемы? Заранее спасибо
@gaitavr1992
@gaitavr1992 2 жыл бұрын
Добрый. Порядок подписки определяет порядок обработки, но это ненадёжно. Нужен посредник, который обработает урон и нанесет результат
@nikita8291
@nikita8291 3 жыл бұрын
Спасибо за видос!) Макс, на 2:07 ты вызываешь деструктор, получается сборщик мусора добавит этот объект в очередь на удаление и выполнит отписку? Просто не понятно с активными ссылками, вроде же GC такие объекты игнорит
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Это я протупил и оставил, оно не нужно
@malvislightfadynightgames2925
@malvislightfadynightgames2925 3 жыл бұрын
Я не понимаю откуда ты взял IClickHandler, где ты его описал?
@malvislightfadynightgames2925
@malvislightfadynightgames2925 3 жыл бұрын
Но насколько я понял в этом интерфейсе один метод, который ты вызываешь
@olexkov4643
@olexkov4643 5 ай бұрын
Делал что то подобное...как по мне очень удобно.
@angelldark6426
@angelldark6426 2 жыл бұрын
Це дуже цікаво хотілось би більше інформації і прикладов в коді
@neverworld8815
@neverworld8815 3 жыл бұрын
Касательно вопроса из видео, мне посоветовали всегда использовать паттерны, их по сути не нужно писать совсем с нуля, но они могут быть лучше чем стандартные методы Unity
@AleksYurchenko
@AleksYurchenko 2 жыл бұрын
А вообще нужен ли Update? Я только изучаю Unity, тренируюсь и проверяю разные идеи и практически забыл, что есть Update. Всё делаю в сопрограммах.
@NoldoWalker
@NoldoWalker 3 жыл бұрын
Спасибо за такую информацию, в связке (юнити + паттерны) я такого не находил. Очень полезно.
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Приятно удивлен, что тема вызывает интерес у разработчиков
@sigvist6228
@sigvist6228 3 жыл бұрын
@@gaitavr1992 да просто хочется научиться писать красивый код, который можно будет в будущем поддерживать)
@harmfulCat
@harmfulCat 2 жыл бұрын
Отличное видео. Но надо посидеть, разобраться в каждом скрине и начинает доходить. Хотя в начале заходишь, думаешь такой: "О Обсервер за 6 мин, огонь, ща" Но в реальности зависаешь на паузе на часик другой.
@sdfdfs
@sdfdfs 3 жыл бұрын
Макс го видео по AI в Unity!
@gaitavr1992
@gaitavr1992 3 жыл бұрын
О, это как-нибудь потом) Наверное буду делать такое в TowerDefense
@slavalopalo128
@slavalopalo128 3 жыл бұрын
EventHolder уже сильно похож на на другой шаблон
@gaitavr1992
@gaitavr1992 3 жыл бұрын
В первом или втором случае?
@slavalopalo128
@slavalopalo128 3 жыл бұрын
@@gaitavr1992 5:30 - больше похоже на посредника
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Ну да, связка получилась
@argotroll8811
@argotroll8811 2 жыл бұрын
Добрый день, вопрос применим ли этот паттерн к следующему поведению. Персонаж взаимодействует с обьектами, либо передвигается по navmesh. Если нажать на обьект песонаж должен подойти к нему и толкьо после этого повзаимодействовать с ним. Обычно это дело делают через проверку дистанции до обьекта, но выглядит это давольно тапорно. Либо как это реализуется без патернов?
@gaitavr1992
@gaitavr1992 2 жыл бұрын
Стейт машина подойдет
@romansharpe1131
@romansharpe1131 2 жыл бұрын
Максим, а расскажи про классы с окончанием Provider. В этом видео они упоминаются часто. Это паттерн какой то или ты просто от себя так именуешь?
@gaitavr1992
@gaitavr1992 2 жыл бұрын
Это не паттерн, просто суффикс, который очерчивает суть класса
@nightkotnightkot9997
@nightkotnightkot9997 3 жыл бұрын
Что то я не до конца понял... В UserRegistrationInfo то что? В 5.55
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Это обычный класс, там нечего показывать
@Eduard0213-x7p
@Eduard0213-x7p 3 жыл бұрын
+
@PavelStr-x5w
@PavelStr-x5w 2 жыл бұрын
комментарий в поддержку )
@vladfoton
@vladfoton 3 жыл бұрын
Хотелось бы более разжевано...так сказать, для совсем маленьких)
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Совсем маленьким паттерны еще не нужны) Нужен рабочий, простой код и понимание используемого инструментария (если брать этот ролик, то понимать отличие делегата от события)
@TeaCakeGames
@TeaCakeGames 3 жыл бұрын
4:00 жиза 100%, когда игра готова, а из последних сил еще надо прикручивать аналитику то хардкодом ляп ляп в методах, которые делают что-то интересное через статик аналитик класс)
@ve1c0m
@ve1c0m 3 жыл бұрын
Я в таких случаях делаю медиатор, который реагирует на какое-то событие с данными, при срабатывании события медиатор берёт эти данные и отправляет в аналитику. Но я тоже грешу и иногда прям в коде хреначу))
@seldemirov
@seldemirov 3 жыл бұрын
Ваш канал просто находкаю. За тему паттернов отдельное спасибо! Не знаю думали вы об этом или нет, но было бы здорово иметь под каждым видио сылку на репотозиторий с материалами урока.
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Спасибо, у меня почти под каждым видео репозиторий. Исключение теоретические видосы)
@seldemirov
@seldemirov 3 жыл бұрын
@@gaitavr1992 Ну тогда вообще все идеально! ) Еще раз спасибо за канал и работу!
@АлександрПолянский-у8х
@АлександрПолянский-у8х 3 жыл бұрын
колбэк зло, await рулит)
@ОлексійВискворкін
@ОлексійВискворкін 3 жыл бұрын
Я думал я прям совсем говнокодер,а оказывается что я "наблюдатель"=)
@gaitavr1992
@gaitavr1992 3 жыл бұрын
В рамках этого канала продолжайте оставаться)
@Андрей-в7и6ь
@Андрей-в7и6ь 3 жыл бұрын
Ты крут! Но это пока не мой уровень, загляну через пару лет, может что-то понятно станет)) А пока подпишусь на будущее.
@yummybunny7351
@yummybunny7351 2 жыл бұрын
Спасибо за видео. Подскажите, что за синтаксис на 2:05 на строке 20: ~Player(){... - будто конструктор. Что за тильда? Вызывается при уничтожении объекта?
@gaitavr1992
@gaitavr1992 2 жыл бұрын
Да, это деструктор
@ЄвгенБезкровний-р3п
@ЄвгенБезкровний-р3п 2 жыл бұрын
деструктор
@WeslomPo
@WeslomPo 3 жыл бұрын
2:50 Говоришь "Слабая связанность" - и тут же делаешь жоскую ссылку на статический класс, вместо нормального получения зависимости через конструктор и подписки на событие у этой реализации >__
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Со статическим классом связанность жесткая, а между конфиг провайдером и остальными частями системы слабая. Когда у вас в проекте будет необходимость пробросить в несколько конструкторов вглубь какую-либо систему - я бы на это посмотрел. Ну или в крайнем случае использовать DI контейнер
@WeslomPo
@WeslomPo 3 жыл бұрын
@@gaitavr1992 а кто в наше время в здравом уме работет без DI на сложных проектах? В любом случае, код с конструктором проще поддерживать, чем код в котором куча статических классов с состоянием. Потому как понятно какие у класса зависимости и их можно подменить во врем тестирования (при условии использования интерфейсов).
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Сразу 2 пункта: DI тяжелый, для многих проектов это критично, проходили. DI - расслабляет разработчика планировать свою архитектуру, бахнул INJECT и готово, вы когда-нибудь строили дерево зависимостей в таких проектах, я видел тысячи узлов, которые невероятно сложно менять. EventHolder это один из классических способов внедрения посредников в работу, есть возражения?
@WeslomPo
@WeslomPo 3 жыл бұрын
​@@gaitavr1992 EventHolder - это типичная шина событий из времён AS3 - AddEventListener и прочее безобразие, столько этого мусора перековырял в проектах того времени не перечесть - подисаться подписался - а отписаться забыл - приплыли, потеря памяти, плавающие ошибки. А на счёт бахнуть Inject - я вот ща в проекте на 165000 строк запустил поиск - 2 применения (компонент локализации и система окон - для резолва панелей) - все остальные зависимости передаются через конструктор - в среднем не больше 5 зависимостей (локализация и аналитика не в счёт). Зависит от того как вы выстроите в своей команде подход к разработке, проверке кода и прочему - следуешь простым правилам и код не становится совсем уж плохим.
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Если бы все эти правила были просты, то тех долг никогда не возникал бы
@neverworld8815
@neverworld8815 3 жыл бұрын
Ты случае не работал в Blizzard ?
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Хех, если бы) это моя любимая компания по части игр
@egyplant
@egyplant 3 жыл бұрын
Чотко, мне понравилось)
@Gsp_NoIce
@Gsp_NoIce 3 жыл бұрын
Давно уже на Rx. Касаемо Unity: UniRx, а когда вижу методы Update в чужом коде, то становится не по себе.
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Не нужно от update отказываться. Unirx генерит много мусора
@Gsp_NoIce
@Gsp_NoIce 3 жыл бұрын
@@gaitavr1992 Так же как и linq, во всем нужна своя мера, но я вот пришел к тому что мне не нужен update в 95% случаев. ну и я имел опыт что update`ы "жрут" намного больше чем мусор от unirx - между двух зол выбирай меньшее
@yagdra
@yagdra 3 жыл бұрын
UniRx наше всё! Очень интересна тема жонглирования потоками в UniRx
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Там нет потоков
@yagdra
@yagdra 3 жыл бұрын
@@gaitavr1992 Ага, я понимаю, не так выразился - подписками.
@BorisAverin
@BorisAverin Жыл бұрын
Спасибо
@vladyan01
@vladyan01 3 жыл бұрын
Как понять паттерн? Типа шаблон или что?
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Да
@cheerkin
@cheerkin 3 жыл бұрын
Лайк за делегат комбайн! Я думаю, 99% юнити-разработчиков и слов-то таких не знают)
@romansalnikov5079
@romansalnikov5079 3 жыл бұрын
Безусловно очень полезно, но капец сложно 😅
@ДелайДобро-в9ж
@ДелайДобро-в9ж 3 жыл бұрын
Я вообще начинающий. Смотрю и ничего не понимаю. И это отличный повод разобраться.
@igorshlyakov9321
@igorshlyakov9321 Жыл бұрын
тоже самое, настолько круто, что я не понимаю ничего)))
@Timoteeeei
@Timoteeeei 3 жыл бұрын
Полезно! Спасибо за инфу!
@ericetto1089
@ericetto1089 3 жыл бұрын
Наконец-то видео по паттернам в Unity, Хоспаде, храни Максима
@Niko_Zen
@Niko_Zen 3 жыл бұрын
Спасибо !!! коротко и информативно
@ЛиндаПочепинская-з2л
@ЛиндаПочепинская-з2л 3 жыл бұрын
Полезно! Спасибо!❤️
@sigvist6228
@sigvist6228 3 жыл бұрын
Спасибо за то, что ты есть. Ты делаешь очень хороший и качественный контент для программистов!)
@Personal_Evoluti_On
@Personal_Evoluti_On 3 жыл бұрын
От души, Благодарю!
@davidsedrakyan
@davidsedrakyan 2 жыл бұрын
такой годный контент и очень мало просмотров((
@mastervolodsobeck5176
@mastervolodsobeck5176 3 жыл бұрын
Зачет, благодарю бро!
@mirNpeace
@mirNpeace 3 жыл бұрын
Видео просто бомба) Спасибо за старания)
@AleksYurchenko
@AleksYurchenko 2 жыл бұрын
Коммент просто накрученный треш.
@Tumanop
@Tumanop 3 жыл бұрын
Вроде тема хорошая и текст неплохой, но этот говор или акцент… пи***ц бесит что тошнить начинает после 5 минут просмотра
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Не смотри, мне не сильно интересен подобный фидбек
@YACommunity
@YACommunity 2 жыл бұрын
Ничего не понял но было очень интересно, лайк.
Паттерн декоратор в unity3D
8:00
Максим Крюков
Рет қаралды 19 М.
How Strong is Tin Foil? 💪
00:26
Preston
Рет қаралды 136 МЛН
Миллионер | 1 - серия
34:31
Million Show
Рет қаралды 2,1 МЛН
iPhone or Chocolate??
00:16
Hungry FAM
Рет қаралды 43 МЛН
Паттерн Observer, С#, unity,  gamedev,
15:04
Sergey Kazantsev
Рет қаралды 8 М.
Оптимизация игры на Unity. Паттерн Observer
7:31
How to Program in Unity: Observer Pattern Explained
15:57
iHeartGameDev
Рет қаралды 113 М.
🧪🧪🧪🧪Прорыв в технологии Варп-двигателя.
22:15
Уже Наступило
Рет қаралды 330 М.
⚡ Всё про события в Unity 3D
21:38
Emerald Powder
Рет қаралды 106 М.
Создаём свой инструмент для Unity 3D
15:52
Emerald Powder
Рет қаралды 42 М.
How Strong is Tin Foil? 💪
00:26
Preston
Рет қаралды 136 МЛН