1. 第一种
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FReceiveDelegateEvent, FString, Value1, FString, Value2);
UPROPERTY(BlueprintAssignable, Category = "Event")
FReceiveDelegateEvent ReceiveDelegateEvent;
//(ReceiveDelegateEvent.Broadcast())
UFUNCTION(BlueprintCallable, Category = "My|MyActor")
void BroadcastToBluePrint(FString value1, FString value2);
void AMyActor::BroadcastToBluePrint(FString value1, FString value2)
{
this->ReceiveDelegateEvent.Broadcast(value1, value2);
}
委托
DECLARE_DELEGATE_TwoParams(FRegisterShortCutContainer, TArray<TSharedPtr<ShortcutContainer>>*, TSharedPtr<STextBlock>)
public:
FRegisterShortCutContainer RegisterShortcutContainer;
//将实例化的结构体注册进PlayerState的容器数组 (调用)
RegisterShortcutContainer.ExecuteIfBound(&ContainerList, ShortcutInfoTextBlock);
另外的地方绑定RegisterShortcutContainer.BindUObject
UFUNCTION()
virtual void OnOverlayBegin(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult);
//绑定检测方法到碰撞体
FScriptDelegate OverlayBegin;
OverlayBegin.BindUFunction(this, "OnOverlayBegin");//OnOverlayBegin为自定义函数
AffectCollision->OnComponentBeginOverlap.Add(OverlayBegin);
2.第二种
.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "UObject/NoExportTypes.h"
#include "Kismet/BlueprintAsyncActionBase.h"
#include "MyObject.generated.h"
/**
*
*/
UCLASS()
class TTTTT_API UMyObject : public UBlueprintAsyncActionBase
{
GENERATED_BODY()
public:
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FTestDelegate, FString, Content, int32, StatusCode);
UFUNCTION(BlueprintCallable, Category = "MyObject")
static UMyObject* DDDelegate(FString url, FString Content);
UPROPERTY(BlueprintAssignable)
FTestDelegate OnSuccess;
UPROPERTY(BlueprintAssignable)
FTestDelegate OnFail;
private:
void DDUseDelegate(bool bSucceeded);
};
.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "TTTTT.h"
#include "MyObject.h"
UMyObject* UMyObject::DDDelegate(FString url, FString Content)
{
UMyObject* Helper = NewObject<UMyObject>();
return Helper;
}
void UMyObject::DDUseDelegate(bool bSucceeded)
{
if (bSucceeded)
{
OnSuccess.Broadcast("",0);
}
else
{
OnFail.Broadcast("", 1);
}
}
3.绑定事件
void AMyActor::BeginPlay()
{
Super::BeginPlay();
OnActorBeginOverlap.AddDynamic(this,&AMyActor::BB);
}
UFUNCTION()
void BB(AActor* OverlappedActor, AActor* OtherActor);
void AMyActor::BB( AActor* OverlappedActor, AActor* OtherActor)
{
}
.h
UFUNCTION() void YourFunction(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComponent, FVector NormalImpulse, const FHitResult& Hit);
.cpp
OnComponentHit.AddDynamic(this, &AMyActor::YourFunction);
void AMyActor::YourFunction(UPrimitiveComponent * HitComponent, AActor * OtherActor, UPrimitiveComponent * OtherComponent, FVector NormalImpulse, const FHitResult & Hit) { GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Red, Hit.GetActor()->GetName()); }