インタレストグループ

Photonの「インタレストグループ」はルーム内の会話のサブチャンネルとして考えてください。
クライアントは、自分が加入登録しているインタレストグループ(およびグループ0)のメッセージのみを取得します。
任意のグループにイベントを送信できます。

この簡潔な機能はインタレストグループの基本的な管理、またはその他の適切な用途で使用可能です。
以下の使用例を参照してください。

利用可能なグループ

クライアントは、明示的にインタレストグループを作成する必要はありません。
インタレストグループは必要に応じて作成されます。アクターが新しいグループ番号に加入されると、サーバーがそのグループ番号を作成します。

Photonは最大256のインタレストグループを提供します。
グループ番号0は予約されており、ブロードキャスト用です。ルーム内のすべてのアクター(クライアント)はグループ0に加入登録されており、この登録を取り消すことはできません。
その他の255のグループは開発者が自由に使用できます。
0より大きい番号のグループに割り当てられたイベントは、そのグループにインタレストのあるクライアントと、サーバーがイベントをリレーする際にルームにいるクライアントにのみ送信されます。

重要: インタレストグループ0に送信されるイベントしかキャッシュできません!その他のグループにはイベントキャッシュがありません。

グローバル設定

加入登録したグループのリストは、以下を使用すれば番号を追加または削除してルーム内でいつでもアップデートできます。

C#

bool LoadBalancingPeer.OpChangeGroups(byte[] groupsToRemove, byte[] groupsToAdd)

備考:

  • グループ追加が常に優先されます: 同じグループ番号が両方の配列に追加されると、そのグループが追加されます。
  • null配列は「グループなし」として機能し、空の配列(new byte[0])は「すべてのグループ」として機能します。
  • LoadBalancingPeer.OpChangeGroups(new byte[0], groupsToAdd)groupsToAdd内のもの以外のすべてのグループを削除します。
  • LoadBalancingPeer.OpChangeGroups(groupsToRemove, new byte[0])groupsToRemoveの値にかかわらず、すべてのグループを追加します。
  • ChangeGroupsオペレーションはレスポンスを返したり、イベントをトリガーしたりしないため、必要に応じて各クライアントは自分のインタレストグループをローカルにキャッシュする必要があります。

利用事例

購読するインタレストグループは、クライアントごとに、実行時に動的に、またはコンパイル時に静的に定義できます。
インタレストグループの設定は、すべてのクライアントで同じにすることも、クライアントごとに設定することもできます。

インタレストグループは、ルーム内の1秒あたりのメッセージ数を減らすのに役立ちます。
トラフィックの減少によって、メッセージ/秒の上限を超過せず、コストを削減できます。また、ルームごとの最大プレイヤー数を増加するのに役立つ場合もあります。

この他にも、ゲームでインタレストグループを有効活用できる方法が考えられます。以下に例を記載します。

ネットワーク選別

インタレストグループのもっと一般的な利用事例は、ネットワーク選別です。
インタレストグループはゲーム内でインタレストの領域にマッピングすることが可能です。
たとえば「巨大なワールド」がある場合には、それをより小さな塊に分けることができます。これらの塊をリージョンと呼び、リージョンごとにグループを割り当てましょう。

チームイベント

ゲーム内にチームがあり、特定のチームのみが参加するイベントを実装したい場合には、チームごとにインタレストグループを割り当てることができます。
すべてのチームメンバーが、チームのインタレストグループに加入登録する必要があります。
チーム間のイベントは、チーム独自のグループ番号を使用して送信する必要があります。
チーム内のイベントは、相手チームのグループ番号を使用して送信する必要があります。

Back to top