匹配规则
Create rules that control how players are matched together based on their custom data and Quality of Service results.
阅读时间8 分钟最后更新于 15 天前
规则泛指一种符合逻辑的目标追寻行为。规则适用于不同级别的匹配逻辑:匹配级别和队伍级别。匹配级别规则可确保所定义匹配的有效性,而队伍级别规则可确保所定义队伍的有效性。
规则格式
{ "Type": "RuleType", "Source": "SourcePath", "Not": true/false, "EnableRule": true/false, "Relaxations": [ { Relaxation1, Relaxation2 } ]}
字段 | 必填 | 类型 | 描述 |
|---|---|---|---|
| 类型 | 是 | 字符串 | 要应用的规则。请参阅下方的支持的规则表。 |
| 来源 | 是 | 字符串 | 数据源路径。请参阅支持的数据源。 |
| 参考 | 否 | 字符串、数字或数组* | 供比较的参考。并非供所有规则使用。*有效引用类型取决于规则类型。 |
| 非 | 否 | 布尔值 | 如果被设置为 true,则会将规则反转。如未提供,则默认为 false。 |
| EnableRule | 否 | 布尔值 | 如果被设置为 false,则会禁用规则。如未提供,则默认为 true。该值通常用于禁用或启用规则放宽。 |
| 放宽 | 否 | 列表<放宽> | 要应用的放宽列表。请参阅规则放宽和触发器。 |
支持的规则
规则 | 输入 | 描述 |
|---|---|---|
| 差值 | 来源:列表<数字> 参考:数字 | 确保列表中所有值的差值不会超出特定范围。 |
| 均等 | 来源:列表<字符串或数字> 参考:字符串或数字* | 确保列表中的所有值相等。 *参考是来源中定义的输入类型。 |
| LessThan | 来源:数字 参考:数字 | 确保来源值小于参考值。 |
| LessThanEqual | 来源:数字 参考:数字 | 确保来源值小于等于参考值。 |
| GreaterThan | 来源:数字 参考:数字 | 确保来源值大于参考值。 |
| GreaterThanEqual | 来源:数字 参考:数字 | 确保来源值大于等于参考值。 |
| InList | 来源:字符串或数字 参考:列表<字符串或数字> | 确保来源值位于参考列表中。 *参考是来源中定义的输入类型。 |
| 交集 | 来源:列表<列表<字符串或数字>> 重叠:数字 | 确保给定列表包含所提供重叠数字的最小交集。 |
支持的数据源
所有玩家的数据
由工单中各位玩家自定义的数据可依据规则使用Players.CustomData.{your_custom_field_name}所有玩家的 QoS
工单中各玩家的服务质量数据可依据规则使用Players.QoSResults.LatencyPlayers.QoSResults.PacketLossLeaderboards
通过与 Unity Leaderboards 集成可以支持服务器权威匹配。 各玩家的排行榜数据可依据规则使用Players.CustomData.ExternalData.Leaderboard.ScorePlayers.CustomData.ExternalData.Leaderboard.TierExternalDataId任何可用的排行榜数据都将自动附加到传入的工单,并将根据定义的规则进行处理。如果玩家没有已定义的排行榜的数据,此玩家在添加到该排行榜时将具有分数 0。 未启用等级的排行榜与使用等级的规则不兼容。所有进入该池的工单都将无法匹配。"ExternalData": { "Leaderboard": { "Id": "my-leaderboard" }}
Cloud Save
通过与 Unity Cloud Save 集成也可以支持服务器权威匹配。 各玩家的 Cloud Save 数据可依据规则使用Players.CustomData.ExternalData.CloudSave.{cloud_save_data_path}{cloud_save_data_path}Cloud Save 键 | Cloud Save 项 | 数据路径 | 检索到的值 |
|---|---|---|---|
| Skill | 500 | Skill | 500 |
| Maps | | Maps | |
| Inventory | | Inventory.Apples | 10 |
ExternalData访问类指示应从哪里检索玩家数据。同一个键可能会针对不同的访问类存储不同的项。如果没有提供访问类,则将默认为"ExternalData": { "CloudSave": { "AccessClass": "Protected", "Default": 0 }}
Protected支持的数据运算
匹配工单中针对玩家自定义数据提供的某些输入支持通过运算来创建规则。运算 | 输入 | 输出 | 描述 |
|---|---|---|---|
| 计数 | 列表<*> | 数字 | 获取所提供列表中元素的数量。*任何类型都有效,例如:字符串、布尔值、列表和数字。 |
| 中位数 | 列表<数字> | 数字 | 获取所提供列表中数字的中位数。 |
| 平均值 | 列表<数字> | 数字 | 获取所提供列表中数字的平均值。 |
| 求和 | 列表<数字> | 数字 | 获取所提供列表中数字的总和。 |
| 最小值 | 列表<数字> | 数字 | 获取所提供数字列表中的最小值。 |
| 最大值 | 列表<数字> | 数字 | 获取所提供数字列表中的最大值。 |
示例
以下示例将介绍如何访问 **Skill(技能)**字段:以下示例将介绍如何为匹配/队伍中所有玩家的技能点数求平均值。{ ..."Source": "Players.CustomData.Skill"... }
{ ..."Source": "Players.CustomData.Skill.Avg"... }
支持的规则示例
差值
在以下示例中,根据规则的应用方向(匹配级别或队伍级别),同一匹配或队伍中的所有玩家相互之间的技能点数差值不超过 200。{ "Type": "Difference", "Source": "Players.CustomData.Skill", "Reference": 200 // Valid types: number}
均等
在以下示例中,队伍级别的规则可确保怪兽队伍中的所有玩家都选择此队伍:在以下示例中,匹配级别的规则可确保匹配中的所有玩家使用相同密码:{ "Type": "Equality", "Source": "Players.CustomData.SelectedTeam", "Reference": "Monster" // Valid types: string or number}
在以下示例中,匹配级别的规则可确保匹配中的所有玩家处于相同技能段位:{ "Type": "Equality", "Source": "Players.CustomData.Password" }
{ "Type": "Equality", "Source": "Players.Custom.SkillBracket" }
LessThanEqual
在以下示例中,队伍级别的规则可确保每个队伍最多拥有两个医疗兵:{ "Type": "LessThanEqual", "Source": "Players.CustomData.PreferMedic.Count", "Reference": 2 // Valid types: number}
GreaterThanEqual
在以下示例中,匹配级别的规则可确保匹配中所有玩家的技能点数至少为 500:{ "Type": "GreaterThanEqual", "Source": "Players.CustomData.Skill", "Reference": 500 // Valid types: number}
InList
在以下示例中,队伍级别的规则可确保玩家选择怪物角色后会被分配到怪物队伍:{ "Type": "InList", "Source": "Players.CustomData.ChosenCharacter", "Reference": [ "Monster1", "Monster2", "Monster3" ] // Valid types: List<string> or List<number>}
交集
在以下示例中,匹配级别的规则可确保匹配中的所有玩家至少拥有三个共同首选地图:在以下示例中,匹配级别的规则可确保匹配中的所有玩家至少拥有参考列表中的一项:{ "Type": "Intersection", "Source": "Players.CustomData.PreferredMaps", "Overlap": 3 }
{ "Type": "Intersection", "Source": "Players.CustomData.Items", "Overlap": 1, "Reference": [ "PluePill", "RedPill" ] // Valid types: List<string> or List<number>}
排行榜
在以下示例中,队伍级别的规则可确保队伍中所有玩家的排行榜分数彼此相差在 300 分以内。在以下示例中,匹配级别的规则可确保匹配中的所有玩家必须处于相同排行榜等级。"TeamRules": [ { "Name": "Score", "Type": "Difference", "Source": "Players.CustomData.ExternalData.Leaderboard.Score", "ExternalData": { "Leaderboard": { "Id": "my-leaderboard" } }, "Reference": 300, "Not": false, "EnableRule": true }]
"MatchRules": [ { "Name": "Tier", "Type": "Equality", "Source": "Players.CustomData.ExternalData.Leaderboard.Tier", "ExternalData": { "Leaderboard": { "Id": "my-leaderboard" } }, "Not": false, "EnableRule": true }]
Cloud Save
在以下示例中,队伍级别的规则可确保队伍中的所有玩家至少有一张共同的解锁地图。如果玩家在 Cloud Save 中没有键为Maps["starter"]"TeamRules": [ { "Name": "Unlocked Maps", "Type": "Intersection", "Source": "Players.CustomData.ExternalData.CloudSave.Maps.Unlocked", "ExternalData": { "CloudSave": { "AccessClass": "Protected", "Default": ["starter"] } }, "Not": false, "EnableRule": true, "Overlap": 1 }]