This document is about: FUSION 2
SWITCH TO

Meeting

Level 4
Available in the Industries Circle
Circle

概述

這個範例展示了如何以Fusion 2開發一個簡單的會議應用程式的方法。

首先,玩家在選擇虛擬人偶畫面上來自訂其虛擬人偶。然後它們可以移動到會議房間,在其中已經設定好一些工具及功能。

這裡有一些最值得一提的功能:

  • 公共/私人群以將使用者分隔到不同的房間
  • 關門時的房間隔音
  • 3D筆附有各種顏色
  • 2D筆附有在垂直或水平白板上的可移動的繪畫
  • 畫面共享
  • 社交距離
  • 可互動的選單以提供訣竅給使用者

如果使用者在PC或MAC上啟動範例,它可以選擇桌面模式(使用鍵盤及滑鼠)或VR模式(Meta Quest頭戴式裝置)。

fusion meeting overview

技術資訊

  • 這個範例使用共享模式拓撲,
  • 組建可用於PC、Mac、Meta Quest及WebGL,
  • 專案已經透過Unity 2021.3、Fusion 2、Photon Voice 2.53來開發,
  • 支援2個虛擬人偶解決方案(自製簡單虛擬人偶及Ready Player Me虛擬人偶),

在您開始之前

為了運行範例:

  • PhotonEngine儀表板建立一個Fusion應用程式帳號,然後將其貼上到即時設定(可從Fusion功能表中進入)中的App Id Fusion欄位中。

  • PhotonEngine儀表板建立一個Voice應用程式帳號,然後將其貼上到即時設定中的App Id Voice欄位中

  • 然後載入AvatarSelection場景並且按下Play

下載

版本 發佈日期 下載
2.0.0 Apr 18, 2024 Fusion meeting 2.0.0 Build 509

WebGL

可以針對一個WebGL目標來組建會議範例。

您可以在這裡(透過Fusion1)測試Metaverse WebGL組建。

因為有一些關於WebGL組建的Unity限制,有一些地方需要特別注意以順利工作,其在這裡有說明。

請注意,這個WebGL組建不支援WebXR(在瀏覽器中的虛擬實境):雖然它可以透過一些開源庫來實現,比如unity-webxr-export,但在Unity中預設還不支援它,因此這裡不展示。

處理輸入

桌面

鍵盤
  • 移動:WASD或ZQSD以行走
  • 旋轉:QE或AE以旋轉
  • 筆顏色:C以更換筆顏色
  • 選單:Esc以開啟或關閉應用程式選單
滑鼠
  • 移動:以滑鼠左鍵按一下,以顯示一個指標。您將放開時傳送到任何已接受的目標
  • 旋轉:持續按住滑鼠右鍵,並且移動滑鼠以旋轉檢視點
  • 移動及旋轉:持續按住滑鼠左右鍵以向前移動。您仍可以移動滑鼠以旋轉
  • 拿取:將滑鼠放到物件上,並且使用滑鼠左鍵來拿取它。

Meta Quest

  • 傳送:按下A、B、X、Y,或任何搖桿以顯示一個指標。您將放開時傳送到任何已接受的目標
  • 觸碰(也就是針對聊天氣泡鎖定按鈕):簡單地將您的手放到按鈕上以切換它
  • 拿取:首先將您的手放到物件上,然後使用控制器拿取按鈕來拿取它

資料夾架構

主要資料夾/MeetingRoom含有所有特定於這個範例的元素。

資料夾/IndustriesComponents含有與其他行業範例如Fusion Metaverse範例共享的元件。

/Photon資料夾含有Fusion及Photon Voice SDK。

/Photon/FusionXRShared資料夾含有來自VR共享範例的裝備及拿取邏輯,其建立一個FusionXR共享輕量SDK,這可以與其他專案共享。

/Photon/FusionAddons資料夾含有這個範例中使用的行業附加元件。

/XR資料夾含有針對虛擬實境的設置檔案。

架構概述

會議 範例仰賴於與VR共享頁面中說明的相同的程式碼基礎,尤其是在裝備同步方面。

這裡使用的拿取系統,是VR共享 - 本機裝備拿取頁面中說明的替代性的「本機裝備拿取」執行方式。

在這個基礎之外,本範例如同其他行業範例,含有FusionXR共享或行業附加元件的一些擴展程式,以處理一些可重複使用的功能,比如已同步光線、運動驗證、觸控、傳送平順或一個注視系統。

已使用的行業附加元件

我們提供一個可重複使用的附加元件的清單給我們的行業圈會員,以加速3D/XR應用程式的原型開發。 請參見行業附加元件以取得更多細節。

空間

我們重新使用了與Metaverse範例中使用的相同的方法,以允許相同房間的多個執行個體。因此,使用者可以透過指定一個房間號碼來加入公共房間或私人會議房間。可以在虛擬人偶選擇畫面或稍後透過應用程式選單來做出這個選擇。

請參見空間行業附加元件以取得更多細節。

連線管理器

我們使用ConnectionManager附加元件以管理連線啟動,並且生成使用者代表。

請參見連線管理器附加元件以取得更多細節。

回饋

我們使用Feedback附加元件來集中在應用程式中使用的聲音,並且管理觸覺及聲音回饋。

