Mixed reality (with local multiplayer)
概述
這個範例展示了如何設定一個專案以允許:
- 共本地化多人玩家,透過Meta共享空間錨整合來完成
- 同步手追蹤,並且從以控制器為基礎的手定位切換到手指追蹤
技術資訊
- 這個範例使用共享模式拓撲,
- 專案已經以Unity 2022.3、Fusion 2,及Photon Voice 2.53來開發,
在您開始之前
為了運行範例:
在PhotonEngine儀表板建立一個Fusion應用程式帳號,然後將其貼上到即時設定(可從Fusion功能表中進入)中的
App Id Fusion
欄位中。在PhotonEngine儀表板建立一個Voice應用程式帳號,然後將其貼上到即時設定中的
App Id Voice
欄位中然後載入
SampleSceneWithNetworkRig
場景並且按下Play
下載
版本 | 發佈日期 | 下載 | |
---|---|---|---|
2.0.0 | May 07, 2024 | Fusion mixedreality 2.0.0 Build 534 |
測試
為了能夠測試共本地化,應用程式需要透過Meta發布通道來分配。
如果您在測試應用程式上遇到困難,請立即在我們的Discord上加入我們。
處理輸入
Meta Quest(控制器追蹤)
- 拿取:首先將您的手放到物件上,然後使用控制器拿取按鈕來拿取它
- 繪畫:如果您的手沒有放在可拿取物件上,使用控制器的觸發按鈕來開始繪畫。在您畫完最後一條線的幾秒鐘之後,將完成繪畫,然後一個錨將讓它變成可拿取
Meta Quest(手追蹤)
- 拿取:以您的食指及拇指捏住物件,在您的手指持續捏住的同時拿取它
- 繪畫:如果您的手沒有放在可拿取物件上,捏住您的手指以開始繪畫。在您畫完最後一條線的幾秒鐘之後,將完成繪畫,然後一個錨將讓它變成可拿取
資料夾架構
主要資料夾/MixedReality
含有所有特定於這個範例的元素。
資料夾/IndustriesComponents
含有與其他行業範例如Fusion會議範例,或Fusion Metaverse範例共享的元件。
/Photon
資料夾含有Fusion及Photon Voice SDK。
/Photon/FusionXRShared
資料夾含有來自VR共享範例的裝備及拿取邏輯,其建立一個FusionXR共享輕量SDK,這可以與其他專案共享。
/Photon/FusionAddons
資料夾含有這個範例中使用的行業附加元件。
/XR
資料夾含有針對虛擬實境的設置檔案。
架構概述
混合實境 相依於與VR共享頁面中說明的相同的程式碼基礎,尤其是在裝備同步方面。
這裡使用的拿取系統,是VR共享 - 本機裝備拿取頁面中說明的替代性的「本機裝備拿取」執行方式。
透過共享空間錨進行共本地化
在混合實境中,如果多個使用者在相同的房間之中,那麼看到他們的虛擬人偶在他們的現實生活中位置上,將是更合理舒適的。為了做到這點,如果在連線時一個使用者已經在房間中出現,新的使用者將在Unity房間中進行傳送及重新導向,這樣他們在現實生活中看見的位置可以匹配在網路房間中的位置。
為了做到這點,使用了共享空間錨。
它們基於共享的現實生活房間雲端點,在Meta後端同步及共享,並且作為ID讓後端開發人員使用。
總體流程如下:
- 當連線到房間的時候,我們建立一個錨,其被儲存在Meta的後端,並且在Fusion上同步其ID
- 當另一個使用者連線,他們透過Fusion來接收錨ID
- 然後他們向Meta SDK詢問該ID是否出現在他們的房間之中(在場景後面,在Oculus後端上請求ID,並且執行一個本機查找)
- 如果找到一個錨,將執行新的使用者的傳送/旋轉
在這個範例中透過SSAManager
、OculusUserInfo
及ReferenceAnchor
元件來完成這件事。
已連網資料
OculusUserInfo
是一個網路行為,位於使用者裝備上,其同步使用者Oculus ID,針對這個使用者的共本地化的狀態,以及與其他它已經共本地化的使用者。
ReferenceAnchor
是一個網路行為,針對各個共享空間錨來建立,其同步錨ID("UUID")及與它已經共享的Oculus使用者ID的清單。它所位於的遊戲物件,也包含一個NetworkTransform
,來同步其位置。
SSAManager
執行所有處理共享空間錨的操作,可能是建立、查找,或以Meta後端來同步。它也追蹤所有錨及使用者,並且在發現共本地化時應用最終的傳送/旋轉到本機使用者。
詳細的共享錨同步流程
處理共享空間錨的基本流程在它們的文檔中的關於SSA章節的「概覽」中說明。
為了更好的了解在範例中的執行SSA的3個類別之間的邏輯和任務重新分割,以下是用於處理共享空間錨的完整流程,以及哪個類別處理各個步驟:
針對所有使用者:
- [
OculusUserInfo
]等待Oculus平台核心SDK初始化 - [
OculusUserInfo
]檢查使用者是否有權使用該應用程式 - [
OculusUserInfo
]取得已登入使用者的Oculus使用者ID - [
OculusUserInfo
] Fusion網路: 在一個已連網變數中儲存Oculus ID,這樣其他使用者可以存取它
針對建立一個錨的使用者:
- [
ReferenceAnchor
]等待本機Oculus使用者ID成為可用 - [
ReferenceAnchor
]建立一個共享空間錨(使用SSAManager
) - [
ReferenceAnchor
]等待已分配UUID的空間錨及等待空間錨準備就緒 - [
ReferenceAnchor
]儲存錨到Meta的後端(使用SSAManager
) - [
ReferenceAnchor
] Fusion網路: 在一個已連網變數中儲存錨UUID - [
ReferenceAnchor
]授權在房間中的所有Oculus使用者ID,以在Meta的後端上存取到錨位置(使用SSAManager
) - [
ReferenceAnchor
] Fusion網路: 儲存在一個已連網陣列中可以存取錨的使用者ID的清單。
針對尋找遠端錨的使用者
- [
ReferenceAnchor
] Fusion網路: 接收錨UUID - [
ReferenceAnchor
] Fusion網路: 檢查使用者清單,以了解針對本機Oculus使用者ID,何時授權在Meta後端上的錨存取 - [
ReferenceAnchor
] 要求Meta SDK查找在現實生活的房間中的錨(使用SSAManager
) - [
ReferenceAnchor
] 如果確實在房間中偵測到錨,建立一個共享空間錨,並且繫結它到被偵測到的資料(使用SSAManager
) - [
ReferenceAnchor
] 等待共享空間錨被本機化(使用SSAManager
) - [
SSAManager
] 重新定位使用者硬體裝備,以讓錨網路位置(從同層級NetworkTransform
元件接收)與現實生活的錨位置相匹配
為了協助了解這裡說明的共本機化流程,在房間中心顯示一個資訊面板。
Oculus儀表板需求
為了能夠使用共享空間錨,需要Oculus使用者ID。
為了存取它,需要在Oculus儀表板上建立一個應用程式。
然後,應該填入資料使用檢查,其中填入請求的使用者ID及使用者個人資料存取。
最後,請注意,為了在Quest上實際存取Oculus使用者ID,需要透過發布通道來分配應用程式(否則,對於使用者ID,您可能總是接收一個0)。
共本機化訣竅
SSA的基於錨的共本機化流程可能是相當敏感的。最重要的事情是,在共本機化體驗中的各個裝置上的房間掃描的品質。
此外,每當相同的給定使用者是房間中的第一個使用者時,有時候共本機化可能永遠不會生效。如果遠端點資料共享設定在頭戴式裝置中有一些問題(如果它設定為真,但沒有考慮這個的話),就會發生這種情況。
為了修正它,在Quest上,前往參數 > 機密 > 裝置授權,並且取消勾選及重新勾選「雲端點」。在參數 > 機密 > 授權 > 空間資料設定做相同的事情,在某些案例中可能也有幫助。
已使用的行業附加元件
我們提供一個可重複使用的附加元件的清單給我們的行業圈會員,以加速3D/XR應用程式的原型開發。
請參見行業附加元件以取得更多細節。
以下是我們在這個範例中已經使用的附加元件(請注意,其中有一些附加元件有其他附加元件作為所需的相依性,它們沒有在這裡列出,而是在附加元件頁面中列出)。
針對Meta的手的手指同步
由Meta OVR手同步附加元件提供手指追蹤,其針對手指追蹤資料來提供一個高水準的壓縮。
繪畫
為了以手指繪畫,已經從繪畫附加元件來建立一個Drawer
類別的子類別,FingerDrawer
。
這個版本使用HandIndexTipDetector
元件來接收食指位置(不論它是來自手指追蹤骨架還是控制器追蹤手骨架),並且基於目前的模式來觸發繪畫。
連線管理器
我們使用ConnectionManager
附加元件以管理連線啟動,並且生成使用者代表。
請參見連線管理器附加元件以取得更多細節。
動態聲音群
我們使用動態聲音群附加元件以讓使用者一起聊天,同時考慮到使用者之間的距離,以最佳化舒適性及頻寬耗用。
請參見動態聲音群行業附加元件以取得更多細節。
虛擬人偶及RPM虛擬人偶
範例的目前狀態沒有提供一個虛擬人偶選擇畫面,但是整合了虛擬人偶附加元件,所以可以輕易地新增一個選擇畫面到Ready Player Me或簡單虛擬人偶的使用。
目前本機使用者設定簡單地從場景中呈現的RPMAvatarLibrary
,來選擇一個隨機虛擬人偶。
第三方元件
- Oculus整合
- Oculus唇形同步
- Oculus範例框架手
- Ready player me
- 聲音