インタレストグループ
Photonの「インタレストグループ」はルーム内の会話のサブチャンネルとして考えてください。
クライアントは、自分が加入登録しているインタレストグループ(およびグループ0)のメッセージのみを取得します。
任意のグループにイベントを送信できます。
この簡潔な機能はインタレストグループの基本的な管理、またはその他の適切な用途で使用可能です。
以下の使用例を参照してください。
利用可能なグループ
クライアントは、明示的にインタレストグループを作成する必要はありません。
インタレストグループは必要に応じて作成されます。アクターが新しいグループ番号に加入されると、サーバーがそのグループ番号を作成します。
Photonは最大256のインタレストグループを提供します。
グループ番号0は予約されており、ブロードキャスト用です。ルーム内のすべてのアクター(クライアント)はグループ0に加入登録されており、この登録を取り消すことはできません。
その他の255のグループは開発者が自由に使用できます。
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秒あたりのメッセージ数を減らすのに役立ちます。
トラフィックの減少によって、メッセージ/秒の上限を超過せず、コストを削減できます。また、ルームごとの最大プレイヤー数を増加するのに役立つ場合もあります。
この他にも、ゲームでインタレストグループを有効活用できる方法が考えられます。以下に例を記載します。
ネットワーク選別
インタレストグループのもっと一般的な利用事例は、ネットワーク選別です。
インタレストグループはゲーム内でインタレストの領域にマッピングすることが可能です。
たとえば「巨大なワールド」がある場合には、それをより小さな塊に分けることができます。これらの塊をリージョンと呼び、リージョンごとにグループを割り当てましょう。
チームイベント
ゲーム内にチームがあり、特定のチームのみが参加するイベントを実装したい場合には、チームごとにインタレストグループを割り当てることができます。
すべてのチームメンバーが、チームのインタレストグループに加入登録する必要があります。
チーム間のイベントは、チーム独自のグループ番号を使用して送信する必要があります。
チーム内のイベントは、相手チームのグループ番号を使用して送信する必要があります。