UE4联网开发翻译(十)

会话生命周期

1.根据设定生成会话

2.等待玩家请求加入匹配

3.注册玩家

4.启用会话

5.打比赛

6.结束会话

7.注销玩家

8.二选一:

    如果你想改变比赛类型那么更新会话,返回等待玩家进入

    注销会话

 

 

 

会话接口

会话接口IOnlineSession,提供了特定于平台的功能,用于在幕后设置所需的片段,以便执行匹配以及允许玩家查找和加入在线游戏的其他方法。

这包括会话管理,通过搜索或其他方法查找会话,以及参加或离开这些会话。

创建会话接口由在线子系统拥有。意味着这只存在于服务器上。

一次只存在一个会话接口——引擎当前运行的平台的会话接口。

虽然会话接口执行所有的会话处理,但游戏通常不会直接与它交互。

相反,游戏会话(AGameSession)充当特定于游戏的包装器,当需要与会话交互时,会话接口和游戏代码会调用它。

GameSession被GameMode创建和拥有,而且当运行一个在线游戏时,它只存在于服务器上。

 

 

 

会话设置

会话设置,由‘FOnlineSessionSettingscalss’定义,是一组确定会话特征的属性。

在基本实现里,这些内容包括:

1.允许的玩家数量

2.会话是共公开还是私有的

3.是否局域网会话

4.是服务器专用或是玩家托管的会话

5.允许邀请的会话

用一个在线Lobby游戏例子,每个游戏都是一个会话,且有自己的会话设置。

例如,有些会话是PVP,有些是Co-Op(合作多人游戏)。

不同的会话可以呈现不同的地图、玩家列表、不同的游戏人数等等。

 

 

会话管理

所有会话节点都是异步任务(时钟),当完成时,会调用‘OnSucess’或‘OnFailure’。同时,你能用最上层exec输出。

创建会话

为了让玩家找到会话和可能加入它,你需要创建一个会话和设置它的属性,决定哪些属性可见。

当前引擎版本可能不支持通过蓝图注册专用服务器会话。

在C++中,你应该通过重写‘RegisterServer’函数在AGameSession中进行常规的C++会话创建!

 

通过蓝图创建会话

要在蓝图里创建会话,你可以使用Epic暴露给开发者的“CreateSession”节点。

它没有提供很多选项,但可以通过论坛里的插件进行扩展。

 

通过C++创建会话

https://wiki.unrealengine.com/How_To_Use_Sessions_In_C++#Creating_a_Session

 

 

更新会话

更新是在你希望更改现有会话的设置时完成的,使用‘IOnlineSession::UpdateSession()’函数完成。

例如,原会话只允许8个玩家,但下一场比赛需要12个玩家。为了更新这个会话,‘UpdateSession()’将会被调用,指定最多12个玩家兵传递给新会话。

当更新会话请求完成,会触发‘OnUpdateSessionComplete’代理。为会话设置更改所需要的配置和初始化提供了机会。

更新会话是常在服务器的游戏中出现的,但为了会话信息同步,也会在客户端上出现。

这个函数没有蓝图版本,但论坛的插件可以扩展。

 

 

销毁会话

当会话结束且不再需要时,使用‘IOnlineSession::DestroySession()’函数销毁这个会话。

‘OnDestroySessionComplete’代理被触发,让你进行清理操作。

 

通过蓝图销毁会话

用Epic暴露的‘DestroySession’节点销毁会话。

 

通过C++销毁会话

https://wiki.unrealengine.com/How_To_Use_Sessions_In_C++#Destroying_a_Session

 

 

 

查找会话

查找会话最简单的方法是,搜索匹配某些所需设置子集的会话。

这可能是玩家在UI通过过滤器来寻找的回应,或基于玩家的能力和其他因素在后台处理完成的,也可能是这两种方法结合。

查找会话最基本的形式是经典的服务器浏览器,它显示所有有效游戏,并允许玩家根据他们想玩的游戏类型进行过滤。

 

通过蓝图搜索会话

你可以用‘FindSessions’节点。如果你想搜索局域网或在线游戏,你可以指定搜索结果的数量。

更多功能通过论坛插件。

 

通过C++搜索会话

https://wiki.unrealengine.com/How_To_Use_Sessions_In_C++#Searching_and_Finding_a_Session

 

进入会话

一旦确定要加入的会话,就可以通过调用‘IOnlineSession::JoinSession()’,传递要加入会话的玩家人数、名称、搜索结果。

当连接完成,‘OnJoinSessionComplete’代理被触发。这就是让玩家进入比赛的逻辑所在。

关于这个逻辑的更多信息可以在下面作者的博客里面阅读。

 

通过蓝图加入会话

为了加入会话,可用‘JoinSession’节点。

它需要传入‘FindSession’提供的搜索结果数组。

‘JoinSession’节点会直接连接映射‘OnSuccess’,这你不需要处理。

 

通过C++加入会话

https://wiki.unrealengine.com/How_To_Use_Sessions_In_C++#Joining_a_Session

 

 

 

基于云的匹配

基于云的匹配是指可用的内置匹配服务,通常是特定于平台的。

这类服务的一个例子是通过Microsoft Xbox Live服务提供的TrueSkill系统。

要在支持它的平台上发起配对,可以调用'IOnlineSession::Startmatchmaking()',并将玩家的人数、会话名、创建新会话时要使用的会话设置和要搜索的设置传递给它。

“OnMatchmakingComplete”委托在匹配完成时触发。

这提供了一个bool,指定流程是否成功,以及在这种情况下要连接的会话的名称。

可以通过调用'IOnlineSession::CancelMatchmaking()'来取消正在进行的匹配操作,并将玩家的人数和最初传递给调用以开始匹配的SessionName传递给它。

“OnCancelMatchmakingCompletedelegate”在取消操作完成时触发。

 

 

跟踪或邀请好友

在支持朋友概念的平台上,玩家可以跟随朋友进入一个会话,或者邀请朋友加入会话。

通过调用'IOnlineSession:FindFriendSession()',将想要加入会话的本地玩家人数和已经在会话中的朋友的ID传递给它,可以跟踪一个朋友进入会话。

当找到会话时,'OnFindFriendSessionComplete'委托将被触发,它包含一个可用于加入会话的SearchResult。

玩家还可以使用'IOnlineSession::SendSessionInviteToFriend()'或'IOnlineSession::SendSessionInviteToFriends()'来邀请一个或多个朋友加入他们当前的会话,并传递被邀请的玩家的本地玩家人数、会话名称和ID。

当朋友接受邀请时,包含要加入的会话的搜索结果的“OnSessionInviteAccepted”委托将被触发。

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值