チケットで属性を指定する

ルールは、プレイヤーによって指定された属性に基づいて、どのチケットがマッチするかを決定します。 これらの属性を指定するには、次の 2 つの方法があります。

  1. チケット作成要求内
  2. プレイヤーのエンティティ内

このチュートリアルでは、これらの属性を指定する方法について説明します。

チケット作成要求内で指定する

属性タイプ「User」で設定されたルールの場合、属性 DataObject 内のプレイヤー エンティティと並んで、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,
                "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 を使用します。

プレイヤーのエンティティを指定する

属性タイプが "プレイヤー エンティティ" のルールの場合、属性は 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"
    }
}

次の設定のキューは、このプレイヤーでチケットが作成された場合に、DifferenceRule ルールで使用するために値 16.0 を取得します。

注意

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 要求の例で使用されている 2 つの属性と一緒に表示される、地域選択ルールに予想される属性フォーマットです。

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 リージョンの一覧については、ここをご覧ください。