24. Blueprint Unreal Engine 4 - Event Dispatcher (RUS)

Поділитися
Вставка
  • Опубліковано 28 вер 2024
  • Рассказываю про Event Dispatcher. О том, для чего применять, как применять и что стоит учитывать.
    Полезные ссылки:
    Наша группа в ВК - uengine
    Наш Discord - / discord
    Наш форум - uengine.ru/forum/
    Пожертвования - uengine.ru/don...

КОМЕНТАРІ • 48

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

    Спасибо Дружище!) в нужное время нужный тутор))

  • @-miromax-5349
    @-miromax-5349 4 роки тому +7

    FlipFlop не проходили раньше

  • @flynsxcool
    @flynsxcool 5 років тому +5

    Спасибо большое.
    Некоторые вещи поймут те кто писал на с++ ))

  • @kekwayne5465
    @kekwayne5465 2 роки тому +2

    Чувак, пей таблетки. А то всё "Я не помню", да "Я не помню"

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

      Чел, это было 3 года назад

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

      @@nofear1615 чел, это было 2 месяца назад

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

    Так, а чем тогда интерфейсы отличаются от диспетчера? По сути, вроде как, одно и то же: есть объект, в котором интерфейс\диспетчер прописан без реализации, а есть объект, в котором эта реализация прописана.

    • @耳に胼胝ができる
      @耳に胼胝ができる 3 роки тому +4

      Что-то общее действительно есть. Интерфейс идет как часть полиморфизма и служит для создания единых методов чтоб управлять разными классами извне, например, есть какой то сервис и он манипулирует группой разных объектов(у которых общий интерфейс) с помощью интерфейса. В случае с диспатчером же все ровно наоборот: мы создаем в объекте слушателя, который прикрепляется к диспатчеру и когда диспатчер отрабатывает, то слушатель в объекте об этом уведомляется и уже изолированно сам объект как то на это реагирует.
      Можно одно и то же сделать обоими вариантами, только диспатчеры предоставляют более гибкий и легкий способ отвязать слушателя от диспатчера, когда в случае с интерфейсом нам надо будет постоянно помещать и убирать объект из пула объектов, чтоб предотвратить вызов метода, когда он нам не нужен.

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

    А как привязаться к event dispatcher у в level blueprint

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

    Спасибо за урок. Помогите разобраться, почему CreateEvent не выдаёт в списке функции, доступные для назначения. Версия движка 4,23,1.

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

    круто

  • @CYBERBORODA483
    @CYBERBORODA483 5 років тому

    что то у меня не так диспачер работает в версии 21- отвязка не сработала. А не сработала. выявилось только по вычитанию здоровья. Она главное продолжала печатать. Но не выводила числа. Убрал удаление диспачера. Числа появились.

  • @Mychannel-qz9mp
    @Mychannel-qz9mp 5 років тому

    Помогите кто знает как соединять по Socket 2 статичных сетки, и так чтобы можно было менять Socket по имени.

  • @CYBERBORODA483
    @CYBERBORODA483 5 років тому

    и функции не появились в creatEVENT

  • @Иван-ш1ц3п
    @Иван-ш1ц3п 6 років тому +2

    Хелоу

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

    Сложна!!!!

  • @КлеоФермер
    @КлеоФермер 5 років тому

    кстати перснаж ливитирует. Я имею солидный опыт в анимации,это тнедопустимо,но думаю ты в курсе.

  • @КлеоФермер
    @КлеоФермер 5 років тому

    мозгодробительная логика для столов. кому нужны такие столы? но думаю мазахисты заценят) на них еще можно покататьс яи получать дамаг)

  • @w.t.2905
    @w.t.2905 2 роки тому +3

    3:19 Будем вызывать диспатчер, который ничего не будет делать. Моё блюпринтовое месиво справляется с этой задачей даже без диспатчера!

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

    Вот , конкретно этот урок, вообще плохо понятен.

  • @threeworlds4114
    @threeworlds4114 Рік тому +1

    дякую

  • @СергейСанько-о3п
    @СергейСанько-о3п 3 роки тому +5

    Очень классные уроки, но вот не совсем понял область применения Dispatcher-ов, так то все то же самое и через касты можно получить, да и зачем куда-то передавать инвентарь или хп, если вся логика с этими характеристиками все равно (как правило) выполняется в BP персонажа. Поясните кому не сложно.

    • @TheroLayfer
      @TheroLayfer 2 роки тому +6

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

    • @danielluko7635
      @danielluko7635 Рік тому +1

      @@TheroLayfer Половина проблемы лечится созданием функций в получателях-акторах, которые вызываются нужным актором.

    • @TheroLayfer
      @TheroLayfer Рік тому +3

      @@danielluko7635 это называется нужно заранее знать всех получателей которым надо доставить сообщение и каждому его лично передать.. ну допустим у вас динамически генерируются мячики и по событию они все должны раздвоиться, функцию раздвоения пишем в мячике, а по событию тупо берём всех экземпляров актора и вызываем ему функцию обработчик эвента. вроде норм никаких диспатчеров не надо. но вот теперь у нас раздваиваться должны только некоторые мячики ну ладно перепишем обработчик мячика добавим булевую переменную в обработчик эвента. ой а чего так лагает каждый раз когда из 100 мячиков раздвоиться должны только 5, а у нас всегда 100 вызовов гоняется толку что большинство пустые.. а может можно просто в методе хранить список только тех обработчиков эвента у тех экземпляров класса которые должны реагировать на него? и вызывать только их.. да не вопрос (думаю реализация очевидна список и пару методов для его обновления добавить в объект генерирующий эвент несложно).. а потом ой а зачем реализацию этих методов и список каждый раз писать, может их выпихнуть в отдельный класс который будет хранить все эвенты и списки тех кто на них подписался( ну вроде тоже несложно сделать) и вот так мы сделали свой эвент диспатчер.

    • @danielluko7635
      @danielluko7635 Рік тому +1

      @@TheroLayfer Просто я изучал Unity с C# , и там такого понятия не было, обычно общение между классами происходит с помощью переменных этого класса и вызова их функций насколько я знаю. А тут автор видео говорит что "нужно писать только тот код, который относится к этому объекту" и тут не очень понятно что плохого в вызове функции из другого класса и не очень понимаю ту границу между диспатчером и вызовом функции из другого класса, т.е. что когда использовать.

    • @TheroLayfer
      @TheroLayfer Рік тому +3

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

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

    у меня почемуто гейм мод пустой. Не в том смысле что пустое окно редактора, а совсем ничего нет. Ни бара сбоку где создавать поюшки ни основной области куда накидывать блоки. Тупо пустое серое окно с вкладнками файл, окно, вид и т.д. ВТФ?

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

      Там нужно нажать на надпись чтрбы открыть редактор блупринтов

  • @АркадийСтон
    @АркадийСтон 2 роки тому +2

    В чём разница custom event от event dispatcher? Можно ведь то же самое сделать через кастом

    • @barunovas
      @barunovas Рік тому +1

      custom event - воид функция (в плюсах есть такой параметр к функции)
      диспатчер - событие

    • @Syraffol
      @Syraffol 8 місяців тому

      @@barunovas из этого выходит что кастомные ивенты жрут больше памяти так как они функции? Поправьте пожалуйста если не прав

  • @maestro2550
    @maestro2550 5 років тому +12

    Поплыл ещё в прошлом ролике, а тут совсем. Можно больше примеров как и где используется.

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

      У тебя есть виджет отображения количества патронов в оружии. Ты биндишь его к объекту оружия, к событию выстрела, и выводишь количество патронов.

  • @КлеоФермер
    @КлеоФермер 5 років тому +3

    уии. спасибоооо, ты как Боженька!!!

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

    А как сделать привязку к частям тела к примеру выстрел в тело или в голову и соответственно распределение урона (в голову к примеру 100%, а в тело 30%)

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

    Спасибо! ++++++++ ++++++

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

    орнул с макарон 18:28

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

    Спасибо.

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

    А что будет, если диспачер находится во многих классах(БП) и вдруг нам понадобилось изменить/добавить/удалить параметр в главном классе, потом руками перебирать овер дофига классов делая перепривязку/рефреш привязанность кастомного эвента? И почему получая, скажем, персонажа неправильно получать из него что то? Например какой либо флаг? Какой то диссонанс))

    • @f.artemenkov
      @f.artemenkov 4 роки тому +1

      ​@@xl1034 Зачем обрабатывать реакцию на вызов диспатчера в том же объекте, в котором он и вызывается?
      Наоборот же. Например, у нас динамит с таймером. Персонаж по нажатию на "B" делает трейс, получает объект bp_dynamite и вызывает у него функцию StartTimer или StopTimer при повторном нажатии. И тут всё просто и понятно. Динамит сам тикает, взрывается, вызывает систему частиц итд. Но, допустим, мы хотим на момент взрыва забиндить какое-нибудь событие на сцене. Не проверять же в тике каждый кадр взорвался динамит или нет. Вот тут и нужен как раз диспатчер. В ивент-графе уровня берем объект динамита и биндим на его диспатчер boom событие OnDynamiteBoom.

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

    Спасибо!
    Про флип-флоп тоже было полезно!

  • @sergeyfilin5204
    @sergeyfilin5204 Рік тому

    Отличный тутор, спасибо!

  • @finishsuffering
    @finishsuffering 2 роки тому +2

    что за непонятная дичь....