24. Blueprint Unreal Engine 4 - Event Dispatcher (RUS)
Вставка
- Опубліковано 28 вер 2024
- Рассказываю про Event Dispatcher. О том, для чего применять, как применять и что стоит учитывать.
Полезные ссылки:
Наша группа в ВК - uengine
Наш Discord - / discord
Наш форум - uengine.ru/forum/
Пожертвования - uengine.ru/don...
Спасибо Дружище!) в нужное время нужный тутор))
FlipFlop не проходили раньше
Спасибо большое.
Некоторые вещи поймут те кто писал на с++ ))
Чувак, пей таблетки. А то всё "Я не помню", да "Я не помню"
Чел, это было 3 года назад
@@nofear1615 чел, это было 2 месяца назад
Так, а чем тогда интерфейсы отличаются от диспетчера? По сути, вроде как, одно и то же: есть объект, в котором интерфейс\диспетчер прописан без реализации, а есть объект, в котором эта реализация прописана.
Что-то общее действительно есть. Интерфейс идет как часть полиморфизма и служит для создания единых методов чтоб управлять разными классами извне, например, есть какой то сервис и он манипулирует группой разных объектов(у которых общий интерфейс) с помощью интерфейса. В случае с диспатчером же все ровно наоборот: мы создаем в объекте слушателя, который прикрепляется к диспатчеру и когда диспатчер отрабатывает, то слушатель в объекте об этом уведомляется и уже изолированно сам объект как то на это реагирует.
Можно одно и то же сделать обоими вариантами, только диспатчеры предоставляют более гибкий и легкий способ отвязать слушателя от диспатчера, когда в случае с интерфейсом нам надо будет постоянно помещать и убирать объект из пула объектов, чтоб предотвратить вызов метода, когда он нам не нужен.
А как привязаться к event dispatcher у в level blueprint
Спасибо за урок. Помогите разобраться, почему CreateEvent не выдаёт в списке функции, доступные для назначения. Версия движка 4,23,1.
круто
что то у меня не так диспачер работает в версии 21- отвязка не сработала. А не сработала. выявилось только по вычитанию здоровья. Она главное продолжала печатать. Но не выводила числа. Убрал удаление диспачера. Числа появились.
Помогите кто знает как соединять по Socket 2 статичных сетки, и так чтобы можно было менять Socket по имени.
и функции не появились в creatEVENT
Хелоу
Сложна!!!!
кстати перснаж ливитирует. Я имею солидный опыт в анимации,это тнедопустимо,но думаю ты в курсе.
мозгодробительная логика для столов. кому нужны такие столы? но думаю мазахисты заценят) на них еще можно покататьс яи получать дамаг)
3:19 Будем вызывать диспатчер, который ничего не будет делать. Моё блюпринтовое месиво справляется с этой задачей даже без диспатчера!
Вот , конкретно этот урок, вообще плохо понятен.
дякую
Очень классные уроки, но вот не совсем понял область применения Dispatcher-ов, так то все то же самое и через касты можно получить, да и зачем куда-то передавать инвентарь или хп, если вся логика с этими характеристиками все равно (как правило) выполняется в BP персонажа. Поясните кому не сложно.
через касты тебе придётся заранее прописать всех получателей сообщения(как в электронной почте) и заранее знать что каждый из них должен выполнить. это плохо работает когда у тебя акторы динамически создаются во время игры и ты не знаешь получателей заранее и тебе нужно мастерить какой-то код для их вычисления (например записывать их в список, потом при наступлении события проходить по списку и делать касты к каждому а чтобы знать что какой актор должен сделать ему при записи в список надо также добавлять во второй столбец какие-то ссылки на инструкции которые его попросят выполнить при наступлении события.. вот подобный механизм удобно реализован эвент диспатчером). в случае с диспатчером ты просто кричишь в окно лето пришло, и все кто играет в песочнице делают то что у них запланировано на лето.
@@TheroLayfer Половина проблемы лечится созданием функций в получателях-акторах, которые вызываются нужным актором.
@@danielluko7635 это называется нужно заранее знать всех получателей которым надо доставить сообщение и каждому его лично передать.. ну допустим у вас динамически генерируются мячики и по событию они все должны раздвоиться, функцию раздвоения пишем в мячике, а по событию тупо берём всех экземпляров актора и вызываем ему функцию обработчик эвента. вроде норм никаких диспатчеров не надо. но вот теперь у нас раздваиваться должны только некоторые мячики ну ладно перепишем обработчик мячика добавим булевую переменную в обработчик эвента. ой а чего так лагает каждый раз когда из 100 мячиков раздвоиться должны только 5, а у нас всегда 100 вызовов гоняется толку что большинство пустые.. а может можно просто в методе хранить список только тех обработчиков эвента у тех экземпляров класса которые должны реагировать на него? и вызывать только их.. да не вопрос (думаю реализация очевидна список и пару методов для его обновления добавить в объект генерирующий эвент несложно).. а потом ой а зачем реализацию этих методов и список каждый раз писать, может их выпихнуть в отдельный класс который будет хранить все эвенты и списки тех кто на них подписался( ну вроде тоже несложно сделать) и вот так мы сделали свой эвент диспатчер.
@@TheroLayfer Просто я изучал Unity с C# , и там такого понятия не было, обычно общение между классами происходит с помощью переменных этого класса и вызова их функций насколько я знаю. А тут автор видео говорит что "нужно писать только тот код, который относится к этому объекту" и тут не очень понятно что плохого в вызове функции из другого класса и не очень понимаю ту границу между диспатчером и вызовом функции из другого класса, т.е. что когда использовать.
@@danielluko7635 если игра в перспективе може стать сложной лучше сразу через диспатчер делать, ну не навызываешься ты на тысячи объектов где у кого какая логика, поэтому логику дробят чтобы цвет травы в траве задавался, а восход солнца в небе чтобы потом можно было независимо убедиться вот код цветка он слушает эвент восхода солнца и отрабатывает раскрытие бутона? хорошо, а вот код солнышка оно создаёт при восходе в диспатчере эвент? отлично. для простых игр можно конечно просто из солнышка фигачить раскрытие бутона, особенно если ты один над кодом работаешь а не так что у тебя травинку один отдел пишет, лесок другой, а в поле каждый колосок вообще будет через встроенный скриптовый язык как UGC добавлен и мы им в апи просто сунем метод позволяющий подписаться на любой из существующих эвентов а чё они там с него вызовут вообще не знать бы. и ты в солнышке просто создал эвент восхода проверил что всё работает и всё никто из этих травяных или лесных в твой солнечный код не лазит каждый раз когда решит что хочет бутон или шишку распустить, да и даже если этот лесник это ты сам из другого временного промежутка незачем этому криворукому дебилу в хороший код лазить.
у меня почемуто гейм мод пустой. Не в том смысле что пустое окно редактора, а совсем ничего нет. Ни бара сбоку где создавать поюшки ни основной области куда накидывать блоки. Тупо пустое серое окно с вкладнками файл, окно, вид и т.д. ВТФ?
Там нужно нажать на надпись чтрбы открыть редактор блупринтов
В чём разница custom event от event dispatcher? Можно ведь то же самое сделать через кастом
custom event - воид функция (в плюсах есть такой параметр к функции)
диспатчер - событие
@@barunovas из этого выходит что кастомные ивенты жрут больше памяти так как они функции? Поправьте пожалуйста если не прав
Поплыл ещё в прошлом ролике, а тут совсем. Можно больше примеров как и где используется.
У тебя есть виджет отображения количества патронов в оружии. Ты биндишь его к объекту оружия, к событию выстрела, и выводишь количество патронов.
уии. спасибоооо, ты как Боженька!!!
А как сделать привязку к частям тела к примеру выстрел в тело или в голову и соответственно распределение урона (в голову к примеру 100%, а в тело 30%)
Спасибо! ++++++++ ++++++
орнул с макарон 18:28
Спасибо.
А что будет, если диспачер находится во многих классах(БП) и вдруг нам понадобилось изменить/добавить/удалить параметр в главном классе, потом руками перебирать овер дофига классов делая перепривязку/рефреш привязанность кастомного эвента? И почему получая, скажем, персонажа неправильно получать из него что то? Например какой либо флаг? Какой то диссонанс))
@@xl1034 Зачем обрабатывать реакцию на вызов диспатчера в том же объекте, в котором он и вызывается?
Наоборот же. Например, у нас динамит с таймером. Персонаж по нажатию на "B" делает трейс, получает объект bp_dynamite и вызывает у него функцию StartTimer или StopTimer при повторном нажатии. И тут всё просто и понятно. Динамит сам тикает, взрывается, вызывает систему частиц итд. Но, допустим, мы хотим на момент взрыва забиндить какое-нибудь событие на сцене. Не проверять же в тике каждый кадр взорвался динамит или нет. Вот тут и нужен как раз диспатчер. В ивент-графе уровня берем объект динамита и биндим на его диспатчер boom событие OnDynamiteBoom.
Спасибо!
Про флип-флоп тоже было полезно!
Отличный тутор, спасибо!
что за непонятная дичь....
Чел...
@@nofear1615 а?