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

แชร์
ฝัง
  • เผยแพร่เมื่อ 23 ก.ย. 2024
  • Первое видео из серии про паттерны проектирования в Unreal Engine. Здесь рассмотрим популярный паттерн "Observer" ("Наблюдатель"), и блюпринт интерфейсы (blueprint interfaces).
    🔵Twitter: / russiaunreal
    Вк для связи: id16226278

ความคิดเห็น • 58

  • @StanislavPerekupenko
    @StanislavPerekupenko 3 ปีที่แล้ว +25

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

  • @Boraboar
    @Boraboar 2 ปีที่แล้ว +2

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

  • @ДенисНагорный-й4н
    @ДенисНагорный-й4н 3 ปีที่แล้ว +5

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

  • @miro9516
    @miro9516 3 ปีที่แล้ว +7

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

    • @FailValiev
      @FailValiev 3 ปีที่แล้ว +2

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

    • @aspirinjadrew7339
      @aspirinjadrew7339 3 ปีที่แล้ว

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

    • @UNREALRUSSIA
      @UNREALRUSSIA  3 ปีที่แล้ว +3

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

  • @Alex-hs8xj
    @Alex-hs8xj 3 ปีที่แล้ว +3

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

  • @DodgerEcho
    @DodgerEcho 2 ปีที่แล้ว +1

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

  • @ИльяЗахарьяев
    @ИльяЗахарьяев 3 ปีที่แล้ว +1

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

  • @duxart
    @duxart 3 ปีที่แล้ว +1

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

  • @slom87
    @slom87 2 ปีที่แล้ว +1

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

  • @iml-su
    @iml-su 3 ปีที่แล้ว +9

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

    • @СергейЗаплетин-й1ъ
      @СергейЗаплетин-й1ъ 3 ปีที่แล้ว

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

    • @НикитаКустовский-н6у
      @НикитаКустовский-н6у 3 ปีที่แล้ว +1

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

    • @РоманАндреев-ь4ь
      @РоманАндреев-ь4ь 3 ปีที่แล้ว +1

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

  • @qNighthockp
    @qNighthockp 3 ปีที่แล้ว +3

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

  • @tutors-save
    @tutors-save 3 ปีที่แล้ว +7

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

  • @gamemaximuspro8864
    @gamemaximuspro8864 3 ปีที่แล้ว +2

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

  • @ЯрославМоккочинский
    @ЯрославМоккочинский 3 ปีที่แล้ว

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

  • @sr2sdouble
    @sr2sdouble 3 ปีที่แล้ว

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

  • @gostbastard2569
    @gostbastard2569 3 ปีที่แล้ว +1

    Прикольный урок, но массивы объектов можно напрямую к интерфейсам шлёпать, без форлупа. И для читающих новичков, желательно пипеткой свои массивы лампочек и дверей создавать, конкретно для этой комнаты, не только из-за оптимизации, но и чтобы срабатывали только нужные объекты в конкретной комнате.

  • @СергейЗаплетин-й1ъ
    @СергейЗаплетин-й1ъ 3 ปีที่แล้ว +1

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

  • @MrAwesomeChel
    @MrAwesomeChel 3 ปีที่แล้ว +1

    Лайк!

  • @neofit6437
    @neofit6437 3 ปีที่แล้ว

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

  • @dmytriy8008
    @dmytriy8008 3 ปีที่แล้ว

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

  • @AlpinWeb
    @AlpinWeb 3 ปีที่แล้ว

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

  • @aspirinjadrew7339
    @aspirinjadrew7339 3 ปีที่แล้ว

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

  • @UnrealSurvival
    @UnrealSurvival 3 ปีที่แล้ว

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

  • @vakuo
    @vakuo 3 ปีที่แล้ว

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

  • @etta777
    @etta777 3 ปีที่แล้ว

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

  • @romandviski
    @romandviski 3 ปีที่แล้ว

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

  • @sr2sdouble
    @sr2sdouble 3 ปีที่แล้ว

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

  • @prussax
    @prussax 3 ปีที่แล้ว

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

  • @198121D
    @198121D 2 ปีที่แล้ว

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

  • @НикитаКустовский-н6у
    @НикитаКустовский-н6у 3 ปีที่แล้ว +9

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

    • @StellarHarbor
      @StellarHarbor 3 ปีที่แล้ว

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

  • @DeltaZavr.
    @DeltaZavr. 3 ปีที่แล้ว +4

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

    • @UNREALRUSSIA
      @UNREALRUSSIA  3 ปีที่แล้ว +2

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

    • @DeltaZavr.
      @DeltaZavr. 3 ปีที่แล้ว

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

    • @VaG093
      @VaG093 3 ปีที่แล้ว +1

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

    • @Alex-hs8xj
      @Alex-hs8xj 3 ปีที่แล้ว +1

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

  • @Mark33city
    @Mark33city ปีที่แล้ว

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

  • @ИванНовожилов-э9з
    @ИванНовожилов-э9з 3 ปีที่แล้ว

    лукойл

  • @6r0m
    @6r0m 3 ปีที่แล้ว

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

  • @sansey5
    @sansey5 3 ปีที่แล้ว +1

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

    • @UNREALRUSSIA
      @UNREALRUSSIA  3 ปีที่แล้ว +1

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

    • @sansey5
      @sansey5 3 ปีที่แล้ว

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

    • @sansey5
      @sansey5 3 ปีที่แล้ว

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

    • @UNREALRUSSIA
      @UNREALRUSSIA  3 ปีที่แล้ว +2

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

    • @rapidblaze
      @rapidblaze 3 ปีที่แล้ว

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