View in English

  • メニューを開く メニューを閉じる
  • Apple Developer
検索
検索を終了
  • Apple Developer
  • ニュース
  • 見つける
  • デザイン
  • 開発
  • 配信
  • サポート
  • アカウント
次の内容に検索結果を絞り込む

クイックリンク

5 クイックリンク

ビデオ

メニューを開く メニューを閉じる
  • コレクション
  • トピック
  • すべてのビデオ
  • 利用方法

Tech Talksに戻る

ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。

  • 概要
  • トランスクリプト
  • Game Centerでのルールベースのマッチメイキング

    新しいルールベースのマッチメイキング機能をリアルタイムのマルチプレイヤーゲームに組み込む方法を紹介します。カスタマイズされた柔軟なマッチメイキングを提供し、プレイヤーのマッチの質を向上させ、すべてのプレイヤーにとってより楽しく魅力的な体験を生み出す方法を確認しましょう。

    リソース

    • App Store Connect API
    • Generating JSON Web Tokens for API requests
    • Matchmaking rules
    • Metrics
    • Python script to test your matchmaking rules using the App Store Connect API
      • HDビデオ
      • SDビデオ

    関連ビデオ

    Tech Talks

    • App Store Connect APIを利用したGame Centerの管理
  • このビデオを検索

    こんにちは Philip Smithです Game Center Services Teamで エンジニアをしています

    Game Centerのルールベースの新しい マッチメイキング機能について説明します

    この機能は ゲーム用のマッチメイキングを カスタマイズするものです これによりマッチの品質が向上し より魅力的で公平なゲーム体験が 実現します

    Game Centerのマッチメイキング機能の 概要から説明します この機能を使用すると リアルタイム マルチプレイヤーゲームのプレイヤーが ほかのプレイヤーを見つけて つながることができます さらにルールベースのマッチメイキングを 設定する方法を説明します

    始めます

    マッチメイキングを通じてプレイヤーに 楽しく魅力的な体験を提供できます プレイヤーを魅了できれば 長期間にわたって ゲームをプレイしてもらえます

    ゲームにはそれぞれ違いがあるため マッチメイキングの ユースケースも様々です

    独自のルールを備えた特別な ゲームモードを作成して パーソナライズされた ゲーム体験を提供したり

    スキルレベルや設定に基づいて プレイヤーをグループ化して 公平でバランスの取れた対戦を 実現したりできます

    これにより不満や退屈につながる ゲームのミスマッチを回避できます 一部のゲームモードでは チーム同士が対戦する場合があり バランスの取れたチームを編成して ゲーム体験が一方的に なることを避ける必要があります

    ほかにも パーティーコードを使用して 友人やより幅広いソーシャルグループに プライベートマッチを設定する ユースケースがあります しかし 対戦が決まるまでの 待ち時間が長いと プレイヤーの不満につながります したがって 待ち時間とマッチ品質の バランスを保つために 制約を緩和できることが重要です

    Game Centerの従来の マッチメイキングでも プレイヤーがリアルタイム マルチプレイヤーゲームで ほかのプレイヤーを見つけて つながることができます 一方 ルールベースのマッチメイキングでは より多くのことができます

    公平でバランスの取れた対戦のための カスタムルールを提供したり 時間に合わせて制約を緩和する 機能を提供したり ルールを簡単に更新して実際の 使用パターンに合わせたりできます

    マッチメイキングシステムの各部分が どのように連携するか見てみましょう

    Game Centerの従来の マッチメイキングシステムは プレイヤーのマッチ方法に関しては ブラックボックスです この例でAliceとBobは今すぐ プレイしたいと考えています ゲームはGameKitを通じて 対戦リクエストを送信します GameKit APIを使用すると ゲームは 対戦のリクエスト先を 同じプレイヤーグループ内に制限できます Game Centerがマッチを見つけると すぐにGameKitに通知され

    デバイス間でのリアルタイム接続の 作成が開始されます 本日はブラックボックスを開けて ルールベースのマッチメイキングの 詳細を説明します ゲームでプレイヤーの マッチング方法をカスタマイズし より良いプレイヤー体験を 実現できるでしょう

    App Store Connect APIを使用すると ゲームに最適なルールを設定できます ゲーム側では 対戦リクエストキューを 指定するためのAPIと ルールで使用する プレイヤーのカスタムプロパティが GameKit SDKを通じて提供されます

    Game Centerサービスでは ルールを使用してキュー内の リクエスト間のマッチを見つける アルゴリズムを定期的に実行します

    マッチが見つかるとGameKitに 通知され デバイス間のリアルタイム接続の作成が 開始されます

    ルールベースのマッチメイキングでは Game Centerが提供するマッチメイキング フレームワークを使用して ゲーム用にカスタマイズしたキューと ルールセットを設定できます 強力なルール言語を使用して マッチメイキングの制約を表現できます GameKitが提供するゲーム向けの 新しいAPIを使用すると ルールで使用するカスタムのプレイヤー プロパティを含めることができます またデベロッパツールを使用して サンプルリクエストでルールをテストしたり 実際の プレイヤー体験を理解するのに役立つ メトリックスを取得したりできます

    ルールベースのマッチメイキングを設定 テスト 観察する方法を説明します

    ルールベースのマッチメイキングを 設定するには6つの手順があります 1つずつ見ていきましょう 最初の手順はApp Store Connect APIを使用するための準備です

    ルールの設定には App Store Connect APIの RESTエンドポイントを 使用します これに 精通していれば簡単に理解できます APIにアクセスするには 組織のApp Store Connect アカウントを使用して プライベートAPIキーを 作成する必要があります APIの呼び出しには認証用の JSON Web Tokenが必要です App Store Connect APIの APIキーを作成する方法と 認証トークンを生成する方法については Apple Developerドキュメントを 参照してください 次に ルールセットを作成し ルールを追加して マッチメイキングをカスタマイズする 手順を説明します

    スキルベースのマッチメイキングを 検討するユースケースです スキルレベルの近いプレイヤーとの 対戦を提供すれば より良いゲーム体験につながります ただし 最大スキル差に厳しい条件を課すと 対戦が組まれるまでプレイヤーが 長時間待たされる可能性があります 待ち時間の経過に応じて最大スキル差を緩和し 待ち時間とスキル差のバランスを 調整できればゲーム体験が向上するでしょう ルールベースのマッチメイキングでは 時間の経過とともに制約を緩め マッチの質と待ち時間の バランスを確保できます この例ではキューにスキルレベルの異なる 3人のプレイヤーがいます このゲームの対戦に適しているのは スキル値の差が20以内の プレイヤーだとします 現時点ではこの制約を満たす プレイヤーはいません 5秒待ってから必要な最大スキル差を 40に拡張したいと思います するとスキルが20と45のプレイヤーが マッチすると考えられます

    ただしここで キルが45の プレイヤーが離脱して リクエストをキャンセルしたとすると 残りのプレイヤーでは対戦できません

    そこで再び スキル範囲を拡張します 例えば さらに5秒待ってから 最大スキル差を100まで拡張し プレイヤーが確実に対戦できるようにします これで対戦が組まれます プレイヤーは待たされましたが 対戦が組まれ ゲームを楽しむことができます 次回はきっとスキルが近いプレイヤーと 対戦できるでしょう 組織のルールセットとルールを 設定するには App Store Connect API エンドポイントを使用します ここではルールセットを設定するために gameCenterMatchmakingRuleSets エンドポイントを使用しました このゲーム用にSkillBasedRules というルールセットを作成しています

    ルールセットにルールを追加するために gameCenterMatchmakingRules エンドポイントを使用します このゲームには互換性のない 複数のアプリバージョンがあるため マッチには互換性のあるアプリバージョンを 必要とするルールも追加します

    遅延が小さいプレイヤーを優先する 別のルールを追加します 最後に 対戦するプレイヤーが 所定範囲のスキル値を 持つことを求めるルールを追加します リクエストの内容を詳しく説明します ここではまず ルールを含むルールセットを 作成し 参照名

    プレイヤーの最少人数 最大人数を渡します

    これらのプロパティはこのゲームに固有です ルールセットとキューは App Store Connectのプロバイダ組織に 関連付けられているため ゲームバンドルIDの逆引きドメイン名の プレフィックスを使用して ルールセット名の競合を回避することを お勧めします これが応答です 新しく作成した ルールセットのIDが含まれています これは後続のAPI呼び出しで ルールを追加し キューを作成するために必要です 次に gameCenterMatchmakingRules エンドポイントを使用して ルールを追加します ここではSkillDifferenceルールの 詳細だけを示します

    作成したルールセットにルールを追加し 最後の応答のIDを参照します ルールタイプをMatchにします

    説明を追加します

    ルールに名前を付けます

    最も重要なのは評価される式です

    式の構文にはオープンソースの JSONクエリ言語である JMESPathを使用します

    この式について少し説明します これは比較であり 左側の値が右側の値以下であるかを 確認しています

    左側はdiff関数で 現在の候補リクエストの最低スキルレベルと 最高スキルレベルの差を計算します 右側は固定値20です

    この式では最大スキル差が20の 対戦リクエストを要求しています この式は初期テストでは問題ありませんが 実際に使用すると一部のプレイヤーは 対戦まで長時間待つことになるでしょう

    リクエストの時間経過に応じて スキルの範囲を拡大し 適切な時間内にプレイヤーが 対戦を組まれ ゲームを楽しめることが必要です それには別の式が必要です

    ルールを更新するために gameCenterMatchmakingRules エンドポイントと PATCHメソッドを使用します

    この操作のURLとコンテンツには ルールのIDが必要です

    更新された説明と更新された式が

    含まれています 今度はより適切に機能するはずです

    式は複雑になっています

    左側の比較には変更がありません

    右側はagedValuesという関数になり 候補リクエストの平均経過時間に応じて スキルの範囲を拡大します 最初のパラメータは候補リクエストの 平均経過時間です

    次のパラメータは リクエストの経過時間が5秒未満の場合に 適用する初期スキル範囲20です

    次のパラメータは拡大した スキル範囲値の配列です 40は最初に拡大するスキル範囲を示し 経過時間が5秒以上10秒未満の場合に 適用します

    100は2回目に拡大するスキル範囲を示し 経過時間が 10秒以上の場合に適用します

    最後のパラメータはスキル範囲を 拡大する基準となる 経過時間の境界値の配列です 5秒と10秒に設定しています

    次に ルールセットをテストして 意図した通りに動作するか確認します

    App Store Connect APIの gameCenterMatchmakingRuleSetTestsは アプリと統合する前にルールのテストと 検証を行うために提供されています エンドポイントに必要な コンテンツは非常に冗長なため スクリプトを使用して 複雑さを隠すと便利です 入力がはるかにシンプルになり ルールをより効率的にテストできます

    この動画に関するリソースのリストを確認し Pythonスクリプトを ダウンロードしてください gameCenterMatchmakingRuleSetTests エンドポイントを含む App Store Connect APIの 使用方法の詳細は App Store Connect APIに関する Apple Developerドキュメントを 参照してください testrules Pythonスクリプトの 使用例を示します

    事前に作成したルールセットのIDを 使用してスクリプトを実行しています

    キューに3つのリクエストがあります 最初のリクエストはスキルが10で キューに入ったばかりです 2番目のリクエストはスキルが50で キューに入って5秒が経過しています 3番目のリスクエストはスキルが90で キューに入って10秒が経過しています 先ほど設定したルールでは 新しいリクエストの場合には スキル差が20以下 5秒以上キューに入っている リクエストの場合には スキル差40以下を要求していました 最初と2番目のリクエストは マッチするでしょうか スキル差が 20を上回るためマッチしません 2番目と3番目のリクエストは マッチするでしょうか スキル差が40ですが キューに入ってから 5秒経過しているのでマッチします 出力は2番目と3番目のリクエストが マッチしたことを示しているため ルールは期待どおりに機能しています

    もちろん その他のテストケースも実行して ルールが適切であることを 確認する必要があります

    次の手順はリクエストの キューを設定することです

    設定を中断した場所を思い出してください ルールセットとルールを作成しました ルールをテストしたところ 期待どおりに機能しています そこで gameCenterMatchmakingQueues エンドポイントを使用して ルールセットに関連付けられた アプリリクエストのキューを作成します ここではそれをSkillQueueと呼びます

    作成したルールセットに 関連付けられたキューを 作成するために必要なコンテンツを 詳しく説明します ルールセットIDを参照し キューに適切な名前を付けます ルールセット名と同様に 逆引きドメイン名のプレフィックスを キュー名に使用します

    マッチメイキングルールに関する App Store Connect APIの 設定は以上です 次に ルールベースのマッチメイキングと 統合するにあたって アプリに追加するコードについて説明します

    既存のGameKitフレームワーククラスの GKMatchRequestとGKMatchを 使用します

    これらにはルールベースの マッチメイキングをサポートするための 新しいオブジェクトプロパティ queueNameとpropertiesが含まれています

    GKMatchRequestオブジェクトを 作成するコードをアプリに追加します また スキルレベルキューと プレイヤーを見つけるための 一連のルールを使用するために マッチメイキングルールの プロパティを設定します

    キュー名のプロパティは 以前に作成した キューの参照名に設定します GKMatchRequestの リクエストプロパティを ルールの式で使用する値を提供する キーと値のペアの辞書に設定します ここでのルールでは ローカルプレイヤーのスキル値に 1つのプロパティのみを使用します

    GKMatchmakerメソッドを使用して 対戦リクエストを送信し ユーザーインターフェイスを 表示せずにマッチを見つけます または GKMatchmakerビューを表示して マッチを見つけることもできます

    最後の手順はマッチメイキングルールが 実際のプレイヤーに対してどのように 機能するかの観察です

    App Store Connect APIの メトリックスエンドポイントを使用して マッチメイキングルールの 問題を診断できます メトリックスには結果ごとの リクエスト数が含まれます 結果はマッチ キャンセル または期限切れです さらに 結果に至るまでの時間 キュー内のアクティブなリクエストの数 ルール評価のエラーと結果に関する メトリックスもあります これらのメトリックスデータを 取得する時間粒度は 8時間に対して15分単位 24時間に対して1時間単位 または 30日間に対して1日単位に設定できます

    Game Centerがマッチを見つけるのに 時間がかかりすぎる場合や マッチを見つけられない場合は Apple Developerドキュメントの記事 「メトリックスを使用した マッチメイキングルールのトラブル シューティング」を参照してください

    この例のクエリは リクエストのキュー内の カウントと時間を1日の粒度で 返します 応答には日時範囲とメトリックス値を持つ データポイントが含まれます スクリプトを使用すると 応答データをグラフに変換して マッチメイキングルールがプレイヤーに対して どの程度うまく機能しているかを 確認できます

    ルールベースのマッチメイキングに 関する新しい情報は以上です

    この新機能は現在利用可能です この素晴らしい新機能をご活用ください

    各機能の使用方法については Apple Developerドキュメントを 参照してください

    皆さまからのフィードバックを お待ちしています Game Centerの機能に関する ご要望がありましたら Appleのフィードバックアシスタントを 通じてお知らせください ご視聴ありがとうございました

