Всем добрый день. Хочется экономично решить такую задачу.
У меня есть, скажем, 10 героев. Они выполняют однотипные действия - коллизии с диалогами, поэтому я сделал их производными основного класса, например, AllActor. В героях должны запускаться кастомные события. И если переменные я могу создать в родительском и задействовать их, то доступ к кастомным событиям дочерних (пока неизвестных мне) героев через Get All Actor of Class (AllActor) -> For Each Loop не получится. А хочется.
Конечно, можно определить булеву переменную и Event Tick проверять, включена она или нет, а если включена, запускать события, но хотелось бы наименее ресурсоёмко выполнить эту задачу. Любопытно, ведь задач похожих много.
Не очень понял, но возомжно тебе подойдут делегаты. Это DECLARE_MULTICAST_DELEGATE, DECLARE_MULTICAST_DELEGATE_OneParam например, можно заместо One сколько надо сделать two,three и т.д. Подписываешься на свои делегаты через AddUObject(this, &ThisClass::Procname);
ну и когда из владельца делегата выстреливаешь Broadcast то долетает до всех подписавшихся.
papa_Lev
> И если переменные я могу создать в родительском и задействовать их, то доступ к
> кастомным событиям дочерних (пока неизвестных мне) героев через Get All Actor
> of Class (AllActor) -> For Each Loop не получится. А хочется.
Открываем родительский блюпринт. Создаём ноду custom event, называем её например "event1". Компилим, сохраняем, закрываем родительский блюпринт.
Открываем наследника, клацаем правой кнопкой на поле с нодами, вводим "event1", выбираем ноду под add event, получаем кастомный эвент, который вызывается из родителя.
Альтернативно - через интерфейс, ему вообще всё равно, кому именно он шлёт.
Bodrin
> Открываем наследника, клацаем правой кнопкой на поле с нодами, вводим "event1",
Вот спасибо, не додумался до такого простого способа.
> Альтернативно - через интерфейс
Не совсем понял, что имеется в виду?
papa_Lev
> > Альтернативно - через интерфейс
> Не совсем понял, что имеется в виду?
https://docs.unrealengine.com/en-US/ProgrammingAndScripting/Bluep… es/index.html
Фишка интерфейса в том, что он самодостаточный и ни на что не ругается, не нужно проверять целевой актор, никаких "cast to" и прочего. Есть интерфейс в целевом блюпринте - будет исполнение. Нет интерфейса - не будет исполнения, но и ошибок не возникнет.
Спасибо, понятно!