This document is about: FUSION 1
SWITCH TO

수정중인 페이지 입니다.

미팅

Level 4
Available in the Industries Circle
Circle

개요

이 샘플은 Fusion을 사용하여 간단한 미팅 애플리케이션을 개발하는 방법에 대해 설명합니다.

먼저 플레이어는 아바타 선택 화면에서 아바타를 사용자 정의합니다. 그런 다음 여러 도구와 기능이 설정되어 있는 미팅룸으로 이동할 수 있습니다.

다음은 가장 주요한 몇 가지 기능입니다:

  • 다른 룸의 사용자를 분리하는 공용/비밀 그룹
  • 문을 닫을 때 다른 플레이어가 들어올 수 없음
  • 다양한 색상의 3D 펜
  • 수직 또는 수평 화이트보드에 이동하여 그릴 수 있는 2D 펜
  • 화면 공유
  • 사회적 거리 두기
  • 사용자에게 팁을 제공하는 대화형 메뉴

플레이어가 PC 또는 MAC에서 샘플을 시작하는 경우 데스크톱 모드(키보드 및 마우스 사용) 또는 VR 모드(메타 퀘스트 헤드셋) 중 하나를 선택할 수 있습니다.

fusion 미팅 개요

기술 정보

  • 이 샘플은 공유 모드 토폴로지를 사용합니다.
  • PC, Mac, 메타 퀘스트 및 WebGL용 빌드를 사용할 수 있습니다.
  • 이 프로젝트는 유니티 2021.3.23f1, Fusion 1.1.7, Photon Voice 2.51로 개발되었습니다.
  • 2개의 아바타 솔루션이 지원됩니다(홈 메이드 심플 아바타 및 Ready Player Me 1.9.0 아바타),

시작하기 전에

샘플 실행 :

  • PhotonEngine 관리 화면에서 Fusion AppId를 생성하고 Real Time 설정의 App Id Fusion 필드에 붙여 넣습니다 (Fusion 메뉴에서 이동 가능).

  • PhotonEngine 관리 화면에서 Voice AppId를 생성하고 Real Time 설정의 App Id Voice 필드에 붙여 넣습니다.

  • AvatarSelection 씬을 로드하고 Play를 누릅니다.

다운로드

버전 릴리즈 일자 다운로드
1.1.8 Dec 21, 2023 Fusion meeting 1.1.8 Build 386

바이너리 다운로드

미팅의 데모 버전은 다음에서 다운로드할 수 있습니다:

Windows용 미팅 화면 공유 레코더는 다음과 같이 사용할 수 있습니다:

WebGL

미팅 샘플은 WebGL 타겟으로 빌드 할 수 있습니다.

Metaverse WebGL 빌드 여기를 테스트할 수 있습니다.

그러나 WebGL 빌드와 관련된 일부 유니티 제한으로 인해 몇 가지 사항이 제대로 작동하려면 구체적인 관리가 필요하며 여기에 자세히 나와 있습니다.

이 WebGL 빌드는 WebXR(브라우저내 가상 현실)을 지원하지 않습니다. unity-webxr-export와 같은 일부 오픈 소스 라이브러리에서 구현할 수 있지만 유니티에서는 아직 기본적으로 지원되지 않으므로 여기에서는 설명하지 않습니다.

입력 처리

데스크톱

키보드

  • 이동 : WASD 또는 ZQSD
  • 회전 : QE 또는 AE
  • 펜 색 : C로 펜 색상 변경
  • 메뉴 : ESC 키로 애플리케이션 오픈 또는 다기

마우스

  • 이동 : 마우스로 왼쪽 클릭하여 포인터를 표시합니다. 해제 시 허용된 대상으로 순간 이동합니다
  • 회전 : 마우스 오른쪽 버튼을 누른 상태로 마우스를 움직여 시점을 회전합니다
  • 이동 & 회전 : 앞으로 이동하려면 왼쪽 버튼과 오른쪽 버튼을 모두 누른 상태로 유지하되 회전하려면 마우스를 움직일 수 있습니다
  • 잡기 : 마우스를 물건 위에 놓고 마우스 왼쪽 버튼을 사용하여 잡습니다.

메타 퀘스트

  • 텔레포트: A, B, X, Y 또는 임의의 스틱을 눌러 포인터를 표시합니다. 해제 시 허용된 대상으로 텔레포트합니다
  • 터치(채팅 버블 잠금 버튼의 경우): 버튼 위에 손을 올려놓으면 전환됩니다
  • 잡기: 먼저 손을 물건 위에 얹고 컨트롤러 그랩 버튼을 사용

폴더 구조

메인 폴더 /MeetingRoom에는 이 샘플의 모든 요소들이 포함되어 있습니다.

/IndustriesComponents 폴더에는 Fusion Stage ScreenSharing sample, Fusion Expo sample 또는 Fusion Metaverse sample와 같은 산업 샘플과 공유하는 컴포넌트가 들어 있습니다.

/Photon 폴더에는 Fusion 그리고 Photon Voice SDK가 들어 있습니다.

