在实在联网功能时,我们常常需要获取到会话类型,当我们需要在蓝图中使用这些类型的时候。如果我们直接在头文件中直接使用会话相关类型在编译时就会报错
Unrecognized type “你所引用的类” - type must be a UCLASS,USTRUCT or UENUM
这时候就需要利用结构体对需要使用的会话类型进行一个包装,具体的实现方式我们可以借鉴(对,是借鉴不是抄) BlueprintSession 的实现形式。找到相关头文件
\引擎安装路径\Engine\Plugins\Online\OnlineSubsystemUtils\Source\OnlineSubsystemUtils\Classes\FindSessionsCallbackProxy.h
\引擎安装路径\Engine\Plugins\Online\OnlineSubsystemUtils\Source\OnlineSubsystemUtils\Private\FindSessionsCallbackProxy.cpp
这里只他们的展示部分代码,具体可以自己去找这两个文件看
FindSessionsCallbackProxy.h 相关类型的封装
USTRUCT(BlueprintType) struct FBlueprintSessionResult { GENERATED_USTRUCT_BODY() FOnlineSessionSearchResult OnlineResult; };
综上,我们就可以得出我们需要的代码
USTRUCT(BlueprintType) struct FSearchResultSession { GENERATED_USTRUCT_BODY() FOnlineSessionSearchResult OnlineResult; // 注意此处不要添加UPROPERTY 不然又得找不到了 };
// 以下为类型实现,注意在结构体内是无法使用 UFUNCTION 的 UFUNCTION(BlueprintPure) static int32 GetPingInMs(const FSearchResultSession& ResultSession) { return ResultSession.OnlineResult.PingInMs; } UFUNCTION(BlueprintPure) static FString GetServerName(const FSearchResultSession& ResultSession) { return ResultSession.OnlineResult.Session.OwningUserName; } UFUNCTION(BlueprintPure) static int32 GetCurrentPlayer(const FSearchResultSession& ResultSession) { return ResultSession.OnlineResult.Session.SessionSettings.NumPublicConnections - ResultSession.OnlineResult.Session.NumOpenPublicConnections; } UFUNCTION(BlueprintPure) static int32 GetMaxPlayer(const FSearchResultSession& ResultSession) { return ResultSession.OnlineResult.Session.SessionSettings.NumPublicConnections; }
需要其他什么功能可以另行添加,注意函数的形参类型是自己定义的结构体名称
试一试~ emmmmm 非常~好用!
标签:ResultSession,FSearchResultSession,UFUNCTION,C++,会话,OnlineResult,UE,USTRUCT From: https://www.cnblogs.com/limu-zy/p/16955249.html