使用票证指定属性
根据玩家指定的属性,规则确定匹配哪些票证。 可通过两种方式指定这些属性:
- 在创建票证请求中
- 在玩家的实体中
本教程介绍如何指定这些属性。
在创建票证请求中指定
对于使用属性类型“User”配置的规则,属性在 CreateMatchmakingTicket
请求连同属性 DataObject
内的玩家实体一同加以指定。
POST https://{{TitleId}}.playfabapi.com/Match/CreateMatchmakingTicket
{
"Creator": {
"Entity": {
"Id": "A8140AB9109712B",
"Type": "title_player_account",
"TypeString": "title_player_account"
},
"Attributes": {
"DataObject": {
"mu": 16.0,
"sigma": 1.8,
"nestExample": {
"exp": 1500
}
}
}
},
"MembersToMatchWith": [],
"GiveUpAfterSeconds": 2,
"QueueName": "SkillRuleQueue"
}
下面是使用 DifferenceRule
的示例队列配置。 此规则包含一个属性路径以及将获取由以上 CreateMatchmakingTicket
请求指定的值 16.0 的源。
"MatchmakingQueue": {
"Name": "SkillRuleQueue",
"MinMatchSize": 2,
"MaxMatchSize": 2,
"ServerAllocationEnabled": false,
"Rules": [
{
"Type": "DifferenceRule",
"Difference": 3,
"MergeFunction": "Average",
"Attribute": {
"Path": "mu",
"Source": "User"
},
"AttributeNotSpecifiedBehavior": "MatchAny",
"Weight": 1,
"Name": "SkillRule",
"SecondsUntilOptional": 10
}
]
}
注意
规则可使用 JSON 路径在 DataObject
中导航。 将 Path 字段替换为“nestExample.exp”会导致此规则将值 1500 用于以上创建的票证。
通过玩家实体指定
对于属性类型为“Player Entity”的规则,通过对 SetObjects
API 的单独调用来指定属性。
这样可为用户存储数据,而不是为需要在每次创建票证调用时均指定它的游戏存储数据。
对于持续用于用户的值或者无法信任用户提交的值,这可能变得更有意义。 下面是此 SetObjects
调用的示例。
POST https://{{TitleID}}.playfabapi.com/Object/SetObjects
{
"Objects": [
{
"ObjectName": "playerSkill",
"DataObject": {
"skillDetail": {
"mu": 16.0,
"sigma": 2.0
}
}
}
],
"Entity": {
"Id": "A8140AB9109712B",
"Type": "title_player_account",
"TypeString": "title_player_account"
}
}
当使用此玩家创建票证时,具有以下配置的队列将检索值 16.0,以便用于其 DifferenceRule
规则。
注意
在 Path
字段中,根后的第一个项是 ObjectName
,这样您可以选择要引用的存储对象。
"MatchmakingQueue": {
"Name": "PlayerEntityRuleQueue",
"MinMatchSize": 2,
"MaxMatchSize": 2,
"ServerAllocationEnabled": false,
"Rules": [
{
"Type": "DifferenceRule",
"Difference": 1,
"MergeFunction": "Average",
"Attribute": {
"Path": "$.playerSkill.skillDetail.mu",
"Source": "PlayerEntity"
},
"AttributeNotSpecifiedBehavior": "MatchAny",
"Weight": 1,
"Name": "SkillRule",
"SecondsUntilOptional": 10
}
]
}
特殊格式
大多数规则使用字符串或数字属性,并且这些属性仅为采用 JSON 格式的那些值。 下面列出了需要传入更复杂属性的规则。
区域选择规则
区域选择规则需要采用指定架构的一系列延迟度量。 下面的示例是区域选择规则的预计属性格式,另外还有 CreateMatchmakingTicket
请求示例中使用的两个属性,以便进行比较。
POST https://{{TitleId}}.playfabapi.com/Match/CreateMatchmakingTicket
{
"Creator": {
"Entity": {
"Id": "A8140AB9109712B",
"Type": "title_player_account",
"TypeString": "title_player_account"
},
"Attributes": {
"DataObject": {
"mu": 16.0,
"sigma": 1.8,
"Latencies": [
{
"region": "EastUs",
"latency": 150
},
{
"region": "WestUs",
"latency": 400
}
]
}
}
},
"MembersToMatchWith": [],
"GiveUpAfterSeconds": 2,
"QueueName": "ServerEnabledQueue"
}
在此示例中,Latencies
必须与规则中 Path
字段引用的字段相匹配。 将使用 Latencies
字段的规则示例包含在以下队列中。
"MatchmakingQueue": {
"Name": "ServerEnabledQueue",
"MinMatchSize": 2,
"MaxMatchSize": 2,
"ServerAllocationEnabled": true,
"BuildId": "88b3e315-829c-4b6d-9872-74f427ad5331",
"Rules": [
{
"Type": "RegionSelectionRule",
"MaxLatency": 1000,
"Path": "Latencies",
"Weight": 1,
"Name": "RegionRule",
"SecondsUntilOptional": 60
}
]
}
注意
在将该区域选择规则用于已启用了服务器分配的队列时,这些区域必须是有效的 Azure 区域。 您可以在此处找到有效 Azure 区域的列表。