Паттерны проектирования в Unreal (1/7): "Observer" (и блюпринт интерфейсы)

Поділитися
Вставка
  • Опубліковано 27 гру 2024

КОМЕНТАРІ • 60

  • @spereku
    @spereku 4 роки тому +25

    Ох, вы первый, кто затронул тему паттернов UE4 в рутюбе, довольно интересно )

  • @Boraboar
    @Boraboar 2 роки тому +3

    В одном из видео с официальных курсов по анрилу прямо сказано, что именно Event Dispatcher реализуют паттерн Observer. Хотя интерфейсы довольно универсальный инструмент, его хорошо для Strategy использовать, когда множество разношерстных акторов, чтобы удобнее было реализовывать расширение и изменение функционала. Все эти выборки всех объектов класса или интерфейсов рекомендуется по возможности вообще не использовать. И спасибо за интересный урок, подписался.

  • @ДенисНагорный-й4н
    @ДенисНагорный-й4н 4 роки тому +5

    Огромное тебе спасибо, добрый человек. Я две недели пытался безуспешно решить задачу для своего приложения, и оказалось, что она очень легко решается с помощью интерфейсов и паттерна обсервер! Огромный лайк с меня!!!! Жду следующих уроков, поставил колокольчик!

  • @iml-su
    @iml-su 4 роки тому +9

    09:45 Если кто не будет понимать почему не находятся эвенты от интерфейса - их в поиске нету, нужно нажать правой клавишей мыши в левом меню Interfaces, по нужному, и выбрать Implement Event.

    • @СергейЗаплетин-й1ъ
      @СергейЗаплетин-й1ъ 4 роки тому

      Ага помогло, спасибо.

    • @НикитаКустовский-н6у
      @НикитаКустовский-н6у 3 роки тому +1

      Первое. Тебе дизлайк за то, что удаляешь аргументированную критику без оскорблений на своём канале. Боишься, что школьники донатить перестанут?
      Второе. Если человек не знает, как имплементить интерфейс в движке, хотя это интуитивно понятно, и, простите, написано прямым текстом, пусть и по-английски, значит, ему ещё вообще рано изучать паттерны.

    • @РоманАндреев-ь4ь
      @РоманАндреев-ь4ь 3 роки тому +1

      Тон у Вас хамоватый. И где ты увидел здесь школьников и донат?

  • @Alex-hs8xj
    @Alex-hs8xj 4 роки тому +3

    круто, спасибо! Интересно продолжение. Думал в этом видео про диспетчер будет это первое что пришло на ум для показа паттерна наблюдателя

  • @miro9516
    @miro9516 4 роки тому +7

    Разве можно сказать, что блупринт интерфейсы в анриле работают, как паттерн Observer? В рамках этого паттерна, как я думал, должен быть реализован механизм "подписки" - подписанные объекты следят и реагируют на события, происходящие в объекте, на который они подписаны. Event Dispatchers лучше подходят для демонстрации данного паттерна.

    • @FailValiev
      @FailValiev 4 роки тому +2

      Думаю, тут не только сигнал отправляет, но так и добротный пинок, типа давай работай.

    • @aspirinjadrew7339
      @aspirinjadrew7339 4 роки тому

      Механизм подписки уже зашит в интерфейсы бп

    • @UNREALRUSSIA
      @UNREALRUSSIA  4 роки тому +3

      Event Dispatcher'ы тоже под подобное подходят 👍

  • @DodgerEcho
    @DodgerEcho 2 роки тому +1

    Смотрю твои видео на работе, в студии Ubisoft, очень помогают 😁

  • @ИльяЗахарьяев
    @ИльяЗахарьяев 4 роки тому +1

    Спасибо за раскрытие таких важных тем. Лайк однозначно.

  • @tutors-save
    @tutors-save 4 роки тому +7

    У ваших видео есть большая проблема - они очень редко выходят

  • @duxart
    @duxart 4 роки тому +1

    Крутейше!!! Всё подробно и понятно. Решпехт!!!!))

  • @СергейЗаплетин-й1ъ
    @СергейЗаплетин-й1ъ 4 роки тому +1

    Спасибо за материал. Попробовал. Очень прикольный механизм. Вот только вопрос. Всю игру можно на этом патерне сделать?

  • @slom87
    @slom87 3 роки тому +1

    Шикарный урок! очень лаконично и по делу.

  • @sr2sdouble
    @sr2sdouble 3 роки тому

    наконец то нашёл правильные интерфейсы на анриле)

  • @AlpinWeb
    @AlpinWeb 3 роки тому

    Даже Проще чем в js, blueprint удобная штука))

  • @gamemaximuspro8864
    @gamemaximuspro8864 4 роки тому +2

    Как всегда круто бро!))
    p.s От Костяна :)

  • @qNighthockp
    @qNighthockp 4 роки тому +3

    Божечки, неужели нормальный русскоязычный канал по анрилу без бе-ме, воды и школьников. Автор не останавливайся! Хочу смотреть как правильно делать частичную разрушаемость от пуль через Unreal Chaos , процедурно генерировать помещения из комнат и остальные паттерны жду с нетерпением! Лайк, подписка.

  • @prussax
    @prussax 3 роки тому

    Уважаемый, поясните вкратце, в чём принципиальное отличие эвент диспетчеров от интерфейсов? Из всех видео по этим элементам получается, что они в некотором смысле идентичны, т.е поставленную задачу можно легко и непринуждённо реализовать как ЭД, так и интерфейсами.

  • @ЯрославМоккочинский

    огонь контент. Дюже благодарствую.

  • @dmytriy8008
    @dmytriy8008 3 роки тому

    Дружище ты супер. Даже я понял.

  • @MrAwesomeChel
    @MrAwesomeChel 4 роки тому +1

    Лайк!

  • @vakuo
    @vakuo 4 роки тому

    Жду последующие части

  • @198121D
    @198121D 2 роки тому

    Супер, как с вами связаться в телеграмме? есть крутое финансовое предложение.

  • @Mark33city
    @Mark33city 2 роки тому

    А где продолжение?

  • @sr2sdouble
    @sr2sdouble 3 роки тому

    интерфейсы помогают легко сообщаться туда обратно, на сколько я понял.

  • @romandviski
    @romandviski 3 роки тому

    Больше паттернов! =)

  • @etta777
    @etta777 3 роки тому

    ПуЕр. Сижу думаю шо за пуЕр. Чай, что ли. А это, оказывается, player ))

  • @neofit6437
    @neofit6437 4 роки тому

    Отличный контент, спасибо

  • @aspirinjadrew7339
    @aspirinjadrew7339 4 роки тому

    Очень полезная инфа!!

  • @alexanderkartashov8776
    @alexanderkartashov8776 26 днів тому

    Observer это патерн про делегаты (диспатчеры), а интерфейсы это Strategy патерн. Я бы на вашем месте удалил это видео чтобы не позориться либо исправил ошибку.
    Касательно кода get all actors это тяжелый метод, использование которого мягко скажем не оправдано.
    Сама идея "анонимности" и заменяемости конечно как бы соблюдается (иначе смысла использовать интерфейс вообще бы не было), но я бы не назвал такое решение хорошей практикой.
    Вообще то что вы сделали больше похоже на Chain of responsibility патерн: перебор клиентов, которые сами решают реагировать им на событие или нет. Только там бы использовался break наверное.

  • @UnrealSurvival
    @UnrealSurvival 4 роки тому

    Молодец! Все понятно!

  • @НикитаКустовский-н6у

    К сожалению, очень слабо. Видно, что базы у тебя практически нет, раз в самом простом паттерне (после шаблонного метода и одиночки) ты плаваешь. Но могу утешить, лучше, чем у всех остальных, что я видел. Если другие - это вообще детский сад, то у тебя уровень начальной школы, что уже неплохо. Теперь по сути.
    Первое. Интерфейсы вот так не используют. Могу много писать, но просто пример. У тебя в боссе ищутся все объекты с интерфейсом. А что если кому-нибудь ещё потребуется информация о том, что босс умер? Но при этом ему не нужны твои "входы и выходы в ловушку". Реализовать весь этот интерфейс в новом объекте? Так это нарушение одного из принципов SOLID. Дописать поиск ещё всех других объектов с другим интерфейсом? Так это нарушение принципа открытости-закрытости. Поэтому плавно вытекает второе. Никакого отношения вот этот пример к Observer не имеет. Для Observer в движке есть Event Dispatcher. Любой объект может сделать bind на событие смерти того же босса, и если он помирает, то босс просто делает call, а подписчик (он же наблюдатель, отсюда и название паттерна) это перехватывает самостоятельно и обрабатывает.

    • @StellarHarbor
      @StellarHarbor 3 роки тому

      Что лучше тогда посомтреть/почитать чтобы лучше понимать это всё?

  • @DeltaZavr.
    @DeltaZavr. 4 роки тому +4

    Для демонстрации интерфейсов , пример не удачный.
    Да и такая реализация , будет работать, только если на уровне одна такая комната.
    В реальном мире, каждый актор необходимо указывать ручками ,
    или как то искать объекты в рамках вольюм бокса секретной комнаты.

    • @UNREALRUSSIA
      @UNREALRUSSIA  4 роки тому +2

      Спасибо! :) Если не затруднит, подскажи, какой пример более хорошо бы подошел.
      (на самом деле я могу даже еще больше найти изъянов в том, что было показано в ролике, просто ставилась цель показать лишь один из вариантов, как сделать определенную вещь).

    • @DeltaZavr.
      @DeltaZavr. 4 роки тому

      @@UNREALRUSSIA Если у нас есть Какое то количество объектов которым нужно отослать информацию.
      Берём get all \ actors \ widgets \ interfaces \ и т.д. это наверно идеальный вариант, в ряде случаев.
      В другом варианте вручную забиваем в массивы объекты которым нужно разослать информацию.
      Либо автоматически , выбирая объекты из области через вольюм.
      А напоследок диспатчеры с которыми я особо не работал, т.к. не находил им применение.

    • @VaG093
      @VaG093 4 роки тому +1

      @@DeltaZavr. get all actors of class - достаточно прожорливая функция. Особенно, если вызываться она будет сразу в нескольких акторах. Когда логика проекта разрастется, такая функция может стать бутылочным горлышком. Имеет смысл подумать в сторону единого менеджера, который на констракте\бегине один раз соберет массив из необходимых акторов, подпишется на их делегаты (диспатчеры) и в своем теле уже разрулит логику вида событие>>реакция.
      Для акторов на уровне можно, например, создать базовый класс, содержащий в себе мета-информацию (например, уникальный ID) и отнаследоваться от него, а в менеджере собирать массив типа Map, к элементам которого можно обращаться по имени, либо массив структур, если необходимы дополнительные данные помимо ID. Возможностей для реализации на самом деле много и зависят они от конкретных задач.

    • @Alex-hs8xj
      @Alex-hs8xj 4 роки тому +1

      @@DeltaZavr. get all \ actors странный выбор для этого, а если на сцене тысячи акторов из которых разослать нужно 10ти, а если рассылка нужна часто? Тогда каждый раз будут перебираться все тысячи акторов на сцене чтобы получить несколько., такое себе средство.

  • @6r0m
    @6r0m 3 роки тому

    под такую задачу room manager какой нить напрашивается)

  • @sansey5
    @sansey5 4 роки тому +1

    Про делегаты почитай и потом появится желание перезаписать это видео)))

    • @UNREALRUSSIA
      @UNREALRUSSIA  4 роки тому +1

      Привет :) Ну еще бы я не знал о делегатах, если о них говорится в каждом видеокурсе. :) У меня было желание записать еще одно видео с тем же самым, но с вариантом через EventDispatcher'ы. Можешь подконкретней подсказать, как бы ты оптимальней это сделал через EventDispatcher'ы? Там просто есть разные варианты, буду благодарен если подскажешь какой-нибудь максимально правильный и элегантный.

    • @sansey5
      @sansey5 4 роки тому

      @@UNREALRUSSIA варианты разные абсолютно. Но использовать get all actors with interface это такое себе, очень не оптимизированный вариант. По сути должна быть сущность (хороший вариант использовать тот же гейм стейт, если мы говорим о каких то глобальных игровых ивентах или сабсистемы, правд это уже плюсы) в которую теми или иными путями приходят события(например триггер при оверлапе может дергать метод данной сущности), далее эта сущность уже файрит делегаты, и кому надо тот уже и подписывается на данные делегаты...

    • @sansey5
      @sansey5 4 роки тому

      @@UNREALRUSSIA так же хочу заметить что вызов интерфейса достаточно тяжёлая штука, немного тяжелее каста и могут возникнуть ситуации когда на уровне объектов очень много (1000+ лампочек к примеру) в которых нужно по интерфейсу вызвать ивент, что приведет к ощутимому фризу

    • @UNREALRUSSIA
      @UNREALRUSSIA  4 роки тому +2

      ​@@sansey5 Лайк :) Сделаю наверно и про eventdispatcher'ы :)

    • @rapidblaze
      @rapidblaze 3 роки тому

      @@sansey5 @UNREAL: RUSSIA Дополню, что обычно триггеры относятся к конкретной карте и этой сущностью как раз и будет level-blueprint.

  • @ИванНовожилов-э9з
    @ИванНовожилов-э9з 4 роки тому

    лукойл