マッチメイキングルール
Create rules that control how players are matched together based on their custom data and Quality of Service results.
読み終わるまでの所要時間 4 分最終更新 4日前
Rule (ルール) は、論理的な目標追求動作を記述する一般的な方法です。ルールは、マッチメイキングのロジックの異なるレベル - マッチレベルとチームレベル - に適用されます。マッチレベル のルールは、それらが定義されているマッチの妥当性を確保するためのもので、チームレベル のルールは、それらが定義されているチームの妥当性を確保するためのものです。
ルールのフォーマット
{ "Type": "RuleType", "Source": "SourcePath", "Not": true/false, "EnableRule": true/false, "Relaxations": [ { Relaxation1, Relaxation2 } ]}
フィールド | 必須 | 型 | 説明 |
|---|---|---|---|
| Type (タイプ) | はい | string | 適用するルール。サポートされているルール の表 (下記) を参照してください。 |
| Source (ソース) | はい | string | データソースパス。サポートされているデータソース を参照してください。 |
| リファレンス | いいえ | string、number または array* | 比較対象となる参照。あらゆるルールで使用されるわけではありません。*有効な参照の型は、ルールのタイプによって異なります。 |
| Not | いいえ | Boolean | true に設定すると、ルールが逆になります。指定しなかった場合は false になります。 |
| EnableRule (ルールを有効にする) | いいえ | Boolean | false に設定すると、ルールが無効になります。指定しなかった場合は true になります。これは通常、緩和によってルールを無効または有効にするために使用されます。 |
| Relaxations (緩和) | いいえ | List<Relaxations> | 適用する緩和のリスト。ルールの緩和と発動 に関するセクションを参照してください。 |
サポートされているルール
ルール | 入力 | 説明 |
|---|---|---|
| Difference (差) | Source:List<number> Reference:Number | リスト内のすべての値の差が特定の距離内であることを求めるルール。 |
| Equality (等値) | Source:List<string または number> Reference: string または number* | リスト内のすべての値が等しいことを求めるルール。 *参照は、ソースで定義された入力型です。 |
| LessThan (より小さい) | Source:Number Reference:Number | ソース値が参照値よりも小さいことを求めるルール。 |
| LessThanEqual (以下) | Source:Number Reference:Number | ソース値が参照値よりも小さいか、または等しいことを求めるルール。 |
| GreaterThan (より大きい) | Source:Number Reference:Number | ソース値が参照値よりも大きいことを求めるルール。 |
| GreaterThanEqual (以上) | Source:Number Reference:Number | ソース値が参照値よりも大きいか、または等しいことを求めるルール。 |
| InList (リスト内) | Source: string または number Reference:List<string または number> | ソース値が参照リスト内にあることを求めるルール。 *参照は、ソースで定義された入力型です。 |
| Intersection (交差) | Source:List<List<string または number>> Overlap:Number | 特定のリストの一覧に、指定されたオーバーラップ数の最小交差が存在することを求めるルール。 |
サポートされているデータソース
全プレイヤーのデータ
チケット内の各プレイヤーによって定義されたカスタムデータには、Players.CustomData.{your_custom_field_name}全プレイヤーの QoS
チケット内の各プレイヤーの QoS (Quality of Service) データには、Players.QoSResults.LatencyPlayers.QoSResults.PacketLossLeaderboards
サーバーが権威を持つマッチメイキングは、Unity Leaderboards とのインテグレーションによりサポートされます。 各プレイヤーのリーダーボードデータには、Players.CustomData.ExternalData.Leaderboard.ScorePlayers.CustomData.ExternalData.Leaderboard.TierIdExternalData受信するチケットには、利用可能なリーダーボードデータが自動で追加され、そのデータは、定義されているルールに従って評価されます。定義されているリーダーボードに関連するデータを持っていないプレイヤーは、スコアが 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サポートされているデータ操作
マッチメイキングチケット内のプレイヤーカスタムデータで指定された一部の入力については、それらに対するルールを作成するための操作がサポートされています。操作 | 入力 | 出力 | 説明 |
|---|---|---|---|
| Count (数) | List<*> | Number | 指定されたリスト内の要素の数を取得します。*任意の型が有効です (string、bool、list、number など)。 |
| Median (中央値) | List<Number> | Number | 指定されたリスト内の数値の中央値を取得します。 |
| Avg (平均) | List<Number> | Number | 指定されたリスト内の数値の平均値を取得します。 |
| Sum (合計) | List<Number> | Number | 指定されたリスト内の数値の合計値を取得します。 |
| Min (最小) | List<Number> | Number | 指定された数値のリストから最小の数値を取得します。 |
| Max (最大) | List<Number> | Number | 指定された数値のリストから最大の数値を取得します。 |
例
以下に示すのは、Skill フィールドへのアクセスの例です。以下に示すのは、マッチ/チームのすべてのプレイヤーのスキルの平均を計算する例です。{ ..."Source": "Players.CustomData.Skill"... }
{ ..."Source": "Players.CustomData.Skill.Avg"... }
サポートされているルールの例
Difference (差)
以下の例では、ルールがどこに配置されているか (マッチレベルかチームレベルか) に応じて、マッチまたはチーム内のすべてのプレイヤーのスキルの差が 200 ポイント以内であることが確認されます。{ "Type": "Difference", "Source": "Players.CustomData.Skill", "Reference": 200 // Valid types: number}
Equality (等値)
以下の例では、チームレベルのルールによって、Monster チーム のすべてのプレイヤーがこのチームを選択したことが確認されます。以下の例では、マッチレベルのルールによって、マッチ内のすべてのプレイヤーが同じパスワードを使用していることが確認されます。{ "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 (以下)
以下の例では、チームレベルのルールによって、各チームに最大 2 人のメディックがいることが確認されます。{ "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 (リスト内)
以下の例では、チームレベルのルールによって、モンスターキャラクターが選択された場合にプレイヤーが Monster チームに配置されることが確認されます。{ "Type": "InList", "Source": "Players.CustomData.ChosenCharacter", "Reference": [ "Monster1", "Monster2", "Monster3" ] // Valid types: List<string> or List<number>}
Intersection (交差)
以下の例では、マッチレベルのルールによって、マッチ内のすべてのプレイヤーが好みのマップを少なくとも 3 つ共通で持っていることが確認されます。以下の例では、マッチレベルルールによって、マッチ内のすべてのプレイヤーが参照リスト内のアイテムの少なくとも 1 つを持っていることが確認されます。{ "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
以下の例では、チームレベルルールによって、チーム内のすべてのプレイヤーが、ロックが解除されていないマップを少なくとも 1 つ共通で持っていることが確認されます。プレイヤーが 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 }]