Tutorial 3 - Host/Search MatchMaker
このチュートリアルでは、Diarkis の Host/Search 方式マッチメイキングを実装します。一方のクライアントがマッチングルームを「ホスト」し、他のクライアントがサーバーを検索して参加します。Tutorial 2 のチケット方式と対比しながら読むと理解が深まります。
終了時には以下のことが身についています:
HostMatchMaking()でマッチングルームをホストする方法Search(joinFlag: true)でルームを検索して自動参加する方法OnMMHost、OnMMResult、OnMMJoinを別々に処理する方法ホストとして
SendDisbandMatchmaking()でルームを解散する方法メンバーとして
SendLeaveMatchmaking()でルームから離脱する方法MatchMakerHostSearchStateに基づいてボタン状態を制御する方法
Tutorial 1 の接続フローが前提です。このシーンは Start() で自動接続します。
チケット方式との違い
ホストの概念
なし(サーバーが管理)
あり(クライアントが明示的に選択)
主なイベント
OnMMTicketJoin / OnMMTicketComplete
OnMMHost / OnMMJoin
状態の型
MatchMakerTicketState
MatchMakerHostSearchState
ルーム検索
不要
Search() で検索
向いているケース
対等なマッチング
ロビー方式・ルームブラウザ
仕組み
状態遷移
シーンのセットアップ
Tutorials/Scenes/Tutorial3-HostSearchMatchMaker.unity を開き、定数を環境に合わせて変更してください。
マッチング条件も必要に応じて変更できます。
Play モードに入るとシーンが自動接続します。Network State ラベルが緑色になったら、一方のクライアントで Host、もう一方で Search を押してください。
コードの解説
MatchMaker モジュールの取得
Tutorial 2 と同じパターンです。
イベントの登録
このチュートリアルで登録するイベントの一覧です。
OnMMHost
HostMatchMaking() が成功してルームが作成された
Action<DiarkisMMHostEventArgs>
OnMMResult
Search() の結果が返ってきた
Action<DiarkisMMResultEventArgs>
OnMMJoin
Search(joinFlag=true) による自動参加が完了した
Action<DiarkisMMJoinResponseEventArgs>
OnMMMemberJoin
他のメンバーがルームに参加した
Action<DiarkisMMJoinEventArgs>
OnMMMemberLeave
メンバーがルームから離脱した
Action<DiarkisMMLeaveEventArgs>
OnMMDisband
ホストがルームを解散した
Action<DiarkisMMDisbandEventArgs>
OnMMLeave
自分がルームから離脱した
Action<DiarkisMMLeaveEventArgs>
OnDestroy での UnregisterCallbacks(this) はお忘れなく。オーナーパターンの詳細は Tutorial 1 を参照してください。
HostMatchMaking()
成功すると OnMMHost が届き、ルーム ID を取得できます。状態は MatchMakerHostSearchState.Host に移行します。
Search()
props はサーバー側のフィルタ条件です。ホスト側のプロパティが条件を満たすルームだけが返ります。joinFlag: true にすると最初のルームに自動参加して OnMMJoin が届きます。参加前に一覧を確認したい場合は joinFlag: false にしてください。
OnMMHost と OnMMJoin
Disband と Leave の違い
ルームを解散する
SendDisbandMatchmaking()
ホストのみ
OnMMDisband
ルームから離脱する
SendLeaveMatchmaking()
参加者(サーチャー)
OnMMMemberLeave
ホストが終了したいときは必ず 解散(Disband)を使います。ホストが離脱すると TTL まで空のルームがサーバーに残ってしまいます。
メンバーリストの更新
GetMembers(DiarkisMatchMakerType.HostSearch) はサーバーへのリクエストなしでローカルキャッシュからメンバー一覧を返します。
OnMMHost、OnMMJoin、OnMMMemberJoin、OnMMMemberLeave、OnMMDisband、OnMMLeave から RefreshMemberList() を呼んで表示を最新に保ちます。
HostSearchState によるボタン制御
HostSearchState の 4 状態(None / Host / Search / MatchingRoomJoined)が UI 制御の唯一の基準です。
次のステップ
Tutorial 4 では Room を学びます — マッチング後にプレイヤーをグループ化してメッセージを交換するセッション空間です。
最終更新
役に立ちましたか?

