《UE5_C++多人TPS完整教程》学习笔记15 ——《P16 会话接口委托(Session Interface Delegates)》

本文主要是介绍《UE5_C++多人TPS完整教程》学习笔记15 ——《P16 会话接口委托(Session Interface Delegates)》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


本文为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 会话接口函数及委托句柄

  1. 《P7 在线会话控制(Online Sessions)》 中曾提到,一个典型的会话 生命周期Lifetime)包括会话由需求创建、等待玩家加入、为每个加入的玩家注册、会话开始、进行多人游戏、会话结束、取消玩家注册、会话更新或销毁。我们只需要 “CreateSession()”、“FindSessions()”、“JoinSession()”、“StartSession()”、“DestroySession” 这些会话接口函数即可实现上述生命周期。我们将在自己创建的子系统上定义这些函数,同时创建委托及与其绑定的回调函数、委托句柄。
    在这里插入图片描述

  2. 具体的步骤是:我们构造委托并将回调函数绑定到委托上,使用对应的 “AddOn...CompleteDelegate_Handle()” 函数(这里以 “AddOnCreateSessionCompleteDelegate_Handle()” 函数为例)添加到委托列表的委托,然后定义一个委托句柄类型 “FDelegateHandle” 的变量来保存添加到委托列表的委托,以便委托完成后使用 “ClearOn..CompleteDelegate_Handle()” 函数(这里以 “ClearOnCreateSessionCompleteDelegate_Handle()” 函数为例)将其移出委托列表。
    在这里插入图片描述

16.2 定义与会话处理相关的函数

  1. 在 “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" 后使用,更具可读性// TSharedPtr<class 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)*/
    };
    
  2. 在 “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()” 函数将其移出委托列表。
在这里插入图片描述


这篇关于《UE5_C++多人TPS完整教程》学习笔记15 ——《P16 会话接口委托(Session Interface Delegates)》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/712028

相关文章

在React中引入Tailwind CSS的完整指南

《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa