Войти
Unreal EngineФорумОбщее

Доступ к событиям дочернего класса

#0
18:59, 19 янв. 2021

Всем добрый день. Хочется экономично решить такую задачу.
У меня есть, скажем, 10 героев. Они выполняют однотипные действия - коллизии с диалогами, поэтому я сделал их производными основного класса, например, AllActor. В героях должны запускаться кастомные события. И если переменные я могу создать в родительском и задействовать их, то доступ к кастомным событиям дочерних (пока неизвестных мне) героев через Get All Actor of Class (AllActor) -> For Each Loop не получится. А хочется.
Конечно, можно определить булеву переменную и Event Tick проверять, включена она или нет, а если включена, запускать события, но хотелось бы наименее ресурсоёмко выполнить эту задачу. Любопытно, ведь задач похожих много.

#1
21:31, 19 янв. 2021

Не очень понял, но возомжно тебе подойдут делегаты. Это DECLARE_MULTICAST_DELEGATE, DECLARE_MULTICAST_DELEGATE_OneParam например, можно заместо One сколько надо сделать two,three и т.д. Подписываешься на свои делегаты через AddUObject(this, &ThisClass::Procname);
ну и когда из владельца делегата выстреливаешь Broadcast то долетает до всех подписавшихся.

#2
0:53, 20 янв. 2021

papa_Lev
> И если переменные я могу создать в родительском и задействовать их, то доступ к
> кастомным событиям дочерних (пока неизвестных мне) героев через Get All Actor
> of Class (AllActor) -> For Each Loop не получится. А хочется.

Открываем родительский блюпринт. Создаём ноду custom event, называем её например "event1". Компилим, сохраняем, закрываем родительский блюпринт.

Открываем наследника, клацаем правой кнопкой на поле с нодами, вводим "event1", выбираем ноду под add event, получаем кастомный эвент, который вызывается из родителя.

Альтернативно - через интерфейс, ему вообще всё равно, кому именно он шлёт.

#3
9:03, 20 янв. 2021

Bodrin
> Открываем наследника, клацаем правой кнопкой на поле с нодами, вводим "event1",
Вот спасибо, не додумался до такого простого способа.

> Альтернативно - через интерфейс
Не совсем понял, что имеется в виду?

#4
18:18, 20 янв. 2021

papa_Lev
> > Альтернативно - через интерфейс
> Не совсем понял, что имеется в виду?

https://docs.unrealengine.com/en-US/ProgrammingAndScripting/Bluep… es/index.html

Фишка интерфейса в том, что он самодостаточный и ни на что не ругается, не нужно проверять целевой актор, никаких "cast to" и прочего. Есть интерфейс в целевом блюпринте - будет исполнение. Нет интерфейса - не будет исполнения, но и ошибок не возникнет.

#5
18:42, 20 янв. 2021

Спасибо, понятно!

Unreal EngineФорумОбщее