Meeting
概述
這個範例展示了如何以Fusion 2開發一個簡單的會議應用程式的方法。
首先,玩家在選擇虛擬人偶畫面上來自訂其虛擬人偶。然後它們可以移動到會議房間,在其中已經設定好一些工具及功能。
這裡有一些最值得一提的功能:
- 公共/私人群以將使用者分隔到不同的房間
- 關門時的房間隔音
- 3D筆附有各種顏色
- 2D筆附有在垂直或水平白板上的可移動的繪畫
- 畫面共享
- 社交距離
- 可互動的選單以提供訣竅給使用者
如果使用者在PC或MAC上啟動範例,它可以選擇桌面模式(使用鍵盤及滑鼠)或VR模式(Meta Quest頭戴式裝置)。
技術資訊
- 這個範例使用共享模式拓撲,
- 組建可用於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.1 | May 31, 2024 | Fusion meeting 2.0.1 Build 563 |
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
附加元件來集中在應用程式中使用的聲音,並且管理觸覺及聲音回饋。
請參見回饋附加元件以取得更多細節。
動態聲音群
我們使用動態聲音群附加元件以讓使用者一起聊天,同時考慮到使用者之間的距離,以最佳化舒適性及頻寬耗用。
請參見動態聲音群行業附加元件以取得更多細節。
音訊房間
另外,我們希望描繪為了不同房間的人來隔音的方法。
因此我們已經在場景中建立了由滑門分隔的兩個房間。
我們使用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()
停止畫面共享,以節省資源及頻寬。
請參見畫面共享行業附加元件以取得更多細節。
請注意:
- FullHD解析度(1920x1080)中的畫面共享在Quest2及Quest3裝置上運作正常。
- 一些更高的解析度(例如3440x1440)在Quest2上運作正常,但Quest3不再支援,這是因為操作系統的更新。
繪畫
房間含有白板,其附有2D筆及幾種3D筆。當完成繪畫時(也就是當使用者放開「觸發」按鈕時),將顯示一個把手。這允許使用者來移動2D或3D繪畫。
請參見3D及2D繪畫行業附加元件以取得更多細節。
阻擋接觸
我們使用這個附加元件以在白板表面來阻擋2D筆及繪畫的圖釘。
請參見阻擋接觸行業附加元件以取得更多細節。
可互動的選單
這個附加元件用於顯示如何在繪畫上使用筆或一個刪除按鈕的訣竅。
請參見可互動的選單行業附加元件以取得更多細節。
已擴展的裝備選擇
我們使用這個附加元件以在這個範例中所需的各種裝備中切換。實際上在這個範例中我們需要三個設置:
- 針對Meta組建的VR裝備,
- 針對Windows及Mac客戶端的桌面裝備,
- 沒有裝備來組建負責在畫面上串流桌面的Windows記錄器應用程式(實際上在這個模式中我們不需要生成一個網路裝備)。
因此已擴展的裝備選擇設定如下:
請參見已擴展的裝備選擇行業附加元件以取得更多細節。
桌面專注模式
因為在3D模式中在白板上使用2D筆來繪畫非常困難,ScreenDrawing
類別仰賴於「桌面專注模式」附加元件,以啟用專注模式並且顯示一個特定使用者介面。
請參見桌面專注行業附加元件以取得更多細節。
編譯
針對正常客戶端及記錄器客戶端(為了在畫面上串流一個桌面),我們使用相同的Unity場景。
因此取決於我們希望編譯的客戶端,我們必須做出一些手動的調整。
記錄器客戶端編譯
因此為了編譯記錄器應用程式,您必須遵循2個步驟:
1/ 開啟AvatarSelection
場景:在LoadMainSceneInRecorderMode
遊戲物件上,勾選方框Is Recorder Compilation Mode
以直接載入主要場景,而不需要載入虛擬人偶選擇場景。
需要這個訣竅,因為針對正常客戶端及記錄器客戶端,場景清單必須是相同的。
2/ 開啟MeetingRoom
場景:在ExtendedRigSelection
遊戲物件上,ExtendedRigSelection
類別,設定Selection Mode
參數為Selected by User Pref
。
3/ 更改一些Unity參數:
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參數:
Project Settings
/Player
;- 更改
Product name
:舉例而言,新增「客戶端」
- 更改
Project Settings
/Player
/Resolution and Presentation
/Resolution
- 全螢幕模式:全螢幕視窗
- 可調整大小:是
- 允許全螢幕:是
第三方元件
- Oculus整合
- Oculus唇形同步
- Oculus範例框架手
- Ready player me
- 聲音
- Video