Audio Room
音訊房間
在一些案例中,將玩家分成不同的音訊「房間」可能有幫助,這是不論他們之間的距離的。
這意味著如果房間被門隔離,只有在相同的音訊房間的玩家,可以與彼此交談。為了這樣做,我們提供4個類別:
AudioRoomManager
AudioRoom
AudioRoomMember
AudioDoor
音訊房間管理器
AudioRoomManager
管理場景中的房間及玩家的清單。
在各個移動之後,由玩家調用MatchingRooms()
方法,以取得他所在的房間的清單(請注意,房間可能彼此重疊)。
音訊房間
以AudioRoom
元件來定義音訊房間。
由一個中心點及一個方框來設定房間的空間位置(在場景檢視中的一個小方塊顯示它)。
各個AudioRoom
有一個特定的Id
,並且在Awake()
期間在AudioRoomManager
上註冊它自己。
IsIsolated
布林值用於定義位於房間中的玩家是否被門隔離在其他人之外。
當關聯於房間的門移動時,調用Isolate()
方法(由AudioDoor
),並且檢查玩家是否位於房間之中,以請他利用OnCurrentRoomIsolationChange()
方法來更新音訊群篩選。
音訊房間成員
各個網路玩家預製件有一個AudioRoomMember
類別,這樣它可以在開始時在AudioRoomManager
上註冊它自己。
在各個移動時,利用DidMove()
回調,AudioRoomMember
檢查使用者是否已經移動到另一個房間。
然後它根據房間狀態(是否被隔離)來設定音訊群(DynamicAudioGroupMember
)。
音訊門
AudioDoor
類別必須被新增到一個分隔音訊房間的門遊戲物件。
門可以利用ToogleDoor()
及Open()
公共方法來開啟與關閉。
如果請求門的開啟與關閉的玩家沒有這個權限來這樣做,那麼他發送一個RPC到狀態授權。
C#
public void ToogleDoor()
{
Open(!IsOpened);
}
public void Open(bool isOpen)
{
if (Object.HasStateAuthority)
{
IsOpened = isOpen;
}
else
{
RPC_Open(isOpen);
}
}
[Rpc(sources:RpcSources.All, targets: RpcTargets.StateAuthority)]
public void RPC_Open(bool isOpen)
{
IsOpened = isOpen;
}
門狀態(開啟與關閉)利用已連網布林值IsOpened
來透過網路被同步。
一個更改ChangeDetector
用於偵測在Render()
中的調整
C#
[Networked]
public NetworkBool IsOpened { get; set; } = true;
ChangeDetector renderChangeDetector;
public override void Spawned()
{
base.Spawned();
OnIsOpenedChange();
renderChangeDetector = GetChangeDetector(ChangeDetector.Source.SnapshotFrom);
}
public override void Render()
{
// Check if the IsOpened changed
if (TryDetectIsOpenedChange())
{
OnIsOpenedChange();
}
}
OnIsOpenedChange()
方法改變由門分隔的房間的隔離狀態。
然後房間告知位於房間中的玩家關於隔離的狀態:如果房間是隔離的,以roomId
來設定DynamicAudioGroupMember
的additionalGroupFilter
。
這樣的話,在房間中的玩家只接聽房間的成員,並且不接聽其他玩家,就算其他玩家位於定義的距離限制之中也不接聽。
當門狀態改變時,生成OnStatusChange()
事件。
相依性
動態音訊群版本1.0.0
示範
為了描繪用途,可在Assets\Photon\FusionAddons\AudioRoom\Demo\Scenes\AudioRoom.unity
中找到示範場景。
場景有兩個房間,被一個門分隔。
可使用位於Door
遊戲物件上的AudioDoor
元件的Toggle is opened
按鈕來開啟或關閉門。
連線多個客戶端並且觀察與各個玩家關聯的資訊面板。
各個玩家被兩個半球圍繞。
如果門是開啟:
- 綠色半球是在另一個玩家的頭進入時將開始接聽他的區域,就算他們沒有在相同的房間。
- 接聽將在頭離開紅色半球時停止。
如果門是關閉:
- 只有位於相同房間之中的並且在距離之內的玩家能夠互相聊天。
下載
這個附加元件的最新版本被包含在附加元件專案之中
已支援拓撲
- shared mode
共享模式
- 版本2.0.0:支援Fusion 2.0
- 版本1.0.3:更改以音訊房間狀態移動門,從網路行為到單行為
- 版本1.0.2:命名空間調整
- 版本1.0.1:新增示範場景+新增命名空間
- 版本1.0.0:第一個版本