This document is about: PUN 2
SWITCH TO

PUN Classic (v1)、PUN 2 和 Bolt 處於維護模式。 PUN 2 將支援 Unity 2019 至 2022,但不會添加新功能。 當然,您所有的 PUN & Bolt 專案可以用已知性能繼續運行使用。 對於任何即將開始或新的專案:請切換到 Photon Fusion 或 Quantum。

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.

全局設置

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

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)

默認情況下,客戶端會將更新發送到所有組,這很可能是您想要的。

注意:

  • 優先權總是給組的添加:如果相同的組號被添加到enableGroupsdisableGroups數組中,那麼該組將被添加。
  • 一個null 矩陣作為 "無組",一個空矩陣(new byte[0])作為 "所有組"。
  • PhotonNetwork.SetInterestGroups(new byte[0], enableGroups)將刪除所有組,除了enableGroups中的組。
  • PhotonNetwork.SetInterestGroups(disableGroups, new byte[0])將添加所有當前存在(使用)的組,無論disableGroups的值是多少。

使用指南

實例化

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.

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

案件用例

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

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

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

網絡刪減

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

團隊活動

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

Back to top