오디오 룸
AudioRoom
경우에 따라 플레이어 사이의 거리에 관계없이 플레이어를 서로 다른 오디오 "룸"으로 나누는 것이 유용할 수 있습니다.
이는 문으로 인해 룸이 고립된 경우 같은 오디오 룸에 있는 플레이어만 서로 대화할 수 있음을 의미합니다. 이를 위해 4가지 클래스를 제공합니다:
AudioRoomManager
AudioRoom
AudioRoomMember
AudioDoor
AudioRoomManager
AudioRoomManager
는 현장에 있는 룸과 플레이어 목록을 관리합니다.
MatchingRooms()
메소드는 플레이어가 매 동작 후 자신이 위치한 방의 목록을 가져오기 위해 호출합니다(방이 서로 겹칠 수 있음을 유의하십시오).
AudioRoom
오디오 룸은 AudioRoom
컴포넌트로 정의됩니다.
룸의 공간 위치는 중심점과 박스로 설정됩니다(기즈모 큐브가 씬 뷰에 표시).
각 AudioRoom
은 특정 Id
가 있으며, Awake()
중에 AudioRoomManager
에 등록합니다.
IsIsolated
부울 변수는 문 때문에 룸 안에 있는 플레이어들이 다른 플레이어들로부터 고립되는지를 정의하는 데 사용됩니다.
룸과 관련된 문이 움직이면 Isolate()
메소드가 (AudioDoor
로) 호출되어 플레이어가 룸 안에 있는지 확인하고 OnCurrentRoomIsolationChange()
메소드로 오디오 그룹 필터링 업데이트를 요청합니다.
AudioRoomMember
각 네트워크 플레이어 프리팹엔느 AudioRoomMember
클래스가 있으므AudioRoomMember
는 사용자가 다른 룸으로 이동했는지 확인합니다.
그런 다음 룸 상태(격리 여부)에 따라 오디오 그룹(DynamicAudioGroupMember
)을 설정합니다.
AudioDoor
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
를 통해 네트워크에서 동기화됩니다.
OnIsOpenedChange()
메소드는 IsOpened
이 변경될 때 호출됩니다.
C#
[Networked(OnChanged = nameof(OnIsOpenedChange))]
public NetworkBool IsOpened { get; set; } = true;
static void OnIsOpenedChange(Changed<AudioDoor> changed)
{
changed.Behaviour.OnIsOpenedChange();
}
OnIsOpenedChange()
메소드는 문으로 분리된 룸의 격리 상태를 변경합니다.
그런 다음 룸은 룸에 위치한 플레이어에게 격리 상태를 알려줍니다. 즉, 룸이 격리된 경우 DynamicAudioGroupMember
의 additionalGroupFilter
가 roomId
로 설정됩니다.
이러한 방식으로, 룸에 있는 플레이어는 정의된 거리 제한 내에 있는 경우에도 룸 구성원의 말만 듣고 다른 플레이어의 말은 듣지 않습니다.
OnStatusChange()
이벤트는 도어 상태가 변경되었을 때 생성됩니다.
의존성
Dynamic Audio Group 버전 1.0.0
다운로드
이 애드온의 최신 버전은 애드온 프로젝트에 포함되어 있습니다.
지원하는 토폴로지
- 공유 모드
- 호스트 모드
변경 내역
- 버전 1.0.0 (2023/07/06) : 최초 릴리즈