【UE4】C++委托

1.委托声明和定义

首先创建GameMode类(AMyGameModeBase)

在AMyGameModeBase.h委托声明和定义

//声明委托
DECLARE_MULTICAST_DELEGATE_OneParam(FMyDelegate, bool);

UCLASS()
class TEST_API AMyGameModeBase : public AGameModeBase
{
	GENERATED_BODY()

public:
	//实例化委托
	FMyDelegate MyDelegate;
};

2.绑定事件

先创建一个Actor类 (AMyLight)

导入头文件 #include "MyGameModeBase.h"

在BeginPlay中,要先得到当前世界的GameMode,再转成自己创建的MyGameMode,然后绑定自己类定义的方法(SwitchLight)

void AMyLight::BeginPlay()
{
	Super::BeginPlay();

	UWorld *MyWorld = GetWorld();
	if (MyWorld)
	{
        //得到当前世界的GameMode,再转成自己创建的MyGameMode
		AGameModeBase *GameModeBase = UGameplayStatics::GetGameMode(MyWorld);
		AMyGameModeBase *MyGameMode = Cast<AMyGameModeBase>(GameModeBase);

		if (MyGameMode)
		{
			//绑定函数到委托中
			MyGameMode->MyDelegate.AddUObject(this, &AMyLight::SwitchLight);
		}
	}
}


void AMyLight::SwitchLight(bool Value)
{
	MyLight->SetVisibility(Value);
}

3.执行委托 

创建一个Actor(MyTrigger.h)

导入头文件 #include "MyGameModeBase.h"

定义一个方法 DoExecute,DoExecute中通过MyGameMode->MyDelegate.Broadcast(value)进行广播(带一个参数),这样在第二步是绑定了该委托的方法就会执行。

void AMyTrigger::DoExecute(bool value)
{
	UWorld *MyWorld = GetWorld();
	if (MyWorld)
	{
		AGameModeBase *GameModeBase = UGameplayStatics::GetGameMode(MyWorld);
		AMyGameModeBase *MyGameMode = Cast<AMyGameModeBase>(GameModeBase);

		if (MyGameMode)
		{
			//委托广播
			MyGameMode->MyDelegate.Broadcast(value);
		}
	}
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值