請參見回饋附加元件以取得更多細節。

動態聲音群

我們使用動態聲音群附加元件以讓使用者一起聊天,同時考慮到使用者之間的距離,以最佳化舒適性及頻寬耗用。

請參見動態聲音群行業附加元件以取得更多細節。

音訊房間

另外,我們希望描繪為了不同房間的人來隔音的方法。 因此我們已經在場景中建立了由滑門分隔的兩個房間。

fusion meeting sliding door audio room

我們使用AudioRoom附加元件以根據門狀態來管理動態聲音群更新。由按鈕來觸發門開啟及關閉,該按鈕調用AudioDoor.ToogleDoor()方法。 門動畫由TriggerDoorAnimation類別來管理,該類別接聽從AudioDoor類別接收的OnStatusChange()事件。

請參見音訊房間行業附加元件以取得更多細節。

運動驗證

我們使用運動驗證附加元件以限制玩家的移動(待在房間、迴避家具等等)。

請參見運動驗證行業附加元件以取得更多細節。

社交距離

為了確保舒適性及空間行為距離,我們使用社交距離附加元件。

請參見社交距離行業附加元件以取得更多細節。

畫面共享

使用者可以共享它們的電腦畫面,並且在會議房間的大型畫面上廣播它。 與「舞台畫面共享」範例不同,在這裡沒有授權管理:上一個開始廣播的使用者將控制畫面。這由執行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()停止畫面共享,以節省資源及頻寬。

請參見畫面共享行業附加元件以取得更多細節。

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

請注意:

  • FullHD解析度(1920x1080)中的畫面共享在Quest2及Quest3裝置上運作正常。
  • 一些更高的解析度(例如3440x1440)在Quest2上運作正常,但Quest3不再支援,這是因為操作系統的更新。

繪畫

房間含有白板,其附有2D筆及幾種3D筆。當完成繪畫時(也就是當使用者放開「觸發」按鈕時),將顯示一個把手。這允許使用者來移動2D或3D繪畫。

請參見3D及2D繪畫行業附加元件以取得更多細節。

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

阻擋接觸

我們使用這個附加元件以在白板表面來阻擋2D筆及繪畫的圖釘。

請參見阻擋接觸行業附加元件以取得更多細節。

可互動的選單

這個附加元件用於顯示如何在繪畫上使用筆或一個刪除按鈕的訣竅。

請參見可互動的選單行業附加元件以取得更多細節。

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

已擴展的裝備選擇

我們使用這個附加元件以在這個範例中所需的各種裝備中切換。實際上在這個範例中我們需要三個設置:

  • 針對Meta組建的VR裝備,
  • 針對Windows及Mac客戶端的桌面裝備,
  • 沒有裝備來組建負責在畫面上串流桌面的Windows記錄器應用程式(實際上在這個模式中我們不需要生成一個網路裝備)。

因此已擴展的裝備選擇設定如下:

fusion meeting extended rig selection

請參見已擴展的裝備選擇行業附加元件以取得更多細節。

桌面專注模式

因為在3D模式中在白板上使用2D筆來繪畫非常困難,ScreenDrawing類別仰賴於「桌面專注模式」附加元件,以啟用專注模式並且顯示一個特定使用者介面。

fusion meeting desktop focus mode

請參見桌面專注行業附加元件以取得更多細節。

編譯

針對正常客戶端及記錄器客戶端(為了在畫面上串流一個桌面),我們使用相同的Unity場景。 因此取決於我們希望編譯的客戶端,我們必須做出一些手動的調整。

記錄器客戶端編譯

因此為了編譯記錄器應用程式,您必須遵循2個步驟:

1/ 開啟AvatarSelection場景:在LoadMainSceneInRecorderMode遊戲物件上,勾選方框Is Recorder Compilation Mode以直接載入主要場景,而不需要載入虛擬人偶選擇場景。 需要這個訣竅,因為針對正常客戶端及記錄器客戶端,場景清單必須是相同的。

2/ 開啟MeetingRoom場景:在ExtendedRigSelection遊戲物件上,ExtendedRigSelection類別,設定Selection Mode參數為Selected by User Pref

3/ 更改一些Unity參數:

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

    • 更改Product name:舉例而言,新增「記錄器」
  • Project Settings / Player / Resolution and Presentation / Resolution

    • 全螢幕模式:已視窗化
    • 預設畫面寬度:640
    • 預設畫面高度:380
    • 可調整大小:否
    • 允許全螢幕:否

正常客戶端編譯

因此為了編譯正常客戶端應用程式,您必須遵循3個步驟:

1/ 開啟AvatarSelection場景:在LoadMainSceneInRecorderMode遊戲物件上,取消勾選方框Is Recorder Compilation Mode

2/ 開啟MeetingRoom場景:在ExtendedRigSelection遊戲物件上,ExtendedRigSelection類別,設定Selection Mode參數為Selected by User Pref

3/ 更改一些Unity參數:

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

    • 更改Product name:舉例而言,新增「客戶端」
  • Project Settings / Player / Resolution and Presentation / Resolution

    • 全螢幕模式:全螢幕視窗
    • 可調整大小:是
    • 允許全螢幕:是

第三方元件

Back to top