Interest Groups
您可以把Photon的 "興趣小組 "想象成一個房間裡的對話的子頻道。
客戶端只收到他們訂閱的興趣小組(和0組)的信息。
他們可以把任何事件發送到他們想發送的任何組。
這個簡單的功能可以用於基本的興趣管理或任何您認為合適的方式。
請猜考下方用例。
可取得組
客戶不需要明確地創建興趣小組。
興趣小組是按需求創建的;當actor訂閱了一個新的小組號碼,伺服器就會創建它。
Photon最多提供256個興趣組。
組號0是保留的,用於廣播。一個房間內的所有actor(客戶)都訂閱了0號組,不能取消訂閱。
其他255個組可供開發者自由使用。
任何分配給組>0的事件將只被傳送給對該組感興趣的客戶,並且在伺服器轉發該事件時在房間裡。
全局設置
訂閱組的列表可以在房間內隨時更新,通過添加或刪除他們的號碼,使用:
SetInterestGroups
SetInterestGroups
告訴伺服器,您的客戶對哪些組感興趣。
默認情況下,這是第0組,沒有其他組,所以如果您想使用這個,您必須訂閱一些組。
要全局過濾客戶端receives事件的興趣組:
C#
void PhotonNetwork.SetInterestGroups(byte[] disableGroups, byte[] enableGroups)
您應該更喜歡使用批量更新,但您也可以為單個興趣小組切換接收:
C#
void PhotonNetwork.SetInterestGroups(byte group, bool enabled)
SetSendingEnabled
當使用 "SetSendingEnabled "時,客戶端可以在本地丟棄去往特定組的更新 - 它們沒有到達伺服器(其中沒有伺服器端的邏輯)。
要在全局范圍內定義客戶端應該向哪些興趣小組send事件,請使用:
C#
void PhotonNetwork.SetSendingEnabled(byte[] disableGroups, byte[] enableGroups)
要切換一個單一的發送興趣組:
C#
void PhotonNetwork.SetSendingEnabled(byte group, bool enabled)
默認情況下,客戶端會將更新發送到所有組,這很可能是您想要的。
注意:
- 優先權總是給組的添加:如果相同的組號被添加到
enableGroups
和disableGroups
數組中,那麼該組將被添加。 - 一個
null
矩陣作為 "無組",一個空矩陣(new byte[0]
)作為 "所有組"。 PhotonNetwork.SetInterestGroups(new byte[0], enableGroups)
將刪除所有組,除了enableGroups
中的組。PhotonNetwork.SetInterestGroups(disableGroups, new byte[0])
將添加所有當前存在(使用)的組,無論disableGroups
的值是多少。
使用指南
實例化
PhotonNetwork.Instantiate
方法接受一個 group
參數,它將設置連接到預制件的PhotonView的興趣組。
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.
PhotonView
連接到預制板的PhotonView將自動獲得傳遞給PhotonNetwork.Instantiate
調用的興趣組。
默認情況下,它是0。
如果它不是0,加入的客戶端很可能不會為群組執行Instantiate !=0。
您可以通過以下代碼設置或更新PhotonView的興趣組:
C#
photonView.Group = interestGroupCode;
設置一個可視的組只在本地進行-遠程實例保持在實例化GameObject時設置的組。
PunRPCs和PhotonView的序列化/同步化事件將只被發送到為相應的PhotonView配置的興趣組,unless it was disabled using SetSendingEnabled
。
所以通常情況下,可以通過接收客戶端的SetInterestGroup設置來過濾伺服器端的更新。
RaiseEvent
在調用PhotonNetwork.RaiseEvent
時,要設置目標興趣組,請使用RaiseEventOptions.InterestGroup
。
案件用例
每個客戶端要訂閱的興趣組,可以在運行時動態定義,也可以在編譯時靜態定義。
興趣小組的設置可以在所有的客戶端上都是一樣的,也可以在每個客戶端上都是不同的。
興趣組對於降低房間內每秒的信息數量非常有用。
通過降低流量,您可以保持在信息/秒的限制之下,削減成本,有時它可以幫助您增加每個房間的最大玩家數量。
但您也可以想出其他巧妙的方法,在您的游戲中使用興趣小組。
網絡刪減
興趣小組的最常見的使用情況是網路刪減。
興趣小組可以被映射到您的遊戲中感興趣的區域。
例如,如果您有一個 "巨大的世界",您可以把它分成小塊,我們稱之為 "區域",並為每個 "區域 "指定一個興趣小組。
團隊活動
如果您的遊戲中有團隊,並想實現團隊專屬的事件,您可以為每個團隊指定一個興趣小組。
所有的團隊成員都應該訂閱該團隊的興趣小組。
團隊間的事件應該使用團隊自己的組號來發送。
團隊內部的事件應該使用對手團隊的組號來發送。