Tutorial 3 - Host/Search MatchMaker

このチュートリアルでは、Diarkis の Host/Search 方式マッチメイキングを実装します。一方のクライアントがマッチングルームを「ホスト」し、他のクライアントがサーバーを検索して参加します。Tutorial 2 のチケット方式と対比しながら読むと理解が深まります。

終了時には以下のことが身についています:

  • HostMatchMaking() でマッチングルームをホストする方法

  • Search(joinFlag: true) でルームを検索して自動参加する方法

  • OnMMHostOnMMResultOnMMJoin を別々に処理する方法

  • ホストとして SendDisbandMatchmaking() でルームを解散する方法

  • メンバーとして SendLeaveMatchmaking() でルームから離脱する方法

  • MatchMakerHostSearchState に基づいてボタン状態を制御する方法

Tutorial 1 の接続フローが前提です。このシーンは Start() で自動接続します。

チケット方式との違い

項目
Ticket(Tutorial 2)
Host/Search(Tutorial 3)

ホストの概念

なし(サーバーが管理)

あり(クライアントが明示的に選択)

主なイベント

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 に移行します。

props はサーバー側のフィルタ条件です。ホスト側のプロパティが条件を満たすルームだけが返ります。joinFlag: true にすると最初のルームに自動参加して OnMMJoin が届きます。参加前に一覧を確認したい場合は joinFlag: false にしてください。

OnMMHost と OnMMJoin

Disband と Leave の違い

操作
メソッド
呼び出せる人
他メンバーに届くイベント

ルームを解散する

SendDisbandMatchmaking()

ホストのみ

OnMMDisband

ルームから離脱する

SendLeaveMatchmaking()

参加者(サーチャー)

OnMMMemberLeave

ホストが終了したいときは必ず 解散(Disband)を使います。ホストが離脱すると TTL まで空のルームがサーバーに残ってしまいます。

メンバーリストの更新

GetMembers(DiarkisMatchMakerType.HostSearch) はサーバーへのリクエストなしでローカルキャッシュからメンバー一覧を返します。

OnMMHostOnMMJoinOnMMMemberJoinOnMMMemberLeaveOnMMDisbandOnMMLeave から RefreshMemberList() を呼んで表示を最新に保ちます。

HostSearchState によるボタン制御

HostSearchState の 4 状態(None / Host / Search / MatchingRoomJoined)が UI 制御の唯一の基準です。

次のステップ

Tutorial 4 では Room を学びます — マッチング後にプレイヤーをグループ化してメッセージを交換するセッション空間です。

最終更新

役に立ちましたか?