Developer Footer

  • ビデオ
  • Tech Talks
  • Game Centerでのルールベースのマッチメイキング
  • メニューを開く メニューを閉じる
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    メニューを開く メニューを閉じる
    • アクセシビリティ
    • アクセサリ
    • App Extension
    • App Store
    • オーディオとビデオ(英語)
    • 拡張現実
    • デザイン
    • 配信
    • 教育
    • フォント(英語)
    • ゲーム
    • ヘルスケアとフィットネス
    • アプリ内課金
    • ローカリゼーション
    • マップと位置情報
    • 機械学習
    • オープンソース(英語)
    • セキュリティ
    • SafariとWeb(英語)
    メニューを開く メニューを閉じる
    • 英語ドキュメント(完全版)
    • 日本語ドキュメント(一部トピック)
    • チュートリアル
    • ダウンロード(英語)
    • フォーラム(英語)
    • ビデオ
    Open Menu Close Menu
    • サポートドキュメント
    • お問い合わせ
    • バグ報告
    • システム状況(英語)
    メニューを開く メニューを閉じる
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles(英語)
    • フィードバックアシスタント
    メニューを開く メニューを閉じる
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(英語)
    • News Partner Program(英語)
    • Video Partner Program(英語)
    • セキュリティ報奨金プログラム(英語)
    • Security Research Device Program(英語)
    Open Menu Close Menu
    • Appleに相談
    • Apple Developer Center
    • App Store Awards(英語)
    • Apple Design Awards
    • Apple Developer Academy(英語)
    • WWDC
    Apple Developerアプリを入手する
    Copyright © 2025 Apple Inc. All rights reserved.
    利用規約 プライバシーポリシー 契約とガイドライン