Unreal Engine 📢 Диспатчеры

Демо-проект: Аналогия • Аналогия 1: у нас есть микроволновка с wi-fi. Несколько человек подключились к микроволновке, и подписались на оповещение OnCookingComplete. Когда микроволновка закончила разогревать еду, она всех оповещает. • Аналогия 2: На какой-то базе есть охранники с радио-рациями (которые могут только принимать сообщение). И на этой базе есть диспетчерский пульт. С пульта через рацию говорят “идите в подвал“ OnCheckOutTheBasement. И все охранники, у которых есть радио-рации услышали это сообщение и идут в подвал. Пара охранников без раций не услышали сообщения. • Аналогия 3: Банк оповещает клиентов о начислении зарплаты. Клиентам приходит смс-уведомление. ----- Реализация Актор-извещатель всегда один, акторов-получателей может быть много. Актор-извещатель решает когда послать сообщение в мир (создаёт оповещение). И оповещение получат только те акторы, которые подписаны (bind) на эвент-извещателя. Актор-извещатель может передать какие-то данные через параметры. Порядок и типы входных параметров называются “сигнатурой эвента“. Если актору-получателю точно не нужно получать оповещение, нужно отписаться (unbind) от уведомлений. Прежде чем вы добавляете свои новые диспатчер-эвенты, убедитесь что эти эвенты не созданы уже в Анриале. ----- Примеры Желательно называть сообщения диспатчера с префиксом OnSomethingHappend. И так же называть эвенты, на которые мы делаем бинд. • OnGetItem - какой-то NPC может похвалить главного героя, что тот взял предмет • OnBeginBuff/OnEndBuff - враги могут отбегать подальше, если узнают, что у персонажа включился бафф на близкий урон. • OutOfAmmo - если в сумке персонажа кончились патроны, то персонаж может об этом сказать вслух • OnFinishLevel - враги перестают атаковать, если мы добежали до какого-то места • OnStrongWind - главного героя начинает сдувать, если WeatherSystem сообщила о сильном ветре. Пули и гранаты летят туда, куда сильно дует ветер. • OnEveningIsComing/OnNigthIsComing - персонаж включает фонарик, если на улице становится темно • OnBeatTheBoss (OnDestroyed) - Мы победили босса, и изменилась погода. WeatherSystem ждала от BossEnemy оповещение о смерти, и как оповещениее пришло, погода изменилась. • OnOkButtonClick - Контроллер или Персонаж ждут нажатия кнопки в UI. UI отправляет диспатчер-сообщение (оповещение) OnOkButtonClick или OnCancelButtonClick, контроллер его получает. (Примечание: в Блюпринтах можно при создании виджета в контроллере напрямую получить доступ к кнопке и сразу сделать бинд. Это нарушает правила ООП, но такое может быть удобно, если не хочется делать цепочку из диспатчеров.) • OnLowHealth - Мы стреляем в противников, и как только у нас здоровье опустилось ниже 20%, противники об этом узнают и начинают хуже попадать, у них увеличивается разброс при стрельбе. • OnDamageIsApplied (OnAnyDamage) - Мы стреляем в противника, трейсом получили на него ссылку, и можем убедиться что в него точно попала пуля. То есть, если мы выстрелили в противника самонаводящейся ракетой, убежали за стену и не видим что там происходит. Ракета долетела и нанесла урон, мы можем получить оповещение о том, что “да, ракета попала в цель“ и может быть разблокировали какую-то ачивку. Тайм-коды: 00:00 Вступление 00:44 Аналогия 02:04 Реализация 04:41 Примеры 08:05 Заключение
Back to Top