> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Specifying attributes with your tickets

> PlayFab マッチメイキング チケットにプレイヤーおよびチケット属性を付与して、キュー ルールがスキル、レイテンシ、その他の基準を評価できるようにする方法。

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

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

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

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

属性タイプが「User」で構成されているルールの場合、属性は `CreateMatchmakingTicket` 要求内で、プレイヤー エンティティと並んで属性 `DataObject` 内に指定されます。

```json theme={null}
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 を取得します。

```json theme={null}
"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
        }
    ]
}
```

<Note>
  ルールは JSON Path を使用して `DataObject` 内を移動できます。Path フィールドを "nestExample.exp" に置き換えると、上記で作成されたチケットに対してルールは値 1500 を使用します。
</Note>

## プレイヤー エンティティを通じて指定する

属性タイプが「Player Entity」のルールの場合、属性は `SetObjects` API への別の呼び出しを通じて指定されます。

これにより、タイトルが各チケット作成呼び出しで指定する必要がなくなり、ユーザーに対してデータを保存できます。ユーザーに対して永続化する値や、ユーザーが送信することを信頼できない値の場合、これはより理にかなうかもしれません。`SetObjects` 呼び出しの例を以下に示します。

```json theme={null}
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 を取得します。

<Note>
  `Path` フィールドでは、ルートの後の最初の項目が `ObjectName` であり、参照する格納されたオブジェクトを選択できます。
</Note>

```json theme={null}
"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 形式の値です。より複雑な属性を渡す必要があるルールを以下に示します。

### Region Selection ルール

Region Selection ルールは、指定されたスキーマを持つレイテンシ計測値の配列を必要とします。以下の例は、リージョン選択ルールで期待される属性の形式を示しています。比較のため、`CreateMatchmakingTicket` 要求の例で使用される 2 つの属性と並べて示しています。

```json theme={null}
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` フィールドを使用するルールの例を、以下のキューに含めています。

```json theme={null}
"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
        }
    ]
}
```

<Note>
  サーバー割り当てが有効になっているキューでリージョン選択ルールを使用する場合、リージョンは有効な Azure リージョンでなければなりません。有効な Azure リージョンのリストは [こちら](/services/playfab/api-references/events/data-types/azureregion) で確認できます。
</Note>


## Related topics

- [MatchmakingTicketMatchMember.AttributesJSON](/ja-jp/services/playfab/multiplayer/lobby/unity-multiplayer-api-reference/PlayFab.Multiplayer/MatchmakingTicketMatchMember/AttributesJSON.md)
- [MatchmakingTicketMatchMember](/ja-jp/services/playfab/multiplayer/lobby/unity-multiplayer-api-reference/PlayFab.Multiplayer/MatchmakingTicketMatchMember/overview.md)
- [XblMatchTicketDetailsResponse](/ja-jp/reference/live/xsapi-c/matchmaking_c/structs/xblmatchticketdetailsresponse.md)
- [XblMatchmakingCreateMatchTicketAsync](/ja-jp/reference/live/xsapi-c/matchmaking_c/functions/xblmatchmakingcreatematchticketasync.md)
- [Analyzing Your Matchmaking Queue Usage](/ja-jp/services/playfab/multiplayer/matchmaking/usage.md)