/Photon/FusionXRShared 폴더에는 다른 프로젝트와 공유할 수 있는 FusionXRS Shared Light SDK를 생성하는 VR 공유 샘플에서 가져온 리그 및 캡처 로직이 포함되어 있습니다.

/Photon/FusionXRShared/Extensions 폴더에는 동기화된 광선, 로코모션 검사 등과 같은 재사용 가능한 기능을 위한 FusionXRShared 확장이 포함되어 있습니다

/Plugins 폴더에는 Ready Player Me SDK가 들어 있습니다.

/XR 폴더에는 가상 현실에 필요한 구성 파일들이 들어 있습니다.

아키텍처 개요

Meeting 샘플은 특히 리그 동기화를 위해 VR 공유 페이지에 설명된 것과 동일한 코드 기반에 의존합니다.

여기서 사용되는 잡기 시스템은 VR 공유 - 로컬 리그 잡기 페이지에 설명된 대체 "로컬 리그 잡기" 구현입니다.

이 기반 외에도 다른 산업 샘플과 마찬가지로 샘플에는 동기화된 광선, 이동 유효성 검사, 터치, 순간 이동 평활 또는 게이징 시스템과 같은 재사용 가능한 기능을 처리하기 위한 FusionXR 공유 또는 XR 모듈의 일부 확장이 포함되어 있습니다.

사용된 XR 모듈

당사는 3D/XR 애플리케이션 프로토타이핑 속도를 높이기 위해 재사용 가능한 모듈 목록을 서클 멤버에게 제공합니다. 이 샘플에서 사용한 모듈은 다음과 같습니다.

Spaces

메타버스 샘플에 사용된 접근 방식과 동일한 접근 방식을 재사용하여 동일한 방의 여러 인스턴스를 허용했습니다. 따라서 사용자는 룸 번호를 지정하여 공개 또는 비밀 미팅 룸에 참여할 수 있습니다. 이 선택은 아바타 선택 화면 또는 나중에 애플리케이션 메뉴에서 할 수 있습니다.

상세 내용은 Space XR 모듈을 참고하세요.

동적 오디오 그룹

동적 오디오 그룹 모듈을 사용하여 사용자 간의 거리를 고려하여 편안함과 대역폭 소비를 최적화하면서 사용자가 함께 채팅할 수 있습니다.

상세 내용은 동적 오디오 그룹 XR 모듈을 참고하세요.

오디오 룸

게다가, 우리는 같은 룸에 있지 않은 사람들에게는 들을 수 없도록 하는 설명하고 싶었습니다. 그래서 우리는 문으로 분리된 씬에 두 개의 룸을 만들었습니다.

fusion meeting sliding door audio room

AudioRoom 모듈을 사용하여 문 상태에 따라 동적 오디오 그룹 업데이트를 관리합니다. 문 개폐는 AudioDoor.ToogleDoor()메소를 호출하는 버튼에 따라 트리거 됩니다. 문 애니메이션은 AudioDoor 클래스에서 수신한 OnStatusChange() 이벤트를 청취하는 TriggerDoorAnimation 클래스에서 관리합니다.

상세 내용은 오디오 룸 XR 모듈을 참고하세요.

로코모션 검증

우리는 플레이어의 움직임을 제한하기 위해 로코모션 검증 모듈을 사용합니다(룸에 머무르거나 가구를 피하는 등).

상세 내용은 로코모션 검증 XR 모듈을 참고하세요.

사회적 거리 두기

공간의 편안함과 비밀을 보장하기 위해, 우리는 사회적 거리 두기 모듈을 사용합니다.

상세 내용은 사회적 거리 두기 XR 모듈을 참고하세요.

화면 공유

사용자는 컴퓨터 화면을 공유하고 미팅룸의 큰 화면으로 브로드캐스트 할 수 있습니다. "Stage ScreenSharing" 샘플과 달리, 여기에는 권한 관리가 없습니다: 방송을 시작한 마지막 사용자가 화면을 제어합니다. 이것은 IEmitterListener 인터페이스를 구현하는 EmissionOrchestrator 에 의해 관리됩니다. 따라서 클라이언트가 화면 공유를 시작하면 PlayerId가 저장됩니다:

  • 화면에 대하여 상태 권한이 있는 경우 클라이언트가 직접 사용할 수도 있습니다,
  • 또는 클라이언트가 상태 권한을 가지고 있지 않은 경우 RPC를 사용합니다.

C#

public void SetEmitter(PlayerRef emitter, string name)
{
    if (Object.HasStateAuthority)
    {
        EmittingPlayer = emitter;
        EmittingPlayerName = name;
    }
    else
    {
        RPC_SetEmitter(emitter, name);
    }
}
    
[Rpc(sources: RpcSources.All, targets: RpcTargets.StateAuthority)]
public void RPC_SetEmitter(PlayerRef emitter, string name)
{
    EmittingPlayer = emitter;
    EmittingPlayerName = name;
}

