注意:创建C++ MyDelegateActor类
MyDelegateActor.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyDelegateActor.generated.h"
DECLARE_DELEGATE(NoParamDelegate);
DECLARE_DELEGATE_OneParam(OneParamDelegate, FString);
DECLARE_DELEGATE_TwoParams(TwoParamDelegate, FString, int32);
DECLARE_DELEGATE_ThreeParams(ThreeParamDelegate, FString, int32, float);
DECLARE_DELEGATE_RetVal(FString, RevalDelegate);
UCLASS()
class IBB_API AMyDelegateActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AMyDelegateActor();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
NoParamDelegate NoParamDelegate;
OneParamDelegate OneParamDelegate;
TwoParamDelegate TwoParamDelegate;
ThreeParamDelegate ThreeParamDelegate;
RevalDelegate RevalDelegate;
void NoParamFunction();
void OneParamFunction(FString str);
void TwoParamFunction(FString str, int32 value);
void ThreeParamFunction(FString str, int32 value, float value1);
FString RevalParamFunction();
};
MyDelegateActor.cpp
#include "MyDelegateActor.h"
// Sets default values
AMyDelegateActor::AMyDelegateActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
NoParamDelegate.BindUObject(this, &AMyDelegateActor::NoParamFunction);
OneParamDelegate.BindUObject(this, &AMyDelegateActor::OneParamFunction);
TwoParamDelegate.BindUObject(this, &AMyDelegateActor::TwoParamFunction);
ThreeParamDelegate.BindUObject(this, &AMyDelegateActor::ThreeParamFunction);
RevalDelegate.BindUObject(this, &AMyDelegateActor::RevalParamFunction);
}
// Called when the game starts or when spawned
void AMyDelegateActor::BeginPlay()
{
Super::BeginPlay();
NoParamDelegate.ExecuteIfBound();
OneParamDelegate.ExecuteIfBound("OneParamDelegate");
TwoParamDelegate.ExecuteIfBound("TwoParamDelegate", 10);
ThreeParamDelegate.ExecuteIfBound("ThreeParamDelegate", 10, 5.f);
FString strValue = RevalDelegate.Execute();
}
// Called every frame
void AMyDelegateActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
void AMyDelegateActor::NoParamFunction(){
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, TEXT("NoParamDelegate"));
}
void AMyDelegateActor::OneParamFunction(FString str){
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, FString::Printf(TEXT("%s"), *str));
}
void AMyDelegateActor::TwoParamFunction(FString str, int32 value){
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, FString::Printf(TEXT("%s %d"), *str, value));
}
void AMyDelegateActor::ThreeParamFunction(FString str, int32 value, float value1){
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, FString::Printf(TEXT("%s %d %f"), *str, value, value1));
}
FString AMyDelegateActor::RevalParamFunction(){
FString str = FString::Printf(TEXT("RevalParamDelegate"));
return str;
}