匹配回填
通常情况下,一旦创建了战斗会话,其相关的匹配进程就会停止。为了能够继续将玩家匹配到正在进行的战斗中,系统引入了回填机制,包括自动回填和手动回填,分别适用于不同的使用场景。
回填功能目前处于测试阶段,在特定规则集下可能无法完美运作。如果回填功能在您的使用场景中未按预期工作,请与我们联系。
1. 概述
回填功能使开发者能够在战斗开始后继续匹配玩家。在以下情况下很有用:
- 当任何玩家与专用服务器失去连接时,会留下空缺的队伍位置并造成不平衡的情况。
- 对于大型战斗/大型世界,可能很难在短时间内找到足够的玩家,因此先用少量玩家开始战斗,然后持续将玩家聚集到这场战斗中会是个不错的选择。
- 回填过程可以显示匹配的进度。
2. 核心概念
回填功能提供两种形式:自动回填和手动回填。
2.1 自动回填
开发者可以在网页控制台为特定的匹配配置启用自动回填。 启用自动回填后,每个战斗会话创建时都会附带一个回填任务。只要战斗会话未满员,回填任务就会一直尝试为其添加玩家。如果一个或多个玩家从战斗会话中断开连接,回填也会尝试填补这些空缺位置。
通常,自动回填会执行一个策略,尽可能填充规则集所要求的玩家数量。
自动回填与自动继续不同。后者属于接受功能,当有人拒绝匹配结果时,会将已接受玩家的票据转回到搜索中
状态,而不是已终止
状态。
自动继续发生在匹配结果等待玩家接受之后、战斗会话创建之前。 自动回填发生在战斗会话创建之后,只有当专用服务器明确取消或相关战斗会话结束时才会停止。
请注意,回填功能与接受功能不兼容,因为它们在逻辑流程上会产生冲突。
2.2 手动回填
开发人员可以在专用服务器上手动启动回填任务。 使用手动回填时,可以选择两种策略:
- 最大可能:执行尽可能多地填充规则集所需玩家数量的策略,这与自动回填相同。
- 自定义:由游戏决定在哪个队伍填充指定数量的玩家,同时也要满足规则集要求。
例如:
{
"version": "v1.0",
"playerAttributes": [],
"teams": [
{
"name": "red",
"minPlayers": 1,
"maxPlayers": 3,
"minQuantity": 1,
"maxQuantity": 1
},
{
"name": "blue",
"minPlayers": 1,
"maxPlayers": 3,
"minQuantity": 1,
"maxQuantity": 1
}
],
"rules": [
{
"name": "equalsize",
"type": "comparisonRule",
"description": "",
"measurements": [
"count(teams[*].players)"
],
"operation": "="
}
],
"expansions": []
}
对于上述规则集,战斗最少需要2名玩家开始:红队1名和蓝队1名。
如果应用"最大可能"策略,根据"equalsize"规则,回填将填充2名玩家:红队1名和蓝队1名,达到2v2的情况。此时战斗仍未满员,回填将继续寻找2名玩家,达到3v3,然后暂停。如果有任何玩家断开连接导致变成3v2,回填将根据"equalsize"规则尝试寻找1名玩家,达到3v3,然后再次暂停。
如果应用了"自定义"策略,游戏需要决定队伍填充映射。让我们同样以1对1作为起点。 如果队伍填充映射是这样的:
{
"red": 1,
"blue": 1
}
回填将填充2名玩家,达到2v2后停止。这意味着回填已完成目标,不会继续进行。
如果队伍填写映射如下所示:
{
"red": 2,
"blue": 2
}
回填将具有与使用"最大可能"策略相同的效果,先达到2v2,然后达到3v3后停止。
但是,如果团队填充映射是这样的:
{
"red": 1
}
由于"2对1"违反了equalsize
规则,回填将不会填充任何玩家进入对战。
3. 关键流程
回填具有以下状态:
- 搜索中:表示回填正在搜索玩家。
- 已暂停:表示回填已暂停,通常是因为战斗已满。
- 已取消:表示回填被游戏取消。
- 已完成:表示回填达到目标并停止,这种情况仅在使用"自定义"策略时发生。
- 错误:表示回填由于系统故障而终止,如果发生这种情况请向我们提交错误报告 :)
回填开始时处于"搜索中"或"已暂停"状态,具体取决于战斗会话是否已满。 对于"已暂停"状态,如果有任何玩家断开战斗会话连接,回填将立即转换为"搜索中"状态。
对于"搜索中"状态,如果回填成功将玩家填充到战斗会话中,它可以转换为"已暂停"、"已完成"或保持"搜索中"状态,这取决于它使用的策略和试图达到的目标。
4. 集成步骤
4.1 开启按需自动回填
如果您希望 PGOS 在创建战斗会话后自动创建回填请求,请在对局配置中开启自动回填选项。
4.2 管理来自游戏服务器的回填请求
您可以使用以下API直接从托管战斗会话的游戏服务器启动或取消回填请求:
- StartBackfill。启动新的回填请求。一个战斗会话中不能同时发起多个回填,并且必须终止当前回填才能再次发起新的回填。启动回填时可以指定以下参数:
- 战斗会话ID。我们使用战斗会话ID来识别在该战斗会话上运行的回填请求。
- 回填策略。回填时的玩家填充策略,枚举如下:
- Custom。在此模式下,需要指定每个队伍的目标玩家数量。但是,每个队伍的玩家数量必须符合规则集约束。
- MaxPossible。回填匹配将以规则集中定义的最大玩家数为目标,并忽略玩家数量的扩展。
- 自定义队伍映射。每个队伍的目标玩家数量。选择自定义策略时需要填写此数据,以告知PGOS何时停止回填。
- CancelBackfill。终止在战斗会话上运行的回填请求。
4.3 追踪回填请求
游戏服务器将通过回调获得回填状态和进度的变更通知,在Hosting
模块的OnBattleSessionUpdated
事件中添加处理代码以接收和处理回填进程数据。
5. 常见问题
5.1 玩家是否知道自己是通过回填进行匹配的?
不会,玩家无法知道自己是通过正常匹配还是回填进行匹配的。但开发者可以通过 Web Portal 来确定这一点。 对于通过回填匹配的玩家,在对战场次 ID 的票据日志右侧会有一个小的"回填"标记,如下所示。
5.2 当战斗人数已满时,回填是否会停止?
这取决于启动回填时使用的策略。 如果使用"最大可能"策略,当达到规则集限制的最大玩家数量时,回填将暂停。
如果有玩家从战斗中断开连接,回填将恢复,尝试填补空缺位置。如果认为应该停止回填,开发人员可以随时手动取消回填。
如果使用"自定义"策略,回填将只尝试完成开发人员设置的目标。因此,当玩家数量达到自定义团队映射时,回填将停止。
5.3 回填会超时吗?
不会,回填目前没有超时设计。
5.4 如何选择回填策略?
这取决于游戏类型和战斗场景。
当战斗只需要少量队伍时,Custom
策略是比较合适的。当任何玩家断开连接,且不平衡的情况会影响游戏体验时,使用Custom
策略来回填另一名玩家是个不错的选择。
最大可能
策略适用于需要极快匹配速度的游戏。使用 最大可能
策略时,对战将以规则集要求的最少玩家人数开始,然后持续回填更多玩家直到满员。
最大可能
策略也适用于每个专用服务器可容纳数千名玩家的大型大厅游戏。因此新玩家倾向于被匹配到现有对战中,而不是创建新的对战。
5.5 会是新战斗还是回填?
这个问题从回填功能的开发阶段就一直存在。当新玩家开始匹配时,我们应该期待一个新的战斗会话,还是将他们回填到现有的战斗中?
要回答这个问题,需要先介绍以下几点。
- 回填功能不会阻止新战斗会话的创建。
- 在内部,匹配器会先考虑回填,然后是正常匹配,然后循环。也就是说,回填和正常匹配是交替进行的。
- 回填和正常匹配的结果都受规则集的限制。不合法的结果不会被输出。 所以虽然匹配器倾向于更频繁地进行回填而不是正常匹配,但仍然不能保证一定会进行回填。
如果从统计的角度来看这个问题,新战斗和回填都是可能的。
如果游戏开发者想要将在短时间内开始匹配的玩家匹配到同一场战斗中,使用expansion
功能比回填是更好的选择。关于规则集示例,请参考这个规则集示例.