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.

Interest Groups

您可以把Photon的 "興趣小組 "想象成一個房間裡的對話的子頻道。 客戶端只收到他們訂閱的興趣小組(和0組)的信息。 他們可以把任何事件發送到他們想發送的任何組。

這個簡單的功能可以用於基本的興趣管理或任何您認為合適的方式。 請猜考下方用例。

可取得組

客戶不需要明確地創建興趣小組。 興趣小組是按需求創建的;當actor訂閱了一個新的小組號碼,伺服器就會創建它。

Photon最多提供256個興趣組。 組號0是保留的,用於廣播。一個房間內的所有actor(客戶)都訂閱了0號組,不能取消訂閱。 其他255個組可供開發者自由使用。 任何分配給組>0的事件將只被傳送給對該組感興趣的客戶,並且在伺服器轉發該事件時在房間裡。

Important: You can only cache events sent to interest group 0! No other group has an event cache.

Back To Top

全局設置

訂閱組的列表可以在房間內隨時更新,通過添加或刪除他們的號碼,使用:

Back To Top

SetInterestGroups

SetInterestGroups告訴伺服器,您的客戶對哪些組感興趣。 默認情況下,這是第0組,沒有其他組,所以如果您想使用這個,您必須訂閱一些組。

要全局過濾客戶端receives事件的興趣組:

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

您應該更喜歡使用批量更新,但您也可以為單個興趣小組切換接收:

void PhotonNetwork.SetInterestGroups(byte group, bool enabled)

Back To Top

SetSendingEnabled

當使用 "SetSendingEnabled "時,客戶端可以在本地丟棄去往特定組的更新 - 它們沒有到達伺服器(其中沒有伺服器端的邏輯)。

要在全局范圍內定義客戶端應該向哪些興趣小組send事件,請使用:

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 參數,它將設置連接到預制件的PhotonView的興趣組。

Important: If you pass a group other than the default 0 to PhotonNetwork.Instantiate, make sure to enable receiving events from that group before. Otherwise the prefab will not be instantiated locally.

Back To Top

PhotonView

連接到預制板的PhotonView將自動獲得傳遞給PhotonNetwork.Instantiate調用的興趣組。 默認情況下,它是0。 如果它不是0,加入的客戶端很可能不會為群組執行Instantiate !=0。

您可以通過以下代碼設置或更新PhotonView的興趣組:。

photonView.group = interestGroupCode;

設置一個可視的組只在本地進行-遠程實例保持在實例化GameObject時設置的組。

PunRPCs和PhotonView的序列化/同步化事件將只被發送到為相應的PhotonView配置的興趣組,unless it was disabled using SetSendingEnabled。 所以通常情況下,可以通過接收客戶端的SetInterestGroup設置來過濾伺服器端的更新。

Back To Top

RaiseEvent

在調用PhotonNetwork.RaiseEvent時,要設置目標興趣組,請使用RaiseEventOptions.InterestGroup

Back To Top

案件用例

每個客戶端要訂閱的興趣組,可以在運行時動態定義,也可以在編譯時靜態定義。 興趣小組的設置可以在所有的客戶端上都是一樣的,也可以在每個客戶端上都是不同的。

興趣組對於降低房間內每秒的信息數量非常有用。 通過降低流量,您可以保持在信息/秒的限制之下,削減成本,有時它可以幫助您增加每個房間的最大玩家數量。

但您也可以想出其他巧妙的方法,在您的游戲中使用興趣小組。

Back To Top

網絡刪減

興趣小組的最常見的使用情況是網路刪減。 興趣小組可以被映射到您的遊戲中感興趣的區域。 例如,如果您有一個 "巨大的世界",您可以把它分成小塊,我們稱之為 "區域",並為每個 "區域 "指定一個興趣小組。 。 "Culling Demo "依靠的是興趣小組。

Back To Top

團隊活動

如果您的遊戲中有團隊,並想實現團隊專屬的事件,您可以為每個團隊指定一個興趣小組。 所有的團隊成員都應該訂閱該團隊的興趣小組。 團隊間的事件應該使用團隊自己的組號來發送。 團隊內部的事件應該使用對手團隊的組號來發送。


To Document Top