스테이지 화면 공유
개요
Fusion 스테이지 화면 공유 샘플은 Fusion으로 최대 200명의 플레이어를 위한 소셜 애플리케이션을 개발하는 방법에 대한 접근 방식을 보여줍니다.
각 플레이어는 아바타로 표현되며 Photon Voice SDK 덕분에 동일한 채팅 버블에 위치하면 다른 플레이어와 대화할 수 있습니다.
그리고 한 명의 사용자가 무대에 올라 콘텐츠 발표를 시작할 수 있습니다.
발표자로 승인을 받은 경우 사용자는 룸의 대형 가상 화면에서 PC 화면을 공유할 수도 있습니다.
이 샘플의 몇 가지 하이라이트는 다음과 같습니다:
- 먼저 플레이어는 선택 아바타 화면에서 자신의 아바타를 커스터마이징합니다.
- 그런 다음 스테이지 씬에 참여할 수 있습니다. 플레이어가 PC 또는 MAC에서 샘플을 시작하면 데스크톱 모드(키보드 및 마우스 사용) 또는 VR 모드(메타 퀘스트 헤드셋) 중에서 선택할 수 있습니다.
- 플레이어는 동일한 정적 채팅 버블에 위치하면 서로 대화할 수 있습니다. 각 정적 채팅 버블에는 새로운 플레이어가 들어오지 못하도록 잠금 버튼을 사용할 수 있습니다.
- 한 명의 사용자가 스테이지에 오를 수 있고, 이 방법으로 룸에 있는 모든 사용자에게 말을 걸 수 있습니다. 그러면 이 사용자는 스테이지에서 그와 함께 할 수 있는 사용자의 수를 늘릴 수 있습니다.
- 발표자 음성은 더 이상 공간화되지 않아 모든 사람이 스피커를 통해 들을 수 있습니다.
- 모든 사용자 간에 플레이가 동기화된 비디오와 같은 콘텐츠를 공유할 수 있습니다.
- 스테이지 카메라 시스템이 발표자를 따라가며 전용 화면에 발표자를 표시합니다
- 일단 자리에 앉으면, 사용자는 스테이지에서 발표자와 이야기하기 위해 요청할 수 있습니다. 발표자가 수락하면, 발표자 또는 사용자가 대화를 중단하기로 결정할 때까지 모든 사람은 발표자와 사용자 사이의 대화를 들을 수 있습니다.
- 또한 청중들은 이모티콘을 보내 프레젠테이션에 대한 의견을 표현할 수 있습니다.
- 대역폭 소비를 줄이고 플레이어 수를 늘리기 위해 플레이어가 앉으면 틱 속도가 줄어듭니다.
기술 정보
- 이 샘플은 공유 모드 토폴로지를 사용합니다.
- PC, Mac & Meta Quest에서 빌드를 사용할 수 있습니다.
- 이 프로젝트는 유니티 2021.3, Fusion 2, Photon Voice 2.53으로 개발되었습니다.
- 2개의 아바타 솔루션 지원(홈메이드 간편 아바타 & Ready Player Me 아바타)
시작하기 전에
샘플 실행을 위해서 :
PhotonEngine 관리 화면에서 Fusion AppId를 생성하고 Real Time 설정(Fusion 메뉴에서 이동 가능)의
App Id Fusion
필드에 붙여 넣습니다.PhotonEngine 관리 화면에서 Voice AppId를 생성하고 Real Time 설정의
App Id Voice
필드에 붙여 넣습니다.AvatarSelection
씬을 로드하고Play
를 누릅니다.
다운로드
버전 | 릴리즈 일자 | 다운로드 | |
---|---|---|---|
2.0.0 | Oct 16, 2024 | Fusion Stage Screen Sharing 2.0.0 Build 692 |
바이너리 다운로드
스테이지 화면 공유 클라이언트 데모 버전은 아래에서 다운로드할 수 있습니다 :
Windows용 스테이지 화면 공유 레코더는 다음에서 다운로드할 수 있습니다:
입력 처리
데스크톱
키보드
- 이동 : WASD 또는 ZQSD
- 회전 : QE 또는 AE
- 메뉴 : ESC 키를 통하여 애플리케이션 메뉴 열기 또는 닫기
마우스
- 이동 : 마우스로 왼쪽 클릭을 하면 포인터가 표시됩니다. 해제 시 허용되는 대상에 대해 순간 이동할 수 있습니다.
- 회전 : 마우스 오른쪽 버튼을 누른 상태에서 마우스를 움직여 시점을 회전합니다.
- 이동 & 회전 : 앞으로 나아가려면 왼쪽 버튼과 오른쪽 버튼을 모두 누른 상태로 유지합니다. 마우스를 계속 움직여 회전시킬 수 있습니다.
- 잡기 : 마우스를 물체 위에 놓고 마우스 왼쪽 버튼을 사용하여 잡습니다.
메타 퀘스트
- 텔레포트 : A, B, X, Y 또는 임의의 스틱을 눌러 포인터를 표시합니다. 해제 시 허용되는 대상에 순간이동합니다.
- 터치(즉, 채팅 버블 잠금 버튼의 경우) : 버튼 위에 손을 올려 전환하기만 하면 됩니다.
폴더 구조
메인 폴더인/Stage
에는 이 샘플의 고유 컴포넌트들이 들어 있습니다.
/IndustriesComponents
폴더에는 Fusion 엑스포 샘플과 같은 다른 산업 샘플과 공유하는 컴포넌트들이 있습니다.
/Photon
폴더에는 Fusion 및 Photon Voice SDK가 들어있습니다.
/Photon/FusionXRShared
폴더에는 VR 공유 샘플에서 나오는 리그 및 그립 로직이 포함되어 있어 다른 프로젝트와 공유할 수 있는 FusionXRShared 라이트 SDK가 생성됩니다.
/Photon/FusionAddons
폴더에는 이 샘플에 사용된 Industries 애드온이 들어 있습니다.
/XR
폴더에는 가상현실에 대한 구성 파일이 들어 있습니다.
아키텍처 개요
이 샘플은 VR 공유 페이지에 설명된 것과 동일한 코드 기반에 의존하며, 특히 리그 동기화에 사용됩니다.
이 기반 외에도 샘플에는 다른 인더스트리 샘플과 마찬가지로 동기화된 광선, 로코모션 검증, 터치, 순간 이동 평활화 또는 주시 시스템과 같은 재사용 가능한 기능을 처리할 수 있는 FusionXRShared 또는 인더스트리 애드온의 일부 확장이 포함되어 있습니다.
또한 이 샘플은 Photon Voice SDK 애드온이 Photon Video SDK에 의존합니다.
룸에 가입하려는 사용자가 시작한 일반 클라이언트 외에 자신의 화면을 공유하려는 사용자는 공유할 화면을 제어하는 전용 Windows 애플리케이션 "레코더 클라이언트"를 실행하고 이를 표시할 수 있는 권한을 요청해야 합니다.
화면 캡처는 데스크톱 이미지 캡처를 처리하여 텍스처에 적용하는 uWindowCapture를 기반으로 합니다.
그런 다음 Photon Video SDK는 VoiceConnection
을 통해 이 비디오 스트림을 처리합니다(현재로서는 "Stream"의 의미로 여전히 "Voice"라는 용어를 사용하고 있습니다).
씬 로직
일반 클라이언트(참석자)와 레코더 클라이언트(스테이지 화면에서 데스크톱을 스트리밍 하기 위해)에 대해 동일한 유니티 씬을 사용해야 합니다.
그러나 사용하고자 하는 클라이언트 모드에 따라 약간의 수정이 필요합니다.
이를 위해 StageWithScreenSharing
씬에서 ExtendedRigSelection
은 애플리케이션을 레코더 클라이언트로 구성하기 위해 Recorder
라는 이름의 특정 리그 구성을 포함합니다:
- 기본 사용자 프리팹을 특정 이미터 프리팹으로 변경합니다.
- 앰비언트 사운드를 비활성화합니다.
- 기록에 필요한 객체를 활성화합니다(특정 리그, UI, 이미터).
- 참가자 등록부에 신청서를 등록합니다.
스테이지
ChatBubble
애드온은 스테이지를 관리하는 데 사용됩니다.
기본적으로 스테이지 채팅 버블의 용량은 1명으로 제한되어 있으므로 발표자가 이미 무대에 있을 때 다른 사람이 무대에 올 수 없습니다. 그러나 발표자는 무대 콘솔을 사용하여 이 값을 변경할 수 있습니다.
모든 사용자에게 사용자가 올바르게 표시되도록 하려면 LOD 그룹을 비활성화하여 단계에 들어오는 모든 사용자가 LOD를 트리거 하지 않도록 합니다(클래스 PublicSpeechHandler
& StageCameraManager
참조).
음성
발표자는 스테이지 채팅 버블에 속하지만 다른 참가자는 그렇지 않기 때문에 DynamicAudioGroup
애드온(버전 2.0.2)의 화이트리스트 기능을 사용하여 모든 참가자가 항상 발표자의 말을 들을 수 있도록 합니다.
또한 오디오 소스 공간화를 제거하여 이 사용자의 음성을 룸 구석구석에서 들을 수 있습니다.
발표자 카메라
발표자 카메라는 스테이지 위에 있는 사용자를 따라갑니다. 이를 위해 StageCameraManager
의 컴포넌트는 IAudioRoomListener
인터페이스를 구현해 스테이지 위에 있는 사용자의 목록을 유지합니다.
따라서 사용자가 스테이지에 설 때 카메라 추적 및 녹화를 트리거 합니다.
StageCameraManager
는 여러 대의 카메라를 처리할 수 있으며 각 카메라마다 발표자를 따라 이동하는 동시에 가장 관련성이 높은 것에 대해서만 실제 렌더링을 가능하게 합니다.
그 카메라들은 몇 초 단위로 렌더링 된 프레임 수가 낮으며, 이는 카메라 움직임과 함께 StageCamera
클래스에서 수행됩니다.
카메라는 카메라 리그인 Transform
에 상대적으로 배치되며, 이 트랜스폼의 x
축을 따라 움직입니다.
착석 및 대역폭 감소
플레이어가 앉았을 때 플레이어의 위치를 업데이트할 필요가 없기 때문에 사용자가 앉았을 때 새로 고침 비율을 줄이는 기능을 추가했습니다.
플레이어가 자리를 비울 때 일반 주파수로 돌아갑니다. 이렇게 하면 대역폭 소비가 줄어들고 애플리케이션의 사용자 수가 증가합니다.
플레이어의 네트워크 장비의 머리와 손에 추가된 NetworkTransformRefreshThrottler
컴포넌트는 특정 물체의 방출률을 감소시키는 역할을 합니다. 이를 위해 스로틀링이 활성화되면 상태 권한에서 일정 시간 동안 NetworkTransform
의 이전 위치/회전을 계속 동일하게 설정합니다.
따라서 프록시의 틱 데이터는 일정 기간 동안 동일하게 유지되므로 Fusion 틱 기반 보간이 제대로 작동하지 않습니다.
이 특정 접근 방식을 처리하기 위해 스로틀링이 활성화된 경우에는 더 이상 틱 상태를 신뢰하지 않고 최신 변경 사항을 수신한 타이밍을 프록시에서 시간 기반 보간을 사용합니다.
상태 권한 자체는 이 접근법에 의해 해당 틱 기반 보간 데이터가 손상될 것입니다. 그러나 스로틀러는 상태 권한이 이미 일종의 외삽(렌더링 중에 위치를 강제)을 가지고 있다고 가정하여 이를 처리하지 않습니다.
이 외삽법을 적용하는 것은 여기 스테이지 샘플의 NetworkRig 클래스입니다.
여기서 스로틀링은 StageNetworkRig
에서 활성화됩니다.
HardwareRig
의 하위 클래스인 StageHardwareRig
는 앉기 요청을 수신할 수 있습니다(SeatDetector
클래스는 사용자가 좌석 위로 이동할 때 관찰합니다). 그러면 StageNetworkRig
는 로컬의 SeatStatus
를 업데이트하고 사용자가 착석한 상태에서 스로틀링을 활성화합니다.
C#
void LocalNetworkRigSeatStatusUpdate()
{
if (IsLocalNetworkRig && stageHardwareRig && SeatStatus.Equals(stageHardwareRig.seatStatus) == false)
{
SeatStatus = stageHardwareRig.seatStatus;
}
}
public override void FixedUpdateNetwork()
{
base.FixedUpdateNetwork();
LocalNetworkRigSeatStatusUpdate();
if (Object.HasStateAuthority)
{
rigThrottler.IsThrottled = SeatStatus.seated;
leftHandThrottler.IsThrottled = SeatStatus.seated;
rightHandThrottler.IsThrottled = SeatStatus.seated;
headsetThrottler.IsThrottled = SeatStatus.seated;
}
}
참석자 스테이지 음성 접근
회의 참석자들은 무대 마이크에 접근할 수 있도록 요청할 수 있습니다. 무대의 발표자는 그들의 요청을 허락하거나 거절할 수 있습니다.
사용자의 네트워크화된 리그에는 [Networked]
변수 AttendeeStatus
를 호스트 하는 VoiceableAttendee
컴포넌트가 포함되어 있으며 이 상태는 다음과 같습니다:
- 아직 요청이 오지 않았다면
- 관람객이 무대에 음성 접근을 요청하는 경우
- 만약 그것이 받아들여졌다면
- 만약 그것이 받아들여졌지만 일시적으로 음소거된 것이라면
- 또는 요청이 거부된 경우
사용자가 (1) UI를 통해 위 다이어그램을 사용하여 음성 접근을 요청하면 (2) 상태가 업데이트되고 네트워크는 이를 모든 사용자에게 동기화합니다 (3).
모든 클라이언트에 대해 콜백 (4)을 트리거 하여 모든 참석자를 저장하는 AttendeeRegistry
컴포넌트에 경고하고, 이 컴포넌트는 이 변경 정보를 모든 청취자에게 브로드캐스팅 합니다.(5).
이렇게 하면 무대 위 데스크에 연결된 AttendeeRequestHandler
가 요청하는 참석자 목록을 저장하고 그에 따라 UI를 업데이트할 수 있습니다.
[Networked]
변수인 SelectedRequestingAttendeeInfo
는 선택한 참석자에 대한 정보를 UI에 저장하여 각 클라이언트의 모든 UI가 동기화되도록 합니다.
발표자가 음성 요청 (6) 을 확인하면 SelectedRequestingAttendeeInfo
참석자 상태 정보가 변경됩니다.
VoiceableAttendee
AttendeeStatus
를 직접 변경할 수는 없습니다. 발표자가 요청자가 아닐 수도 있고, 상태 권한도 없기 때문입니다.
그러나 SelectedRequestingAttendeeInfo
가 [Networked]
변수이기 때문에 발표자에 대해 로컬로 변경하면 모든 클라이언트에 대한 업데이트가 트리거 됩니다.
이 업데이트를 진행하는 동안 각자 VoiceableAttendee
네트워크 객체의 상태 권한이 있는지 확인하고, 해당 권한이 있는 경우 참석자 상태 (9) 를 변경합니다.
마지막으로 이 상태를 변경하면 모든 클라이언트에 대한 VoiceableAttendee
AttendeeStatus
업데이트가 시작되며, 이제 해당 관중이 음성으로 표시된 관중임을 확인하면 (10):
- 항상 듣는
DynamicAudioGroupMember
의 화이트리스트에 이 사용자를 추가합니다(PublicSpeechHandler
클래스) - 거리에 관계없이 모든 사람이 들을 수 있도록 오디오 공간 블레드를 끕니다
AvatarRepresentation
에서 이 사용자에 대한 LOD 그룹을 비활성화하여 무대에서 발표자와 같은 모든 사용자에 대해 최대 세부 정보로 표시합니다.
동영상 동기화
비디오 플레이어는 현재 단순한 유니티 VideoPlayer이지만 모든 비디오 라이브러리를 사용할 수 있습니다.
무대에 선 발표자는 무대 콘솔에서 동영상을 시작하거나 특정 시간으로 이동하거나 일시 중지할 수 있습니다. 이를 모든 사용자에게 동기화하기 위해 VideoControl
NetworkBehaviour
는 PlayState
[Networked]
구조체를 포함하고 있으며 플레이 상태와 위치를 유지합니다. 네트워크 변수로서 발표자가 UI를 사용할 때 변경하면 모든 클라이언트에서 변경 콜백이 트리거 되어 자신의 플레이어에서 변경 사항을 적용할 수 있습니다.
이모티콘
음성 요청 외에도 관람객들은 언제든지 이모티콘을 보내며 자신을 표현할 수 있습니다.
이 기능은 이 사용 사례에 중요하지 않기 때문에 사용자가 이모티콘 UI 버튼을 클릭하면 RPC를 사용하여 관련 프리팹을 생성합니다. 이는 룸에 새로 들어오는 사용자가 이전에 생성된 이모티콘을 보지 못한다는 것을 의미합니다(어차피 이모티콘은 몇 초 후에 사라집니다).
또한 공간에서 이모티콘의 위치를 동기화할 필요가 없으므로 이모티콘 프리팹은 네트워크로 연결된 객체가 아닙니다.
스피커 UI에 위치한 EmotesRequest
클래스는 사용자의 위치에 이모티콘을 생성하도록 EmotesSpawner
클래스에 요청하는 역할을 합니다.
네트워크 객체가 필요하기 때문에 EmotesSpawner
는 사용자의 네트워크 리그에 위치합니다.
화면 공유
메인 화면에서 스트리밍 권한을 요청하기 위해서는 음성 요청 시스템과 유사한 권한 시스템을 사용합니다. ScreenSharingAttendee
로서 화면 공유 권한을 요청할 수 있으며, 스테이지의 제어 화면에서는 이러한 요청을 검증할 수 있는 EmissionOrchestratorWithAuthorizationManagement
가 제공됩니다.
화면 공유는 uWindowCapture 로 캡처한 후 PhotonVideo SDK를 통해 다른 클라이언트로 전송됩니다.
자세한 내용은 화면 공유 인더스트리 애드온을 참조하십시오.
화면 공유 요청 관리
사용자가 데스크톱 화면을 스테이지에서 공유할 수 있는 방식은 참석자가 발표자와 대화할 수 있도록 수행된 것과 유사합니다.
StageNetworkRigRecorder
프리팹은 레코더 애플리케이션이 세션에 참여할 때 생성됩니다.
이 프리팹에는 [Networked]
변수 ScreenShareStatus
를 호스트 하는 ScreenShareAttendee
클래스가 포함되어 있습니다.
C#
[Networked]
public ScreenShareStatus ScreenShareStatus { get; set; }
이 상태는 다음을 설명합니다:
- 화면 공유 요청이 아직 이루어지지 않은 경우,
- 화면 공유 요청이 발생한 경우,
- 요청이 받아들여졌다면,
- 만약 그것이 멈췄다면,
- 또는 요청이 거부된 경우,
C#
public enum ScreenShareStatus
{
NoScreenShareRequested, // no request yet
ScreenShareCanceled, // request canceled on the recorder UI
ScreenShareRequested, // request done, waiting for answer
ScreenShareInProgress, // screensharing in progress
ScreenShareStopped, // screensharing stopped (by the speaker using the desk, or using the recorder UI)
ScreenShareRejected // screensharing rejected by the speaker
}
무대 위 책상에 연결된 EmissionOrchestratorWithAuthorizationManagement
는 화면 공유를 요청하는 사용자의 목록을 저장하고 그에 따라 UI를 업데이트할 수 있습니다.
자세한 내용은 IScreenShare
인터페이스를 참조하십시오.
첫 번째 화면 공유 요청은 제어 데스크에 표시됩니다.
ScreenShareStatus
가 변경되면(예를 들어 발표자가 화면 공유 요청을 확인할 때), 화면 공유를 소유한 클라이언트가 상태를 변경할 수 있도록 네트워크로 브로드캐스팅 됩니다.
따라서 화면 공유 요청자가 권한을 받으면 선택한 데스크톱을 스트리밍 하기 시작합니다.
C#
if (ScreenShareStatus == ScreenShareStatus.ScreenShareInProgress)
{
Debug.Log("Starting Screen Sharing !");
screenSharingEmitter.ConnectScreenSharing();
}
EmitterMenuWithAuthorizationManagement
클래스는 메뉴와의 사용자 상호 작용 또는 ScreenShareStatus
상태에 따라 화면 공유 버튼 및 업데이트 텍스트 필드를 표시하는 역할을 합니다.
컴파일
일반 클라이언트(참석자)와 레코더 클라이언트(무대 화면에서 데스크톱을 스트리밍 하기 위해)에 대해 동일한 유니티 씬을 사용합니다.
따라서 컴파일하려는 클라이언트에 따라 몇 가지 수동 수정을 해야 합니다.
레코더 클라이언트 컴파일
따라서 레코더 애플리케이션을 컴파일하려면 다음 두 단계를 수행해야 합니다:
1/ StageAvatarSelection
씬을 엽니다. LoadMainSceneInRecorderMode
게임 오브젝트에서 Is Recorder Compilation Mode
란을 선택하여 아바타 선택 씬을 로드하지 않고 바로 메인 씬을 로드합니다.
일반 클라이언트와 레코더의 씬 목록이 동일해야 하므로 이 팁이 필요합니다.
2/ StageWithScreenSharing
씬을 엽니다. ExtendedRigSelection
게임 오브젝트 & 클래스에서 Force to use Recorder
로 설정합니다.
레코더 리그의 ScreenShareAppWindowsSettings
클래스는 해상도 변경을 위해 담당하고 있으니 참고하시기 바랍니다.
유니티 파라미터를 수동으로 변경할 수도 있습니다:
Project Settings
/Player
:Product name
변경: 예를 들어 'Recorder' 추가
Project Settings
/Player
/Resolution and Presentation
/Resolution
- 전제 화면 모드 : Windowed
- 기본 화면 너비 : 640
- 기본 화면 높이 : 380
- 크기 조정 : No
- 전제 화면 허용 : No
일반 클라이언트 컴파일
따라서 일반 클라이언트 애플리케이션을 컴파일하려면 다음 세 단계를 수행해야 합니다:
1/ StageAvatarSelection
씬을 엽니다. LoadMainSceneInRecorderMode
게임 오브젝트에서 Is Recorder Compilation Mode
를 선택 해제합니다.
2/ StageWithScreenSharing
씬을 엽니다. RigSelection
게임 오브젝트인 RecorderAppRigSelection
클래스에서 App Kind
파라미터를 Normal
로 설정합니다.
RecorderAppRigSelection
은 일반/레코더 선택에 따라 씬을 구성하는 역할을 합니다.
3/ 일부 유니티 매개변수 확인:
Project Settings
/Player
:Product name
이름 변경: 예를 들어 'Client' 추가
Project Settings
/Player
/Resolution and Presentation
/Resolution
- 전제 화면 모드 : 전체 화면 윈도우
- 크기 조정 : Yes
- 전제 화면 허용 : Yes
사용된 인더스트리 애드온
당사는 3D/XR 애플리케이션 프로토타이핑 속도를 높이기 위해 재사용 가능한 추가 기능 목록을 Industries Circle 회원에게 제공합니다.
자세한 내용은 인더스트리 애드온를 참조하십시오.
이 샘플에 사용한 애드온은 다음과 같습니다.
공간
회의 샘플에 사용된 것과 동일한 접근 방식을 재사용하여 동일한 회의실의 여러 인스턴스를 허용했습니다.
따라서 사용자는 룸 번호를 지정하여 공용실 또는 개인 회의실에 가입할 수 있습니다.
이 선택은 아바타 선택 화면 또는 나중에 애플리케이션 메뉴에서 할 수 있습니다.
자세한 내용은 스페이스 인더스트리 애드온를 참조하십시오.
연결 관리자
연결 시작을 관리하고 사용자 표현을 생성하기 위해 ConnectionManager
애드온을 사용합니다.
자세한 내용은 연결 관리자 애드온을 참조하십시오.
확장된 리그 선택
우리는 이 샘플에서 필요한 3개의 리그 사이를 전환하기 위해 이 애드온을 사용합니다:
- 메타 빌드를 위한 VR 장비,
- Windows 및 Mac 클라이언트용 데스크톱 리그,
- 화면에서 데스크톱을 스트리밍 하기 위해 담당하는 Windows 레코더 애플리케이션을 구축하기 위한 레코더 리그
자세한 내용은 확장 리그 선택 인더스트리 애드온을 참조하십시오.
아바타
이 애드온은 간단한 아바타 세트를 포함한 아바타 기능을 지원합니다.
자세한 내용은 아바타 인더스트리 애드온을 참조하십시오.
Ready Player Me 아바타
이 애드온은 Ready Player Me 아바타 통합을 처리합니다.
자세한 내용은 Ready Player Me 아바타 인더스트리 애드온을 참조하십시오.
사회적 거리 두기
편안함과 근거리 거리를 보장하기 위해 사회적 거리 두기 추가 기능을 사용합니다.
자세한 내용은 사회적 거리 두기 인더스트리 애드온을 참조하세요.
로코모션 검증
로코모션 검증 애드온을 사용하여 플레이어의 움직임을 제한합니다(정의된 씬 제한에 머무릅니다).
자세한 내용은 로코모션 검증 인더스트리 애드온을 참조하십시오.
동적 오디오 그룹
우리는 사용자 간의 거리를 고려하여 편안함과 대역폭 소비를 최적화하면서 사용자가 함께 채팅할 수 있도록 동적 오디오 그룹 애드온을 사용합니다.
또한 화이트리스트 기능을 사용하여 참가자가 같은 오디오 룸에 있지 않으면서 발표자의 말을 들을 수 있습니다.
자세한 내용은 동적 오디오 그룹 인더스트리 애드온을 참조하십시오.
오디오 룸
AudioRoom
애드온은 채팅 버블을 방음하는 데 사용됩니다.
자세한 내용은 오디오 룸 인더스트리 애드온을 참조하십시오.
채팅 버블
이 애드온은 엑스포 씬에 포함된 정적 채팅 버블을 제공합니다.
자세한 내용은 채팅 버블 인더스트리 애드온을 참조하십시오.
가상 키보드
플레이어 이름이나 룸 ID를 사용자 정의하려면 가상 키보드가 필요합니다.
자세한 내용은 가상 키보드 인더스트리 애드온을 참조하십시오.
터치 호버
이 애드온은 3D 객체 또는 UI 요소와의 플레이어 상호 작용을 증가시키는 데 사용됩니다. 상호 작용은 가상 손 또는 레이 비머로 수행할 수 있습니다.
자세한 내용은 터치 호버 인더스트리 애드온을 참조하십시오.
피드백
애플리케이션에서 사용되는 사운드를 중앙 집중화하고 햅틱 및 오디오 피드백을 관리하기 위해 Feedback
애드온을 사용합니다.
자세한 내용은 피드백 애드온을 참조하십시오.
화면 공유
사용자는 발표자가 허락하는 경우 자신의 컴퓨터 화면을 공유하고 무대의 대형 화면으로 방송할 수 있습니다.
자세한 내용은 화면 공유 인더스트리 애드온을 참조하십시오.
타사 컴포넌트
- Oculus 통합
- Oculus Lipsync
- Oculus 샘플 프레임워크 핸즈
- Ready player me
- 사운드
알려진 문제
- Quest : 사용자가 로그인하기 전에 화면 공유를 시작한 경우 화면 공유 표시가 길거나 실패할 수 있습니다.