This document is about: FUSION 2
SWITCH TO

Audio Room


Available in the Industries Circle
Circle
Fusion Industries prototyping Addons

音訊房間

在一些案例中,將玩家分成不同的音訊「房間」可能有幫助,這是不論他們之間的距離的。
這意味著如果房間被門隔離,只有在相同的音訊房間的玩家,可以與彼此交談。為了這樣做,我們提供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來設定DynamicAudioGroupMemberadditionalGroupFilter
這樣的話,在房間中的玩家只接聽房間的成員,並且不接聽其他玩家,就算其他玩家位於定義的距離限制之中也不接聽。

當門狀態改變時,生成OnStatusChange()事件。

相依性

動態音訊群版本1.0.0

示範

為了描繪用途,可在Assets\Photon\FusionAddons\AudioRoom\Demo\Scenes\AudioRoom.unity中找到示範場景。

Fusion Industries Addon AudioRoom

場景有兩個房間,被一個門分隔。
可使用位於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:第一個版本
Back to top