栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【UE4】C++委托

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【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(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(GameModeBase);

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/867849.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号