《UE4游戏开发》之 《如何使用通过一句宏:定义声明变量,事件绑定和触发》

  1. 如何判断是否符合通过一句宏:定义变量、事件绑定和触发方法的情况:
    找不到变量定义:OnGameActivityActivationRequesguitedDelegates
    找不到触发方法的定义:TriggerOnGameActivityActivationRequestedDelegates()
  2. 如何找到真正定义的位置
    通过找变量和触发方法的公共部分【OnGameActivityActivationRequested】,然后在引擎源码中搜索,发现DECLARE【声明关键词】,DEFINE【定义关键词】跳转过去即可找到,通过DEFINE【关键词在什么类里面定义,决定了这个变量归哪个类持有【IOnlineGameActivity】】
  3. 通过搜索归属的类【IOnlineGameActivity】相关返回值,找到可以从什么地方获取【OnlineSubsystem】在这里插入图片描述,从而找到获取【OnlineSubsystem】获取的方法
    在这里插入图片描述
  4. 如何绑定回调:AddXXXDelegate_Handle,清理Handle:ClearXXXDelegate_Handle;具体实现细节可以看对应宏定义的实现
void ATestEngineGameModeBase::BeginPlay()
{
	Super::BeginPlay(); 
	UE_LOG(LogTemp, Log, TEXT("启动活动ID"));
#if PLATFORM_PS5
	OnlineSubObj = Online::GetSubsystem(GEngine->GetWorld(), PS5_SUBSYSTEM);
	OnlineGameActivityPtr = OnlineSubObj->GetGameActivityInterface();
	OnGameActivityActivationRequestedDelegateHandle = OnlineGameActivityPtr->AddOnGameActivityActivationRequestedDelegate_Handle(FOnGameActivityActivationRequestedDelegate::CreateLambda([](const FUniqueNetId& LocalUserId, const FString& ActivityId, const FOnlineSessionSearchResult* SessionInfo) {
		UE_LOG(LogTemp, Log, TEXT("启动活动ID:%s"), *ActivityId);
		GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, TEXT("启动活动ID:%s"), *ActivityId);
		}));
	GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, TEXT("创建OnGameActivityActivationRequestedDelegateHandle代理"));
	InitActivityVisiable();
#endif
}

void ATestEngineGameModeBase::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
#if PLATFORM_PS5
	OnlineGameActivityPtr->ClearOnGameActivityActivationRequestedDelegate_Handle(OnGameActivityActivationRequestedDelegateHandle);
	GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, TEXT("清理OnGameActivityActivationRequestedDelegateHandle代理"));
#endif
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值