在实在联网功能时,我们常常需要获取到会话类型,当我们需要在蓝图中使用这些类型的时候。如果我们直接在头文件中直接使用会话相关类型在编译时就会报错
1
| Unrecognized type “你所引用的类” - type must be a UCLASS,USTRUCT or UENUM
|
这时候就需要利用结构体对需要使用的会话类型进行一个包装,具体的实现方式我们可以借鉴(对,是借鉴不是抄) BlueprintSession 的实现形式。找到相关头文件
1
| \引擎安装路径\Engine\Plugins\Online\OnlineSubsystemUtils\Source\OnlineSubsystemUtils\Classes\FindSessionsCallbackProxy.h
|
1
| \引擎安装路径\Engine\Plugins\Online\OnlineSubsystemUtils\Source\OnlineSubsystemUtils\Private\FindSessionsCallbackProxy.cpp
|
这里只他们的展示部分代码,具体可以自己去找这两个文件看
FindSessionsCallbackProxy.h 相关类型的封装
1 2 3 4 5 6 7
| USTRUCT(BlueprintType) struct FBlueprintSessionResult { GENERATED_USTRUCT_BODY()
FOnlineSessionSearchResult OnlineResult; };
|
综上,我们就可以得出我们需要的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| USTRUCT(BlueprintType) struct FSearchResultSession { GENERATED_USTRUCT_BODY() FOnlineSessionSearchResult OnlineResult; };
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 非常~好用!
