This document is about: FUSION 2
SWITCH TO

Mixed reality (with local multiplayer)

Level 4
Available in the Industries Circle
Circle

概述

這個範例展示了如何設定一個專案以允許:

  • 共本地化多人玩家,透過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 Jan 29, 2024 Fusion mixedreality 2.0.0 Build 406

測試

為了能夠測試共本地化,應用程式需要透過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讓後端開發人員使用。 總體流程如下:

  1. 當連線到房間的時候,我們建立一個錨,其被儲存在Meta的後端,並且在Fusion上同步其ID
  2. 當另一個使用者連線,他們透過Fusion來接收錨ID
  3. 然後他們向Meta SDK詢問該ID是否出現在他們的房間之中(在場景後面,在Oculus後端上請求ID,並且執行一個本機查找)
  4. 如果找到一個錨,將執行新的使用者的傳送/旋轉

在這個範例中透過SSAManagerOculusUserInfoReferenceAnchor元件來完成這件事。

已連網資料

OculusUserInfo是一個網路行為,位於使用者裝備上,其同步使用者Oculus ID,針對這個使用者的共本地化的狀態,以及與其他它已經共本地化的使用者。

ReferenceAnchor是一個網路行為,針對各個共享空間錨來建立,其同步錨ID("UUID")及與它已經共享的Oculus使用者ID的清單。它所位於的遊戲物件,也包含一個NetworkTransform,來同步其位置。

SSAManager執行所有處理共享空間錨的操作,可能是建立、查找,或以Meta後端來同步。它也追蹤所有錨及使用者,並且在發現共本地化時應用最終的傳送/旋轉到本機使用者。

詳細的共享錨同步流程

處理共享空間錨的基本流程在它們的文檔中的關於SSA章節的「概覽」中說明。

為了更好的了解在範例中的執行SSA的3個類別之間的邏輯和任務重新分割,以下是用於處理共享空間錨的完整流程,以及哪個類別處理各個步驟:

針對所有使用者:

  1. [OculusUserInfo]等待Oculus平台核心SDK初始化
  2. [OculusUserInfo]檢查使用者是否有權使用該應用程式
  3. [OculusUserInfo]取得已登入使用者的Oculus使用者ID
  4. [OculusUserInfo] Fusion網路: 在一個已連網變數中儲存Oculus ID,這樣其他使用者可以存取它

針對建立一個錨的使用者:

  1. [ReferenceAnchor]等待本機Oculus使用者ID成為可用
  2. [ReferenceAnchor]建立一個共享空間錨(使用SSAManager
  3. [ReferenceAnchor]等待已分配UUID的空間錨及等待空間錨準備就緒
  4. [ReferenceAnchor]儲存錨到Meta的後端(使用SSAManager
  5. [ReferenceAnchor] Fusion網路: 在一個已連網變數中儲存錨UUID
  6. [ReferenceAnchor]授權在房間中的所有Oculus使用者ID,以在Meta的後端上存取到錨位置(使用SSAManager
  7. [ReferenceAnchor] Fusion網路: 儲存在一個已連網陣列中可以存取錨的使用者ID的清單。

針對尋找遠端錨的使用者

  1. [ReferenceAnchor] Fusion網路: 接收錨UUID
  2. [ReferenceAnchor] Fusion網路: 檢查使用者清單,以了解針對本機Oculus使用者ID,何時授權在Meta後端上的錨存取
  3. [ReferenceAnchor] 要求Meta SDK查找在現實生活的房間中的錨(使用SSAManager
  4. [ReferenceAnchor] 如果確實在房間中偵測到錨,建立一個共享空間錨,並且繫結它到被偵測到的資料(使用SSAManager
  5. [ReferenceAnchor] 等待共享空間錨被本機化(使用SSAManager
  6. [SSAManager] 重新定位使用者硬體裝備,以讓錨網路位置(從同層級NetworkTransform元件接收)與現實生活的錨位置相匹配

為了協助了解這裡說明的共本機化流程,在房間中心顯示一個資訊面板。

mixed reality debug panel

Oculus儀表板需求

為了能夠使用共享空間錨,需要Oculus使用者ID。

為了存取它,需要在Oculus儀表板上建立一個應用程式。

然後,應該填入資料使用檢查,其中填入請求的使用者ID及使用者個人資料存取。

data use checkup

最後,請注意,為了在Quest上實際存取Oculus使用者ID,需要透過發布通道來分配應用程式(否則,對於使用者ID,您可能總是接收一個0)。

共本機化訣竅

SSA的基於錨的共本機化流程可能是相當敏感的。最重要的事情是,在共本機化體驗中的各個裝置上的房間掃描的品質。

此外,每當相同的給定使用者是房間中的第一個使用者時,有時候共本機化可能永遠不會生效。如果遠端點資料共享設定在頭戴式裝置中有一些問題(如果它設定為真,但沒有考慮這個的話),就會發生這種情況。 為了修正它,在Quest上,前往參數 > 機密 > 裝置授權,並且取消勾選及重新勾選「雲端點」。在參數 > 機密 > 授權 > 空間資料設定做相同的事情,在某些案例中可能也有幫助。

已使用的行業附加元件

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

以下是我們在這個範例中已經使用的附加元件(請注意,其中有一些附加元件有其他附加元件作為所需的相依性,它們沒有在這裡列出,而是在附加元件頁面中列出)。

針對Meta的手的手指同步

Meta OVR手同步附加元件提供手指追蹤,其針對手指追蹤資料來提供一個高水準的壓縮。

繪畫

為了以手指繪畫,已經從繪畫附加元件來建立一個Drawer類別的子類別,FingerDrawer

這個版本使用HandIndexTipDetector元件來接收食指位置(不論它是來自手指追蹤骨架還是控制器追蹤手骨架),並且基於目前的模式來觸發繪畫。

連線管理器

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

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

動態聲音群

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

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

虛擬人偶及RPM虛擬人偶

範例的目前狀態沒有提供一個虛擬人偶選擇畫面,但是整合了虛擬人偶附加元件,所以可以輕易地新增一個選擇畫面到Ready Player Me或簡單虛擬人偶的使用。

目前本機使用者設定簡單地從場景中呈現的RPMAvatarLibrary,來選擇一個隨機虛擬人偶。

第三方元件

Back to top