다른 플레이어가 화면 공유를 시작하는 즉시 StopEmitting()으로 화면 공유를 중지하여 자원과 대역폭을 절약합니다.

상세 내용은 화면 공유 XR 모듈을 참고하세요

fusion meeting screensharing screen
fusion meeting screensharing screen
fusion meeting screensharing screen

그리기

룸에는 2D 펜과 여러 개의 3D 펜이 있는 화이트보드가 있습니다. 그리기가 완료되면(즉, 사용자가 "트리거" 버튼을 해제하면) 핸들이 표시됩니다. 이를 통해 사용자는 2D 또는 3D 그리기를 이동할 수 있습니다.

상세 내용은 3D & 2D 그리기 XR 모듈을 참고하세요.

fusion meeting 3d drawing
fusion meeting 2d drawing
fusion meeting 2d drawing
fusion meeting 2d drawing

접촉 차단

이 모듈을 사용하여 화이트보드 표면에 2D 펜과 드로잉 핀을 차단합니다.

상세 내용은 접촉 차단 XR 모듈을 참고하세요.

대화형 메뉴

이 모듈은 그리기에 펜 또는 삭제 버튼을 사용하는 방법에 대한 팁을 표시하는 데 사용됩니다.

상세 내용은 대화형 메뉴 XR 모듈을 참고하세요.

fusion meeting interactive menu for meeting sample
fusion meeting interactive menu for meeting sample

확장된 리그 선택

이 모듈을 사용하여 이 샘플에 필요한 다양한 장비 간에 전환합니다. 실제로 이 샘플에는 세 가지 구성이 필요합니다:

  • 메타 빌드용 VR 장치
  • Windows 및 Mac 클라이언트용 데스크톱 장치
  • 데스크톱을 화면에 스트리밍 하기 위해 담당하는 Windows 레코더 애플리케이션을 구축하는 리그 필요 없음(이 모드에서는 네트워크 리그를 생성할 필요가 없습니다).

따라서 확장된 리그 선택 설정은 다음과 같습니다:

fusion meeting extended rig selection

상세 내용은 확장된 리그 선택 XR 모듈을 참고하세요.

데스크톱 포커스 모드

3D 상태에서 화이트보드에 2D 펜으로 그림을 그리는 것은 어렵기 때문에 ScreenDrawing 클래스는 "Desktop Focus Mode" 모듈에 의존해 포커스 모드를 활성화하고 특정 사용자 인터페이스를 표시합니다.

fusion meeting desktop focus mode

상세 내용은 데스크톱 포커스 XR 모듈을 참고하세요.

컴파일

일반 클라이언트와 레코더 클라이언트(화면에서 데스크톱 스트리밍)에 동일한 유니티 씬을 사용합니다. 따라서, 컴파일하고 싶은 클라이언트에 따라 몇 가지 수동 수정을 해야 합니다.

레코드 클라이언트 컴파일

따라서 레코더 애플리케이션을 컴파일하려면 다음 두 단계를 수행해야 합니다:

1/ AvatarSelection 씬 열기 : LoadMainSceneInRecorderMode 게임 오브젝트에서 Is Recorder Compilation Mode 체크박스를 선택하여 아바타 셀렉션 씬을 로드하지 않고 메인 씬을 직접 로드합니다. 일반 클라이언트와 레코더에 대해 씬 목록이 동일해야 하기 때문에 이 팁이 필요합니다.

2/ MeetingRoom 씬 열기 : 게임 객체인 ExtendedRigSelection 클래스에서 Selection Mode 파라미터를 Selected by User Pref로 설정합니다.

3/ 일부 유니티 파라미터 변경:

fusion meeting room screen sharing recorder unity parameters
  • Project Settings / Player :

    • Product name 변경 : 예를 들어 'Recorder'를 추가
  • Project Settings / Player / Resolution and Presentation / Resolution

    • 전체 화면 모드 : 윈도우
    • 기본 화면 너비 : 640
    • 기본 화면 높이 : 380
    • 크기 조정 가능 : No
    • 전체 화면 허용 : No

일반 클라이언트 컴파일

따라서 일반 클라이언트 애플리케이션을 컴파일하려면 다음 세 단계를 수행해야 합니다:

1/ AvatarSelection 씬을 엽니다: LoadMainSceneInRecorderMode 게임 객체에서 Is Recorder Compilation Mode의 선택을 취소합니다.

2/ MeetingRoom 씬 열기 : 게임 객체인 ExtendedRigSelection 클래스에서 Selection Mode 파라미터를 Selected by User Pref로 설정합니다.

3/ 일부 유니티 파라미터 변경:

fusion meeting room screen sharing normal unity parameters
  • Project Settings / Player :

    • Product name 변경 : 예를 들어 'Client' 추가
  • Project Settings / Player / Resolution and Presentation / Resolution

    • 전체 화면 모드 : 전체 화면 윈도우
    • 크기 조정 가능 : Yes
    • 전체 화면 허용 : Yes

타사 컴포넌트

Back to top