This document is about: FUSION 2
SWITCH TO

Dynamic Audio group


Available in the Industries Circle
Circle
Fusion Industries プロトタイピングアドオン

Dynamic Audio group

Fusion Industries Addon Dynamic Audio Group

Dynamic Audio Group機能によって、余計な帯域消費や遠くのユーザーからのノイズを無くし、自身の周りのすべてのリモートユーザーと会話することができます。
定義された距離以上のユーザーの音声は聞こえません。
音声の空間化と減衰の適応を組み合わせているため、自然な感覚で音声が聞き取れるようになっています。

現在の実装は、Photon Voice インタレストグループに基づいています。

各ユーザーは1つのインタレストグループの中で話し、この値は決して変更されません。
ただし、聞き取るグループのリストは、近接する他のプレイヤーによって動的に変更され、帯域消費を抑えます。
さらに、孤立している人はネットワークを通して音声を送信しないため、さらに帯域消費を抑えられます。

この機能は、DynamicAudioGroupMemberクラスに依存しています。

DynamicAudioGroupMember

DynamicAudioGroupMemberは、各ネットワークプレイヤープレハブに付いています。
Spawned()では、プレイヤーのユニークな音声GroupIdが計算されます(言い換えれば、各プレイヤーが自身のGroupIdを持ちます)。
それから、ローカルプレイヤーのRecorderのインタレストグループにGroupIdが設定され、Photon Voiceクライアントがそれを聞き取るように設定されます。

C#

async void SpeakAndListenOnlyToGroup(byte groupId)
{
...
    recorder.InterestGroup = groupId;
    fusionVoiceClient.Client.OpChangeGroups(groupsToRemove: new byte[] { }, groupsToAdd: new byte[] { groupId });
...
}

プレイヤーが聞き取るグループを更新するには、Update()内で他のプレイヤーが定義された距離以下にいるかをチェックします。

C#

private void Update()
{
    CheckProximity();
}

近接する各リモートプレイヤーに対して、ローカルプレイヤーはそのGroupId(ネットワーク変数)の聞き取りを開始します。

C#

private void CheckProximity()
{
...
    if(DistanceSqr(member) < proximityDistanceSqr)
    {
    ...
        ListentoGroupId(member.GroupId);
    }
...
}

C#

async void ListentoGroupId(byte groupId)
{
    if (!Object.HasStateAuthority) return;
    while (!IsPhotonVoiceready || !isSpeakInitialized) await Task.Delay(10);
    fusionVoiceClient.Client.OpChangeGroups(groupsToRemove: null, groupsToAdd: new byte[] { groupId });
}

逆に、リモートプレイヤーが近接距離から離れたら、StopListeningToGroupId()メソッドによって聞き取りを停止します。

これらの操作はすべてのプレイヤーで実行されるため、プレイヤーが自身のGroupIdのみで音声を送信しても、双方向の会話が可能になっています。

追加フィルター

また、プレイヤーに近接する他のプレイヤーが近くの異なるルームにいることがあるため、ルームが隔絶している場合、CheckProximity()は他のプレイヤーの聞き取りを停止するかどうかをチェックします。
そのため、DynamicAudioGroupMemberadditionalFilterパラメーターを提供しています。互いの音声を聞き取れるようにするため、2つのグループメンバーは同じadditionalFilter値を持つ必要があります。

例えば、Audio Roomアドオンでは、ユーザーが孤立したルームにいる場合、AudioRoomMemberadditionalFilterパラメーターが設定されます。

特別な追加フィルター値NEVER_MATCHING_GROUP_FILTERは他のグループメンバーの参加を防ぐため、2つのグループメンバーがマッチングすることは決してありません。

C#

if (additionalFilter == NEVER_MATCHING_GROUP_FILTER || additionalFilter != member.additionalFilter)
    {
    // No matching filter
    StopListeningToMember(member);
    }

デモ

使用方法を示すデモシーンはAssets\Photon\FusionAddons\DynamicAudioGroup\Demo\Scenes\DynamicAudioGroup.unityにあります。

複数のクライアントを接続して、各プレイヤーの情報パネルを確認できます。
各プレイヤーは2つの球に囲まれています。
緑の球は、他のプレイヤーの聞き取りを開始するエリアです。
赤の球から離れると、聞き取りを停止します。

依存関係

  • Photon Voice SDK

ダウンロード

このアドオンの最新バージョンは、Industries アドオンのプロジェクトに含まれています。

対応するトポロジー

  • 共有モード

更新履歴

  • Version 2.0.2: Improve extendability (notably for not listenable member - for bot testing purposes for example)
  • Version 2.0.1: Add NEVER_MATCHING_GROUP_FILTER to DynamicAudioGroup additional filters to prevent joining any member group (listening to no one)
  • Version 2.0.0: Fusion 2.0 support
  • Version 1.0.2: Fix error in DisplayDynamicAudioGroupInfos when listened member disconnected
  • Version 1.0.1: Add demo scene + add namespace
  • Version 1.0.0: First release
Back to top