複数のルームとチャネル

Strixでは、同期メッセージアクションを個々のルームに制限しています。ルームAにいるプレイヤーは、ルームBにいるプレイヤーと相互作用できません。これにより、ネットワークロジックがシンプルになっています。

しかしゲームは、単一のマッチを超えた範囲のマルチプレイヤー機能を備えていることがあります。例えば、チャットシステムでは、異なるマッチを行っているプレイヤー同士が連絡を取ることができることがありますし、MMOでは、ゲーム内距離で遠く離れたプレイヤーとの通信や会話が可能かもしれません。

Strixはこの問題を、複数のルームへの接続を可能にすることで解決します。プレイヤーは単一のマッチに制限されず、互いに独立したさまざまなルームに接続できます。

チャネル

Strix Unreal SDKは、これを行うためにチャネルの概念を持っています。チャネルとは特定の部屋との接続で、チャネルIDによって識別します。関数やイベント、コンポーネントの中にはチャネルID引数を持つものが多数あります。

ルームサーバーかルームに接続する場合、Strixの関数はチャネル引数を受け取ります。接続処理が成功すると、指定したチャネルに新しい接続が登録されます。別のチャネルIDで接続関数を呼び出すと、別のルーム接続が作成されます。

チャネルIDを指定して行う後続の全てのアクションは、そのチャネルに属す接続上で動作します。チャネルIDを持つ全てのコンポーネントは、その接続についてのみロジックを実行します。

Strix Unreal Sampleに例があります。Channelsサンプルでは、いくつかの追加のチャットルームに接続します。全ての同期はメインルームのチャネルで行われるため、他のルーム内では複製が行われませんが、プレイヤーはメインゲームルームと関係なくチャットメッセージを通じてコミュニケーションできます。

注釈

チャネルIDというのは整数値で、ゲームの開発中に開発者が値を決めます。例えば「チャネル#1をダンジョン内のパーティーを表すルームに使用し、チャネル#2をギルドチャット用のルームに使い、チャネル#3を…」といった具合に決定します。そして、自分で決めたチャネルの数値のうちの一つを指定して関連する関数を呼び出します。

これは一般的な低レベルAPIによくあるハンドルの概念とは異なります。ハンドルの場合は、例えばファイルをオープンするとライブラリが決定した値がハンドルとして返され、通常設計時にはその値が分かりません。アプリケーションではその値を変数に保存しておき、ファイルからデータを読む際にそのハンドルの値を指定します。

ルームサーバーとルーム接続

ルームに接続されていないときにもチャネルをオープンしておくことが可能です。これは、プレイヤーがルームサーバーに接続されているが、まだルームに参加していない場合に発生します。

SDKでは、ルームサーバーで実行される操作とマスターサーバーで実行される操作の区別があります。マスターサーバーの操作にはルームサーバー接続は必要ありません。この方法でルームに参加すると、関連するルームサーバーとルームに自動的に接続されます。

そうではなく、プレイヤーが特定のルームサーバーに手動で接続する場合、その接続はルームに接続されません。登録されたチャネルIDを使用した操作は、このルームサーバー接続を使用して動作しますが、プレイヤーがルームに参加するまで、ルーム操作は機能しません。