PUN Classic (also called PUN1) is the original and first major version of PUN. It is now replaced by PUN2 which is refactored and enhanced. We highly recommend starting new projects with PUN2 and if possible migrating existing ones from PUN1 to PUN2 by following our "Migration Notes". PUN Classic will be maintained for the coming months. We will fix important bugs and support new Unity versions but new features will be added only to PUN2.

インタレストグループ

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

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

利用可能なグループ

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

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

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

Back To Top

グローバル設定

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

Back To Top

SetInterestGroups

SetInterestGroupsはサーバーに、あなたのクライアントがどのグループにインタレストがあるかを伝えます。 デフォルトではグループ0で、これ以外のグループではありません。このため、使用したい場合にはグループに加入登録する必要があります。

クライアントがどのインタレストグループからイベントを受信するかをグローバルにフィルタリングするには:

void PhotonNetwork.SetInterestGroups(byte[] disableGroups, byte[] enableGroups)

バルクアップデートを使用するべきですが、個別のインタレストグループの受信を切り替えることも可能です:

void PhotonNetwork.SetInterestGroups(byte group, bool enabled)

Back To Top

SetSendingEnabled

SetSendingEnabledを使用する場合、クライアントはローカルで特定のグループに実施されるアップデートを破棄する必要があります―これらのアップデートはサーバーに到達しません(この処理については、サーバー側のロジックはありません)。

クライアントがどのインタレストグループにイベントを送信するかをグローバルに定義するには、以下を使用してください:

void PhotonNetwork.SetSendingEnabled(byte[] disableGroups, byte[] enableGroups)

単独のインタレストグループへの送信に切り替えるには:

void PhotonNetwork.SetSendingEnabled(byte group, bool enabled)

デフォルトでは、クライアントはすべてのグループにアップデートを送信します。多くの場合に、こうした送信が必要だと思われます。

備考:

  • グループ追加が常に優先されます: 同じグループ番号がenableGroupsdisableGroupsの両方の配列に追加されると、そのグループが追加されます。
  • null配列は「グループなし」として機能し、空の配列(new byte[0])は「すべてのグループ」として機能します。
  • PhotonNetwork.SetInterestGroups(new byte[0], enableGroups)enableGroups内のもの以外のすべてのグループを削除します。
  • PhotonNetwork.SetInterestGroups(disableGroups, new byte[0])disableGroupsの値にかかわらず、現在既存となっている(使用された)すべてのグループを追加します。

Back To Top

利用ガイド

インスタンス化

PhotonNetwork.Instantiateメソッドはgroupパラメータを承認し、prefabに添付されたPhotonViewのインタレストグループを設定します。

重要: デフォルト0以外のグループPhotonNetwork.Instantiateに渡す場合には、そのグループからの受信イベントを有効化する点に留意してください。 有効化しない場合には、prefabはローカルでインスタンス化されません。

Back To Top

PhotonView

prefabに添付されたPhotonViewは、PhotonNetwork.Instantiateコールに渡されたインタレストグループを自動的に取得します。 デフォルトでは、0に設定されています。 0でない場合、参加するクライアントはgroups != 0におそらくインスタンス化を実行しません。

PhotonViewのインタレストグループをコードで設定またはアップデートする方法を以下に示します:

photonView.group = interestGroupCode;

ビューのグループの設定は、ローカルでのみ実行されます。リモートインスタンスは、GameObjectをインスタンス化する際に設定されたグループを保持します。

PunRPCおよびPhotonViewシリアル化/同期化イベントは、SetSendingEnabledを使用して非有効化されていない限り 各PhotonViewに設定されたインタレストグループにのみ送信されます。 通常、アップデートは受信側のクライアントのSetInterestGroup設定でサーバーサイドでフィルタリングされます。

Back To Top

RaiseEvent

PhotonNetwork.RaiseEventを呼ぶ際に対象のインタレストグループを設定するには、RaiseEventOptions.InterestGroupを使用します。

Back To Top

利用事例

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

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

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

Back To Top

ネットワーク選別

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

選別デモ」はインタレストグループに依存します。

Back To Top

チームイベント

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

To Document Top