This document is about: FUSION 2
SWITCH TO

동적 오디오 그룹


Available in the Industries Circle
Circle
Fusion 인더스트리 프로토타이핑 애드온

동적 오디오 그룹

Fusion 인더스트리 애드온 동적 오디오 그룹

동적 오디오 그룹 기능을 사용하면 대역폭을 사용하거나 사용자가 멀리서 오는 노이즈를 추가하지 않고도 로컬 사용자 주변의 모든 원격 사용자와 대화할 수 있습니다.
정의된 거리를 초과하는 사용자는 들리지 않습니다.
적응된 사운드 공간화 및 감쇠와 결합하여 자연스러운 청취 감각을 제공합니다.

현재 구현은 Photon Voice 관심 그룹을 기반으로 합니다.

각 사용자는 하나의 고유한 관심 그룹에서 이야기하며 절대 변경되지 않습니다.
그러나 사용자가 듣는 그룹 목록은 필요한 대역폭을 제한하는 다른 플레이어의 근접성에 따라 동적으로 수정됩니다.
게다가 고립된 사람들은 대역폭 소비를 더 피하기 위해 네트워크를 통해 음성을 보내지 않습니다.

이 기능은 DynamicAudioGroupMember 클래스에 의존합니다.

DynamicAudioGroupMember

DynamicAudioGroupMember는 각 네트워크 플레이어 프리팹에 있습니다
Spawned()에서는 플레이어에 대해 고유한 오디오인 GroupId가 계산됩니다(즉, 각 플레이어는 고유한 GroupId를 가집니다).
그런 다음 로컬 플레이어 Recorder 오디오 관심 그룹이 이 GroupId로 구성되고 음성 클라이언트가 이를 듣도록 구성됩니다.

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를 듣기 시작합니다(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() 메소드 덕분에 더 이상 수신을 받지 못합니다.

이러한 작업은 모든 플레이어가 수행하기 때문에 각 플레이어가 자신의 그룹 아이디에서만 음성을 보내도 양방향 대화가 가능합니다.

추가 필터

또한 플레이어가 다른 플레이어와 가까울 수 있지만 다른 폐쇄된 룸에 있을 수 있기 때문에 CheckProximity()는 룸이 격리된 경우 다른 멤버의 말을 듣지 않아야 하는지 여부를 확인합니다.
따라서 DynamicAudioGroupMember 클래스는 additionalFilter 매개 변수를 제공합니다. 즉, 두 오디오 그룹 멤버가 서로 들을 수 있으려면 동일한 additionalFilter 값을 가져야 합니다.

예를 들어 오디오 룸 추가 기능에서는 사용자가 격리된 방에 있을 때 AudioRoomMember에서 additionalFilter 파라미터를 설정합니다.

특별한 추가 필터 값인 NEVER_MATCHING_GROUP_FILTER는 두 멤버 간에 절대 일치하지 않는 것으로 간주되기 때문에 어떤 멤버 그룹(아무도 듣지 않음)에 가입하는 것을 방지합니다.

C#

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

데모

사용법을 설명하기 위해 데모 씬은 Assets\Photon\FusionAddons\DynamicAudioGroup\Demo\Scenes\DynamicAudioGroup.unity에서 확인할 수 있습니다.

여러 클라이언트를 연결하고 각 플레이어와 관련된 정보 패널을 관찰합니다.
각 플레이어는 두 개의 구로 둘러싸여 있습니다.
녹색 구는 플레이어 머리가 들어가는 순간 다른 플레이어의 말을 듣기 시작할 영역입니다.
머리가 붉은 구를 벗어나자마자 듣는 것이 멈출 것입니다.

의존성

  • Photon Voice SDK

다운로드

애드온의 최신 버전은 애드온 프로젝트에 있습니다.

지원하는 토폴로지

  • 공유 모드

변경 내역

  • 버전 2.0.1: DynamicAudioGroup에 NEVER_MATCHING_GROUP_FILTER 추가 필터 추가(아무도 듣지 않음)
  • 버전 2.0.0: Fusion 2.0 지원
  • 버전 1.0.2: 수신된 멤버 연결이 끊겼을 때 DisplayDynamicAudioGroupInfos 오류 수정
  • 버전 1.0.1: 데모 씬 + 네임스페이스 추가
  • 버전 1.0.0: 최초 릴리즈
Back to top