使用票证指定属性

根据玩家指定的属性,规则确定匹配哪些票证。 可通过两种方式指定这些属性:

  1. 在创建票证请求中
  2. 在玩家的实体中

本教程介绍如何指定这些属性。

在创建票证请求中指定

对于使用属性类型“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 区域的列表。