- 如何判断是否符合通过一句宏:定义变量、事件绑定和触发方法的情况:
找不到变量定义:OnGameActivityActivationRequesguitedDelegates
找不到触发方法的定义:TriggerOnGameActivityActivationRequestedDelegates() - 如何找到真正定义的位置
通过找变量和触发方法的公共部分【OnGameActivityActivationRequested】,然后在引擎源码中搜索,发现DECLARE【声明关键词】,DEFINE【定义关键词】跳转过去即可找到,通过DEFINE【关键词在什么类里面定义,决定了这个变量归哪个类持有【IOnlineGameActivity】】 - 通过搜索归属的类【IOnlineGameActivity】相关返回值,找到可以从什么地方获取【OnlineSubsystem】
,从而找到获取【OnlineSubsystem】获取的方法

- 如何绑定回调: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
}