Делегаты позволяют нам вызывать функцию не знаю какая именно назначена функция. Они являются безопасной версией указателя на функцию. Здесь будет разобрано как ассоциировать UFUNCTION с делегатом, чтобы она вызывалась, когда он выполняется. Чтобы получился этот пример, необходимо использовать проект с классом TriggerVolume из прошлой статьи . Как это сделать... Внутри заголовочного файла GameMode объявить делегат с помощью специального макроса, который нужно написать над UCLASS() : DECLARE_DELEGATE(FStandardDelegateSignature) UCLASS() class EVENT_API AEventGameModeBase : public AGameModeBase Добавить новый член класса в GameMode : FStandardDelegateSignature MyStandardDelegate; Создать в редакторе движка новый класс Actor , назвав его DelegateListener . И добавить в заголовочный файл нового класса следующие объявления: UFUNCTION() void EnableLight(); UPROPERTY() UPointLightComponent* PointLight; В конструктор класса, надо добавить код для создания ...
Пример взят из книги "Unreal Engine scripting with C++ Cookbook". Некоторые классы Actor и Component поддерживают обработчики событий в виде виртуальных функций. Здесь будет показано как реализовать собственный обработчик события столкновения. Как это сделать... Создать в редакторе Unreal Engine пустой С++ класс Actor и назвать его MyTriggerVolume . Добавить в заголовочный файл этого класса следующий код: UPROPERTY() UBoxComponent* TriggerZone; UFUNCTION() virtual void NotifyActorBeginOverlap(AActor* OtherActor) override; UFUNCTION() virtual void NotifyActorEndOverlap(AActor* OtherActor) override; А в файл cpp реализацию функций: void AMyTriggerVolume::NotifyActorBeginOverlap(AActor * OtherActor) { GEngine->AddOnScreenDebugMessage(-1, 1, FColor::Red, FString::Printf(TEXT("%s entered me"), *(OtherActor->GetName()))); } void AMyTriggerVolume::NotifyActorEndOverlap(AActor * OtherActor) { GEngine->AddOnScreenDebugMessage(-1, 1, FColor::R...