校园网站建设的用处,WordPress推广返佣插件,wordpress 三主题公园,电子外贸网站模板本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P16 会话接口委托#xff08;Session Interface Delegates#xff09;》 的学习笔记#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版#xff0c;UP主#xf…
本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P16 会话接口委托Session Interface Delegates》 的学习笔记该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版UP主也是译者为 游戏引擎能吃么。 文章目录 P16 会话接口委托16.1 会话接口函数及委托句柄16.2 定义与会话处理相关的函数16.3 Summary P16 会话接口委托
本节课我们将向新创建的子系统添加会话接口函数、委托及与其绑定的回调函数、委托句柄保存委托以便在委托完成时能将其移出委托列表。 16.1 会话接口函数及委托句柄 《P7 在线会话控制Online Sessions》 中曾提到一个典型的会话 生命周期Lifetime包括会话由需求创建、等待玩家加入、为每个加入的玩家注册、会话开始、进行多人游戏、会话结束、取消玩家注册、会话更新或销毁。我们只需要 “CreateSession()”、“FindSessions()”、“JoinSession()”、“StartSession()”、“DestroySession” 这些会话接口函数即可实现上述生命周期。我们将在自己创建的子系统上定义这些函数同时创建委托及与其绑定的回调函数、委托句柄。 具体的步骤是我们构造委托并将回调函数绑定到委托上使用对应的 “AddOn...CompleteDelegate_Handle()” 函数这里以 “AddOnCreateSessionCompleteDelegate_Handle()” 函数为例添加到委托列表的委托然后定义一个委托句柄类型 “FDelegateHandle” 的变量来保存添加到委托列表的委托以便委托完成后使用 “ClearOn..CompleteDelegate_Handle()” 函数这里以 “ClearOnCreateSessionCompleteDelegate_Handle()” 函数为例将其移出委托列表。
16.2 定义与会话处理相关的函数
在 “MultiplayerSessionsSubsystem.h” 中定义会话接口函数、委托及将与其绑定的回调函数、委托句柄。UCLASS()
class MULTIPLAYERSESSIONS_API UMultiplayerSessionsSubsystem : public UGameInstanceSubsystem
{GENERATED_BODY()public:UMultiplayerSessionsSubsystem();/* P16 会话接口委托Session Interface Delegates*/// 菜单类将会调用以下会话接口函数void CreateSession(int32 NumpublicConnections, FString MatchType); // 创建游戏会话void FindSessions(int32 MaxSearchResults); // 查找游戏会话void JoinSession(const FOnlineSessionSearchResult SessionResult); // 加入游戏会话void DestroySession(); // 销毁会话void StartSession(); // 开始会话/* P16 会话接口委托Session Interface Delegates*/protected:/* P16 会话接口委托Session Interface Delegates*/// 为将要添加到委托列表的委托定义类内部的回调函数不需要在类外调用void OnCreateSessionComplete(FName SessionName, bool bWasSuccessful); // 委托 CreateSessionCompleteDelegate 的回调函数void OnFindSessionsComplete(bool bWasSuccessful); // 委托 FindSessionCompleteDelegate 的回调函数void OnJoinSessionComplete(FName SessionName, EOnJoinSessionCompleteResult::Type Result); // 委托 JoinSessionCompleteDelegate 的回调函数void OnDestroySessionComplete(FName SessionName, bool bWasSuccessful); // 委托 DestroySessionCompleteDelegate 的回调函数void OnStartSessionComplete(FName SessionName, bool bWasSuccessful); // 委托 StartSessionCompleteDelegate 的回调函数/* P16 会话接口委托Session Interface Delegates*/private:// 会话接口智能指针IOnlineSessionPtr SessionInterface; // 添加头文件 Interfaces/OnlineSessionInterface.h 后使用更具可读性// TSharedPtrclass IOnlineSession, ESPMode::ThreadSafe SessionInterface; // 使用 TSharedPtr 智能指针包装器进行声明/* P16 会话接口委托Session Interface Delegates*/// 定义与会话接口函数相关的委托FOnCreateSessionCompleteDelegate CreateSessionCompleteDelegate; // 会话创建完成委托FOnFindSessionsCompleteDelegate FindSessionsCompleteDelegate; // 会话查找完成委托FOnJoinSessionCompleteDelegate JoinSessionCompleteDelegate; // 会话加入完成委托FOnDestroySessionCompleteDelegate DestroySessionCompleteDelegate; // 会话销毁完成委托FOnStartSessionCompleteDelegate StartSessionCompleteDelegate; // 会话开始完成委托// 定义委托句柄FDelegateHandle CreateSessionCompleteDelegateHandle; // 会话创建完成委托句柄FDelegateHandle FindSessionsCompleteDelegateHandle; // 会话查找完成委托句柄FDelegateHandle JoinSessionCompleteDelegateHandle; // 会话加入完成委托句柄FDelegateHandle DestroySessionCompleteDelegateHandle; // 会话销毁完成委托句柄FDelegateHandle StartSessionCompleteDelegateHandle; // 会话开始完成委托句柄/* P16 会话接口委托Session Interface Delegates*/
};在 “MultiplayerSessionsSubsystem.cpp” 中将委托及与对应的回调函数进行绑定。UMultiplayerSessionsSubsystem::UMultiplayerSessionsSubsystem(): // 为委托绑定回调函数/* P16 会话接口委托Session Interface Delegates*/CreateSessionCompleteDelegate(FOnCreateSessionCompleteDelegate::CreateUObject(this, ThisClass::OnCreateSessionComplete)),FindSessionsCompleteDelegate(FOnFindSessionsCompleteDelegate::CreateUObject(this, ThisClass::OnFindSessionsComplete)),JoinSessionCompleteDelegate(FOnJoinSessionCompleteDelegate::CreateUObject(this, ThisClass::OnJoinSessionComplete)),DestroySessionCompleteDelegate(FOnDestroySessionCompleteDelegate::CreateUObject(this, ThisClass::OnDestroySessionComplete)),StartSessionCompleteDelegate(FOnStartSessionCompleteDelegate::CreateUObject(this, ThisClass::OnStartSessionComplete))/* P16 会话接口委托Session Interface Delegates*/
{IOnlineSubsystem* OnlineSubsystem IOnlineSubsystem::Get(); // 获取当前的在线子系统指针if (OnlineSubsystem) { // 如果当前在线子系统有效SessionInterface OnlineSubsystem-GetSessionInterface(); // 获取会话接口智能指针}
}·
16.3 Summary
本节课依照会话生命周期定义了与会话管理相关的在线接口函数、委托及其对应的回调函数并将回调函数绑定到委托上使用对应的 “AddOn...CompleteDelegate_Handle()” 函数添加到委托列表的委托然后定义一个委托句柄类型 “FDelegateHandle” 的变量来保存添加到委托列表的委托以便委托完成后使用 “ClearOn..CompleteDelegate_Handle()” 函数将其移出委托列表。