This document is about: FUSION 2
SWITCH TO

오디오 룸


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

AudioRoom

경우에 따라서는 플레이어 사이의 거리에 관계없이 다른 오디오 "방"으로 분할하는 것이 유용할 수 있습니다. 이것은 문 덕분에 방이 고립되었을 때 같은 오디오 룸에 있는 플레이어들끼리만 대화할 수 있다는 것을 의미합니다. 그렇게 하기 위해 우리는 4가지 클래스를 제공합니다:

  • AudioRoomManager
  • AudioRoom
  • AudioRoomMember
  • AudioDoor

AudioRoomManager

AudioRoomManager는 현장에 있는 룸과 플레이어의 목록을 관리합니다.

MatchingRooms() 메소드는 플레이어가 이동할 때마다 자신이 있는 룸의 목록을 얻기 위해 호출됩니다(룸은 서로 겹칠 수 있음에 유의하십시오).

AudioRoom

오디오 룸은 AudioRoom 컴포넌트로 정의됩니다. 룸의 공간 위치는 중심점과 상자(기즈모 큐브가 씬 뷰에 표시)로 설정됩니다. AudioRoom은 각각 특정 Id를 가지고 있으며 Awake()AudioRoomManager에 등록됩니다.

IsIsolated bool은 실내에 위치한 플레이어들이 문 덕분에 다른 플레이어들과 격리되는지 여부를 정의하는 데 사용됩니다. 룸과 관련된 문이 움직이면 (AudioDoor 로) Isolate() 메소드를 호출하여 플레이어가 방에 있는지 확인하고 OnCurrentRoomIsolationChange() 메소드를 통해 오디오 그룹 필터링을 업데이트하도록 요청합니다.

AudioRoomMember

각 네트워크 플레이어 프리팹에는 AudioRoomMember 클래스가 있어 시작할 때 AudioRoomManager에 등록할 수 있습니다. 이동할 때마다 DidMove()의 콜백 덕분에 AudioRoomMember는 사용자가 다른 방으로 이동했는지 여부를 확인합니다. 그런 다음 룸 상태(격리 여부)에 따라 오디오 그룹(DynamicAudioGroupMember)을 설정합니다.

룸에서 나갈 때 그룹 필터링은 다음으로 재설정됩니다:

  • OutOfRoomFilterMode.NoFilter로 설정된 경우 기본값(누구나 들을 수 있음)
  • 또는 OutOfRoomFilterMode.NeverMatchingGroupFilter를 사용하여 사용자가 아무도 들을 수 없게 만듭니다.

멤버 또는 룸에 IAudioRoomListener를 구현하는 자식이 있는 경우 플레이어가 방에 들어가거나 나갈 때 OnIsInRoom 콜백을 받게 됩니다.

AudioDoor

오디오 룸을 구분하는 도어 게임 오브젝트에 AudioDoor 클래스를 추가해야 합니다.

이 문은 ToogleDoor()Open() public 메소드 덕분에 열 수도 있고 닫힐 수도 있습니다. 문을 열고 닫을 것을 요청한 플레이어가 권한이 없으면 StateAuthority에 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() 메소드는 문으로 분리된 방의 격리 상태를 변경합니다. 그러면 방 안에 있는 플레이어에게 격리 상태를 알려줍니다. 방이 격리되면 DynamicAudioGroupMemberadditionalGroupFilterroomId로 설정됩니다.
이렇게 하면 방 안에 있는 플레이어들은 정해진 거리 제한 안에 있더라도 룸 안에 있는 멤버들의 말만 듣고 다른 플레이어들의 말은 듣지 않습니다.

도어 상태가 변경되면 OnStatusChange() 이벤트가 발생합니다.

의존성

동적 오디오 그룹 버전 2.0.1

데모

사용법 설명을 위하여 Assets\Photon\FusionAddons\AudioRoom\Demo\Scenes\AudioRoom.unity에 데모 씬이 있습니다.

fusion industries addon audioroom

씬은 문으로 분리된 두 개의 룸이 있습니다. Door 게임 객체에 있는 AudioDoor 컴포넌트의 Toggle is opened 버튼을 이용해 도어를 여닫을 수 있습니다. 여러 클라이언트를 연결하고 각 플레이어와 관련된 정보 패널을 관찰합니다. 각 플레이어는 두 개의 구로 둘러싸여 있습니다.

도어가 열린 경우:

  • 녹색 구는 같은 룸에 있지 않더라도 머리가 들어가는 순간 다른 플레이어의 말을 듣기 시작하는 영역입니다.
  • 머리가 붉은 구를 벗어나자마자 듣기가 중단됩니다.

도어가 닫힌 경우:

  • 같은 룸과 가까운 곳에 위치한 플레이어만 서로 채팅할 수 있습니다.

다운로드

이 애드온의 최신 버전은 애드온 프로젝트에 포함되어 있습니다.

지원되는 토폴로지

  • 공유 모드

변경 내역

  • 버전 2.0.1: 룸을 나갈 때 새 옵션 추가(누구의 말을 듣든 듣지 않든) + AudioRoom & AudioRoomMember 등록 방법 추가(해제) + IAudioRoomListener 콜백 추가
  • 버전 2.0.0: Fusion 2.0 지원
  • 버전 1.0.3: MoveDoorWithAudioRoomStatus를 NetworkBehaviour에서 MonoBehavior로 변경
  • 버전 1.0.2: 네임 스페이서 변경
  • 버전 1.0.1: 데모 씬, 네임스페이스 추가
  • 버전 1.0.0: 최초 릴리즈
Back to top