Tutorial 4 - Room

このチュートリアルでは、Diarkis の Room 機能を実装します。Room はゲームセッションの基本単位であり、プレイヤーをグループ化してメッセージの交換を可能にします。マッチメイキング後に移行する先として一般的に使われます。

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

  • DiarkisInterface から DiarkisRoom モジュールを取得する方法

  • SendJoinRandomRoom でランダムなルームに参加(なければ作成)する方法

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

  • ルーム内全員にブロードキャストメッセージを送る方法

  • GetRoomMembers() でメンバーリストを最新状態に保つ方法

  • ルームから退出する方法

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

Room とは

Room は最大人数と TTL(有効時間、秒単位)を持つ仮想空間です。メンバー同士が自由にメッセージを交換できます。

SendJoinRandomRoom() は参加可能なルームがあればそこに入室し、なければ新規作成します。結果は OnRoomCreation(新規作成)または OnRoomJoin(既存参加)で届きます。

シーンのセットアップ

Tutorials/Scenes/Tutorial4-Room.unity を開き、定数を環境に合わせて変更してください。

Play モードに入るとシーンが自動接続します。Network State ラベルが緑色になったら Join Room ボタンが有効になります。

コードの解説

Room モジュールの取得

Tutorial 2・3 の diarkis.MatchMaker と同じパターンです。

イベントの登録

このチュートリアルで登録するイベントの一覧です。

イベント
発火タイミング
コールバックシグネチャ

OnRoomCreation

新規ルームを作成した(最初のメンバー)

Action<DiarkisRoomCreationEventArgs>

OnRoomJoin

既存ルームに参加した

Action<DiarkisRoomJoinEventArgs>

OnRoomMemberJoin

他のメンバーがルームに参加した

Action<DiarkisRoomMemberJoinEventArgs>

OnRoomMemberLeave

メンバーがルームから退出した

Action<DiarkisRoomMemberLeaveEventArgs>

OnRoomLeave

自分がルームから退出した

Action<DiarkisRoomLeaveEventArgs>

OnRoomMemberBroadcast

ブロードキャストメッセージを受信した

Action<DiarkisPayloadEventArgs>

OnDestroy での UnregisterCallbacks(this) はお忘れなく。オーナーパターンの詳細は Tutorial 1 を参照してください。

SendJoinRandomRoom()

allowEmpty: true にすると、空のルームにも参加します。結果は OnRoomCreation または OnRoomJoin で届きます。

OnRoomCreation と OnRoomJoin の違い

発火状況と取得できるデータが異なります。

注意: OnRoomCreation 内では _room.RoomID ではなく args.GetRoomID() でルーム ID を取得してください。コールバック時点でモジュールの内部状態がまだ更新されていない場合があります。

メンバーリストの更新

DiarkisMatchMaker と異なり、DiarkisRoom には GetRoomMembers() というローカルキャッシュから即時にメンバー一覧を返すメソッドがあります。サーバーへのリクエストは不要です。

OnRoomMemberJoinOnRoomMemberLeaveOnRoomJoinOnRoomCreation から RefreshRoomUI() を呼ぶことで表示を常に最新に保ちます。

ブロードキャスト — 送信と受信

SendBroadcastToRoom は送信者以外の全メンバーにメッセージを届けます。送信者自身の画面に表示するには AddChatLine を直接呼びます。ペイロードに UID を含めることで受信側が送信者を識別できます。

reliable: true は TCP 相当の信頼性保証付き送信です。位置同期など多少のロストが許容できる高頻度更新には false を使います。

ボタン状態の管理

_room.IsJoin() が「現在ルームに参加しているか」の唯一の判断基準です。

Room と MatchMaker を組み合わせる

マッチメイキング後にプレイヤーを Room に移行するのが一般的な本番フローです。

Tutorial 1〜4 が完了すれば、接続 → マッチメイキング → ルーム参加という完全なフローを実装できます。Tutorial 5 では Direct Messaging — UID を指定した特定プレイヤーへのメッセージ送信 — を学びます。

最終更新

役に立ちましたか?