FlexMatch 规则集架构 - Amazon GameLift
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

FlexMatch 规则集架构

FlexMatch 规则集对小对战规则和大对战规则使用标准模式。在创建游戏的对战规则时,将此架构与FlexMatch 规则语言中描述的规则语言一起使用。

了解有关创建 FlexMatch 规则的更多信息:

小型对战的规则集架构

以下架构记录了用于构建最多 40 位玩家的对战的规则集的所有可能的属性和允许值。

{ "name": "string", "ruleLanguageVersion": "1.0", "playerAttributes":[{ "name": "string, "type": <"string", "number", "string_list", "string_number_map">, "default": "string" }], "algorithm": { "strategy": "exhaustiveSearch", "batchingPreference": <"random", "sorted">, "sortByAttributes": [ "string" ], "expansionAgeSelection": <"newest", "oldest">, "backfillPriority": <"normal", "low", "high"> }, "teams": [{ "name": "string", "maxPlayers": number, "minPlayers": number, "quantity": integer }], "rules": [{ "type": "distance", "name": "string", "description": "string", "measurements": "string", "referenceValue": number, "maxDistance": number, "minDistance": number, "partyAggregation": <"avg", "min", "max"> },{ "type": "comparison", "name": "string", "description": "string", "measurements": "string", "referenceValue": number, "operation": <"<", "<=", "=", "!=", ">", ">=">, "partyAggregation": <"avg", "min", "max"> },{ "type": "collection", "name": "string", "description": "string", "measurements": "string", "referenceValue": number, "operation": <"intersection", "contains", "reference_intersection_count">, "maxCount": number, "minCount": number, "partyAggregation": <"union", "intersection"> },{ "type": "latency", "name": "string", "description": "string", "maxLatency": number, "maxDistance": number, "distanceReference": number, "partyAggregation": <"avg", "min", "max"> },{ "type": "distanceSort", "name": "string", "description": "string", "sortDirection": <"ascending", "descending">, "sortAttribute": "string", "mapKey": <"minValue", "maxValue">, "partyAggregation": <"avg", "min", "max"> },{ "type": "absoluteSort", "name": "string", "description": "string", "sortDirection": <"ascending", "descending">, "sortAttribute": "string", "mapKey": <"minValue", "maxValue">, "partyAggregation": <"avg", "min", "max"> }], "expansions": [{ "target": "string", "steps": [{ "waitTimeSeconds": number, "value": number }, { "waitTimeSeconds": number, "value": number }] }] }

大型对战的规则集架构

以下架构记录了用于构建超过 40 位玩家的对战的规则集的所有可能的属性和允许值。如果规则集中所有团队的总 maxPlayers 值超过 40,FlexMatch 将在大型对战指南下处理使用此规则集的对战请求。

{ "name": "string", "ruleLanguageVersion": "1.0", "playerAttributes":[{ "name": "string, "type": <"string", "number", "string_list", "string_number_map">, "default": "string" }], "algorithm": { "strategy": "balanced", "batchingPreference": <"largestPopulation", "fastestRegion">, "balancedAttribute": "string", "expansionAgeSelection": <"newest", "oldest">, "backfillPriority": <"normal", "low", "high"> }, "teams": [{ "name": "string", "maxPlayers": number, "minPlayers": number, "quantity": integer }], "rules": [{ "type": "latency", "name": "string", "description": "string", "maxLatency": number, "partyAggregation": <"avg", "min", "max"> }], "expansions": [{ "target": "string", "steps": [{ "waitTimeSeconds": number, "value": number }, { "waitTimeSeconds": number, "value": number }] }] }

规则集架构属性定义

此部分定义规则集架构中的每个属性。有关创建规则集的更多帮助,请参阅设计 FlexMatch 规则集

name

规则集的描述标签。此值与分配给 GameLift MatchmakingRuleSet 资源的名称不关联。该值包含在描述已完成对战游戏的对战数据中,但未被任何 GameLift 进程使用。

允许的值:字符串

必需? 否

ruleLanguageVersion

正在使用的 FlexMatch 属性表达式语言的版本。

允许的值:“1.0”

必需? 是

playerAttributes

包含在对战请求中并在对战过程中使用的玩家数据的集合。您也可以在此处声明属性,以便将玩家数据包含在传递到游戏服务器的对战数据中,即使该数据在对战过程中未使用。

必需? 否

name

对战构建器要使用的玩家属性的唯一名称。此名称必须与对战请求中引用的玩家属性名称匹配。

允许的值:字符串

必需? 是

type

玩家属性值的数据类型。

允许的值:“string”、“number”、“string_list”、“string_number_map”

必需? 是

default

对战请求未为玩家提供对战请求时使用的默认值。

允许的值:玩家属性允许的任何值。

必需? 否

algorithm

用于自定义对战过程的可选配置设置。

必需? 否

strategy

构建对战游戏时使用的方法。如果未设置此属性,则默认行为是“exhativeSearch”。

允许的值:

  • “exhaustiveSearch”– 标准匹配方法。FlexMatch 通过评估池中基于一组自定义匹配规则的其他票证,围绕一个批次中的最旧票证形成匹配项。此策略用于 40 位玩家或更少玩家的对战游戏。使用此策略时,batchingPreference 应设置为“随机”或“已排序”。

  • “平衡”– 方法,经优化可快速形成大型对战游戏。此策略仅用于 41 到 200 位玩家的对战游戏。它通过对票证池进行预排序、构建潜在对战并将玩家分配到团队,然后使用指定的玩家属性平衡对战游戏中的每个团队来构建对战游戏。例如,此策略可用于相等对战游戏中所有团队的平均技能级别。在使用此策略时,必须设置 balancedAttribute,并且 batchingPreference 应设置为“largestPopulation”或“fastestRegion”。大部分自定义规则类型无法识别为此策略。

必需? 是

batchingPreference

对对对战构建的票证进行分组之前要使用的预排序方法。对票证池进行预排序时,会导致根据特定特征对票证进行批处理,这往往会增加最终对战游戏中玩家之间的一致性。

允许的值:

  • “random”– 仅当 strategy = "exhausiveSearch" 时才有效。不会执行预排序;池中的票证会随机分批。这是详尽搜索策略的默认行为。

  • “sorted”– 仅当 strategy = "exhaustiveSearch" 时才有效。票证池根据 sortbyAttributes 中列出的玩家属性进行预排序。

  • “largestPopulation”– 只在 strategy =“balanced”时有效。票证池按玩家报告可接受的延迟级别的区域预先排序。这是平衡策略的默认行为。

  • “fastestRegion”– 只在 strategy =“balanced”时有效。票证池按玩家报告其最低延迟级别的区域预先排序。生成的对战游戏需要更长的时间才能完成,但所有玩家的延迟往往较低。

必需? 是

balancedAttribute

使用平衡策略构建大型对战游戏时使用的玩家属性的名称。

允许的值:在 playerAttributes 中声明并且 type =“number”的任何属性。

必需? 是,如果 strategy =“balanced”。

sortByAttributes

在批处理之前对票证池进行预排序时使用的玩家属性列表。此属性仅在使用详尽搜索策略进行预排序时使用。属性列表的顺序确定排序顺序。FlexMatch 对 Alpha 和数值使用标准排序约定。

允许的值:在 playerAttributes 中声明的任何属性。

必需? 是,如果 batchingPreference = "sorted"。

backfillPriority

用于匹配回填票证的优先级方法。此属性确定 FlexMatch 何时处理批处理中的回填票证。仅当使用详尽搜索策略进行预排序时使用。如果未设置此属性,则默认行为是“正常”。

允许的值:

  • “正常”– 构建对战游戏时,不考虑票证的请求类型(回填或新对战游戏)。

  • “高”– 票证批处理按请求类型(然后按期限)排序,FlexMatch 首先尝试匹配回填票证。

  • “低”– 票证批处理按请求类型(然后按期限)进行排序,FlexMatch 首先尝试匹配非回填票证。

必需? 否

expansionAgeSelection

计算对战规则扩展等待时间的方法。扩展用于在经过一定时间量后未完成对战游戏时放宽对战游戏要求。等待时间是根据已在部分填充的对战游戏中的票证的存在时间计算的。如果未设置此属性,则默认行为是“新”。

允许的值:

  • “最新”– 根据在部分完成的对战游戏中具有最新创建时间戳的票证来计算扩展等待时间。扩展触发的速度往往更慢,因为一个较新的票证可以重新启动等待时间时钟。

  • “最早”– 根据对战游戏中具有最早创建时间戳的票证计算扩展等待时间。扩展往往能更快地触发。

必需? 否

teams

对战游戏中的团队配置。为每个团队提供团队名称和规模范围。一个规则集必须定义至少一个团队。

name

团队的唯一名称。可以在规则和扩展中引用团队名称。在成功进行对战游戏时,玩家按对战数据中的团队名称分配。

允许的值:字符串

必需? 是

maxPlayers

可以分配给团队的玩家数量上限。

允许的值:数字

必需? 是

minPlayers

在对战游戏可行之前必须分配给团队的最小玩家数量。

允许的值:数字

必需? 是

quantity

要在对战游戏中创建的此类型的团队的数量。数量大于 1 的团队使用附加编号(“Red_1”、“Red_2”等)指定。如果未设置此属性,则默认值为“1”。

允许的值:数字

必需? 否

rules

定义如何为对战评估玩家的规则语句集合。

必需? 否

name

规则的唯一名称。规则集中的所有规则必须具有唯一的名称。规则名称在跟踪与规则相关的活动的 事件日志和指标中引用。

允许的值:字符串

必需? 是

description

规则的文本描述。此信息不用于对战过程。

允许的值:字符串

必需? 否

type

规则语句的类型。每个规则类型都有必须设置的其他属性。有关如何完全定义每种类型的规则的更多详细信息,请参阅FlexMatch 规则语言

允许的值:

  • “distance”– 测量数字值之间的距离。

  • “比较”– 比较两个值。

  • “集合”– 评估集合中的值,如集合的玩家属性或一组适用于多个玩家的值。

  • “延迟”– 评估为对战请求报告的区域延迟数据。

  • “distanceSort”– 根据具有数值的指定玩家属性与批次中最旧票证的比较方式,分批对票证进行排序的显式排序方法。

  • “absoluteSort”– 根据指定的玩家属性是否与批次中最旧的票证进行比较,对批次中的票证进行排序的显式排序方法。

必需? 是

expansions

在无法完成对战游戏时随着时间推移放宽对战游戏要求的规则。将扩展设置为一系列步骤,这些步骤将逐渐应用以使匹配项更易于查找。默认情况下,FlexMatch 根据添加到对战游戏的最新票证的期限计算等待时间。您可以使用算法属性 expansionAgeSelection 更改计算扩展等待时间的方式。

扩展等待时间是绝对值,因此每个步骤的等待时间应比上一步长。例如,要计划一系列逐步扩展,您可以使用 30 秒、40 秒和 50 秒的等待时间。等待时间不能超过对战请求允许的最大时间(在对战配置中设置)。

必需? 否

target

要放宽的规则集元素。您可以放宽团队大小属性或任何规则语句属性。语法为“<component name>rule/team name&gt;”。<property name> 例如,要更改团队最小规模,请执行以下操作:teams[Red, Yellow].minPlayers。 要在名为“minSkill”的比较规则语句中更改最低技能要求,请执行以下操作:rules[minSkill].referenceValue

必需? 是

steps
waitTimeSeconds

在为目标规则集元素应用新值之前等待的时间长度(以秒为单位)。

必需? 是

value

目标规则集元素的新值。