使用 Unity 為 Android XR 開發

適用的 XR 裝置
本指南可協助您為這類 XR 裝置打造體驗。
XR 頭戴式裝置
有線 XR 眼鏡

本指南將概略說明如何使用 Unity 為 Android XR 開發應用程式。Android XR 支援 Unity 提供的熟悉工具和功能,且 Unity 的 Android XR 支援是以 OpenXR 為基礎,因此 OpenXR 總覽中描述的許多功能,Unity 也支援。

請按照本指南瞭解:

  • Unity 支援 Android XR
    • Unity XR 基本概念
    • 開發及發布 Android XR 應用程式
    • Android XR 的 Unity 套件
      • Unity OpenXR:Android XR 套件
      • Unity 專用 Android XR 擴充功能
      • 功能和相容性注意事項
  • 輸入和互動

Android XR 的 Unity 支援

建構適用於 Android XR 的 Unity 應用程式時,您可以運用最新版 Unity 6 的混合實境工具和功能。包括使用 XR Interaction Toolkit、AR Foundation 和 OpenXR Plugin 的混合實境範本,協助您快速上手。使用 Unity 建構 Android XR 應用程式時,建議使用通用轉譯管線 (URP) 做為轉譯管線,並使用 Vulkan 做為圖形 API。這些功能可讓您運用 Unity 的部分圖形功能,這些功能僅支援 Vulkan。如要進一步瞭解如何調整這些設定,請參閱專案設定指南。

Unity XR 基本概念

如果您是 Unity 或 XR 開發新手,可以參閱 Unity 的 XR 手冊,瞭解基本的 XR 概念和工作流程。XR 手冊包含下列資訊:

開發及發布 Android 應用程式

Unity 提供深入的說明文件,說明如何開發、建構及發布 Android 應用程式,涵蓋的主題包括 Unity 中的 Android 權限、Android 建構設定、建構 Android 應用程式,以及發布至 Google Play。

Android XR 的 Unity 套件

有兩個套件支援建構 Android XR 適用的 Unity 應用程式。這兩個套件都是 XR 供應商外掛程式,可透過 Unity 的 XR 外掛程式管理套件啟用。XR 外掛程式管理工具會新增專案設定,用於管理及提供 XR 外掛程式的載入、初始化、設定和建構支援。如要允許應用程式在執行階段執行 OpenXR 功能,專案必須透過外掛程式管理工具啟用這些功能。

這張圖片顯示如何透過 Unity 編輯器啟用這些功能群組。

圖 1. Unity XR 外掛程式管理畫面範例。

Unity OpenXR Android XR

Unity OpenXR Android XR 套件是 XR 外掛程式,可為 Unity 新增 Android XR 支援。這個 XR 外掛程式提供 Unity 的大部分 Android XR 支援,並為 AR Foundation 專案啟用 Android XR 裝置支援。AR Foundation 專為想打造 AR 或混合實境體驗的開發人員設計。它提供 AR 功能的介面,但本身不實作任何功能。Unity OpenXR Android XR 套件提供實作。如要開始使用這個套件,請參閱套件手冊,其中包含入門指南。

Unity 專用 Android XR 擴充功能

Android XR Extensions for Unity 補充了 Unity OpenXR Android XR 套件,並提供額外功能,協助您打造沉浸式體驗。可以單獨使用,也可以與 Unity OpenXR Android XR 套件搭配使用。

如要開始使用這個套件,請參閱專案設定指南,或快速入門導覽課程:匯入 Android XR Extensions for Unity。

功能和相容性注意事項

下表說明 Unity OpenXR:Android XR 套件和 Android XR Extensions for Unity 套件支援的功能,可用於判斷哪個套件包含您需要的功能,以及任何相容性考量。

功能

Unity OpenXR:Android XR 功能字串

Android XR Extensions for Unity 功能字串

用途和預期行為

AR 工作階段

Android XR:AR 工作階段

  • 功能設定包括「最佳化緩衝區捨棄 (Vulkan)」

Android XR (擴充功能):工作階段管理

  • 功能設定包括子取樣 (Vulkan) 和 URP SpaceWarp (Vulkan)

如要使用任一套件的功能,必須為該套件啟用 AR 工作階段功能。您可以同時啟用這兩組功能,個別功能會據此處理衝突。

裝置追蹤

不適用

不適用

裝置追蹤功能可用於追蹤裝置在實體空間中的位置和旋轉角度。XR Origin GameObject 會使用 XROrigin 元件和 GameObject 階層,搭配 Camera 和 TrackedPoseDriver,自動處理裝置追蹤作業,並將可追蹤項目轉換為 Unity 的座標系統。

相機

Android XR:AR 相機

不適用

這項功能支援光線估算和全螢幕透視。

平面偵測

Android XR:AR 平面

不適用

這項功能可偵測及追蹤實體環境中的平面。

物件追蹤

不適用

Android XR (擴充功能):物件追蹤

這項功能可偵測及追蹤實體環境中的物件,並與參考物件庫搭配使用。

臉部追蹤

Android XR:AR Face

  • 僅限 XR_ANDROID_eye_tracking
  • 不追蹤臉部

Android XR:臉部追蹤

  • XR_ANDROID_face_tracking

Android XR:AR 臉部功能提供虛擬化身眼睛支援。透過 Android XR:臉部追蹤功能,存取使用者的臉部表情。這兩項功能可以搭配使用。

光線投射

Android XR:AR Raycast

  • 平面錨點
  • 深度錨點

不適用

這項功能可讓您投射光線,並計算光線與實體環境中偵測到的平面可追蹤物件或深度可追蹤物件之間的交點。

錨點

Android XR:AR 錨點

不適用

AR 錨點透過 AR Foundation 支援空間、平面和永久錨點。

遮蔽

Android XR:AR 遮蔽

  • 環境深度

不適用

遮蔽功能可讓應用程式中的混合實境內容,隱藏或部分遮蔽在實體環境中的物體後方。

成效指標

Android XR 效能指標

不適用

這項功能可讓您查看 Android XR 裝置的成效指標。

合成圖層

組合層支援 (需要 OpenXR 外掛程式和 XR 組合層)

Android XR:穿透模式組合層

  • XR_ANDROID_composition_layer_passthrough_mesh

使用 Unity 的 Composition Layer Support 建立基本合成層 (例如四邊形、圓柱、投影)。Android XR:穿透組合圖層可用於建立具有自訂網格的穿透圖層,從 Unity 的 GameObject 讀取。

凹形轉譯

凹窩算繪 (需要 OpenXR 外掛程式)

  • 支援眼動追蹤凹形渲染:高解析度區域會以使用者注視的位置為中心,因此使用者較不易察覺

中心點渲染 (舊版)

中心點渲染可降低使用者周邊視覺區域的解析度,加快渲染速度。Unity 的凹型渲染功能僅支援使用 URP 和 Vulkan 的應用程式。Unity 專用 Android XR 擴充功能的 Foveation (舊版) 功能也支援內建轉譯管線和 OpenGL ES。建議您盡可能使用 Unity 的凹形渲染功能,並注意在建構 Android XR 時,建議同時使用 URP 和 Vulkan。

無邊界參考空間

不適用

Android XR:無邊界參考空間

這項功能會將 XRInputSubsystem 追蹤原點模式設為 Unbounded。Unbounded 表示 XRInputSubsystem 會追蹤與世界錨點相關的所有 InputDevice,而世界錨點可能會變更。

環境混合模式

不適用

環境混合模式

這項功能可讓您設定 XR 環境混合模式,控制啟用透視功能時,虛擬圖像與真實環境的混合方式。

Geospatial (VPS)

不適用

Android XR:地理空間

啟用 XRGeospatialManager 即可存取視覺定位系統 (VPS) 功能、檢查位置可用性、計算地理空間姿勢,以及設定平面追蹤功能,用於表面和地理空間錨點。

Google Cloud Auth

不適用

Android XR:Google Cloud

提供雲端後端服務的工作階段驗證設定策略 (API 金鑰、無金鑰和驗證權杖)。

多模態臉孔

不適用

Android XR (擴充功能):多模態臉部

擴充 Unity ARFace,提供可設定的多模態臉部追蹤模式 (XRFaceTrackerMode)。

電池狀態顯示

不適用

電池狀態顯示

允許使用 XRBatteryStateDisplayFeature 查詢已連結控制器和輸入路徑的執行階段電池狀態和充電量。

全域穿透調暗

Android XR:AR 相機

不適用

使用 Unity 的 ARCameraFeature 查詢及設定真實世界穿透調光等級。

系統屬性列舉

不適用

Android XR:系統屬性

使用 XR_ANDROID_enumerate_system_extension_properties 列舉執行階段擴充功能屬性和裝置功能。

建議設定

不適用

Android XR:建議設定

允許使用 XRRecommendedSettingsFeature.TryGetRecommendedSettings 查詢執行階段環境預先啟動狀態 (包括環境混合模式、透視不透明度和有效輸入模式)。

定界框偵測

Android XR:AR 定界框

空間實體 (擴充):定界框

使用 OpenXR Spatial Entities 架構 (SpatialBoundingBoxSubsystem),為實體環境中的 3D 物件提供定界框偵測支援。

可共用的錨點

不適用

空間實體 (擴充功能):可共用的錨點

使用 ARShareableAnchorManager 和 XRShareableAnchorSubsystem 擴充錨點功能,包括與 Android XR:地理空間搭配使用時,附加地理空間錨點 (TryAttachGeospatialAnchor) 和表面錨點 (TryAttachSurfaceAnchorAsync)。

空間容器

不適用

空間容器

允許在全螢幕模式下,於系統管理的 3D 體積容器中算繪應用程式內容,並在 XRSpatialContainerFeature 上提供 API 和回呼事件,用於查詢及要求容器狀態、邊界和顯示設定。

輸入和互動

Android XR 支援多模態自然輸入。

除了手部和眼動追蹤,系統也支援 6DoF 控制器、滑鼠和實體鍵盤等周邊裝置。也就是說,Android XR 應用程式應支援手部互動,且不應假設所有裝置都會隨附控制器。

互動設定檔

Unity 會使用互動設定檔,管理 XR 應用程式與各種 XR 裝置和平台通訊的方式。這些設定檔會為不同的硬體設定建立預期的輸入和輸出內容,進而提升各種平台的相容性和功能一致性。啟用互動設定檔,可確保 XR 應用程式在不同裝置上正常運作、維持一致的輸入對應,並可存取特定 XR 功能。如要設定互動設定檔,請按照下列步驟操作:

  1. 開啟「專案設定」視窗 (選單:依序點選「Edit」>「專案設定」)。
  2. 按一下「XR Plug-in Management」展開外掛程式部分 (如有需要)。
  3. 在 XR 外掛程式清單中選取「OpenXR」。
  4. 在「Interaction Profiles」部分,選取「+」按鈕新增設定檔。
  5. 從清單中選取要新增的設定檔。

手部互動

手部互動 (XR_EXT_hand_interaction) 由 OpenXR 外掛程式提供,您可以啟用手部互動設定檔,在 Unity 輸入系統中公開 <HandInteraction> 裝置版面配置。使用這個互動設定檔,即可透過 OpenXR 定義的四種動作姿勢 (「捏合」、「戳」、「瞄準」和「抓握」) 支援手部輸入。如需其他手部互動或手勢追蹤功能,請參閱本頁的 XR Hands。

視線互動

眼動凝視互動 (XR_EXT_eye_gaze_interaction) 由 OpenXR 外掛程式提供,您可以使用這個版面配置擷取擴充功能傳回的眼部姿勢資料 (位置和旋轉)。進一步瞭解 OpenXR 輸入指南中的眼動追蹤互動。

控制器互動

Android XR 支援 6DoF 控制器的 Oculus Touch 控制器設定檔。這兩種設定檔都由 OpenXR 外掛程式提供。

滑鼠互動

Android XR 滑鼠互動設定檔 (XR_ANDROID_mouse_interaction) 由 Android XR Extensions for Unity 提供。它會在 Unity 輸入系統中公開 <AndroidXRMouse> 裝置版面配置。

手掌姿勢互動

OpenXR 外掛程式支援手掌姿勢互動 (XR_EXT_palm_pose),可在 Unity 輸入系統中公開 <PalmPose> 版面配置。手掌姿勢並非用來取代擴充功能或套件,以執行更複雜的手勢追蹤用途,而是用於放置應用程式專屬的視覺內容,例如虛擬化身視覺效果。手掌姿勢包含手掌位置和方向。

XR Hands

XR Hands 套件可讓您使用 XR_EXT_hand_tracking 和 XR_FB_hand_tracking_aim 存取手勢追蹤資料,並提供包裝函式,將手勢追蹤的手部關節資料轉換為輸入姿勢。如要使用 XR Hands 套件提供的功能,請啟用「手勢追蹤 Subsystem」和「Meta 手勢追蹤 Aim OpenXR」功能。

示範如何啟用手勢追蹤的範例 如果需要更精細的手部姿勢或手部關節資料,或需要使用自訂手勢,XR 手部套件會很有幫助。

詳情請參閱 Unity 的說明文件,瞭解如何在專案中設定 XR Hands。

臉部追蹤信賴區間

XR_ANDROID_face_tracking 擴充功能會提供三個臉部區域的信心值:左上、右上和下臉。這些值介於 0 (不確定) 到 1 (最確定) 之間,代表每個區域的臉部追蹤準確度。

您可以根據這些信心值,逐步停用 Blendshape,或對對應的臉部區域套用視覺濾鏡 (例如模糊處理)。如果是基本臉部,請停用對應臉部區域的混合形狀。

「下半臉」區域代表眼睛下方的所有部位,包括嘴巴、下巴、臉頰和鼻子。兩個上部區域包括臉部左右兩側的眼睛和眉毛區域。

下列 C# 程式碼片段示範如何在 Unity 指令碼中存取及使用信賴度資料:

using UnityEngine;
using Google.XR.Extensions;

public class FaceTrackingConfidence : MonoBehaviour
{
    void Update()
    {
      if (!XRFaceTrackingFeature.IsFaceTrackingExtensionEnabled.HasValue)
      {
        DebugTextTopCenter.text = "XrInstance hasn't been initialized.";
        return;
      }
      else if (!XRFaceTrackingFeature.IsFaceTrackingExtensionEnabled.Value)
      {
        DebugTextTopCenter.text = "XR_ANDROID_face_tracking is not enabled.";
        return;
      }

      for (int x = 0; x < _faceManager.Face.ConfidenceRegions.Length; x++)
      {
        switch (x)
        {
          case (int)XRFaceConfidenceRegion.Lower:
            regionText = "Bottom";
            break;
          case (int)XRFaceConfidenceRegion.LeftUpper:
            regionText = DebugTextConfidenceLeft;
            break;
          case (int)XRFaceConfidenceRegion.RightUpper:
            regionText = DebugTextConfidenceRight;
            break;
        }
    }
}

詳情請參閱 Android XR Extensions for Unity 說明文件。

選擇手部算繪方式

Android XR 支援兩種手部算繪方式:手部網格和預製視覺化工具。

手部網格

Android XR Unity 套件包含手部網格功能,可存取 XR_ANDROID_hand_mesh extension。手部網格功能可提供使用者手部的網格。手部網格包含三角形頂點,代表手部幾何圖形。這項功能旨在提供個人化網格,呈現使用者手部的實際幾何圖形,以便視覺化。

XR Hands 預製物件

XR Hands 套件包含名為 Hands visualizer 的範例,其中包含完整綁定的左手和右手,用於根據情境適當呈現使用者的手部。

系統手勢

Android XR 包含系統手勢,可開啟選單,讓使用者返回、開啟啟動器,或查看執行中應用程式的總覽。使用者可以用慣用手捏合,啟用這個系統選單。

當使用者與系統導覽選單互動時,應用程式只會回應頭部追蹤事件。XR Hands 套件可偵測使用者何時執行特定動作,例如與這個系統導覽選單互動。檢查 AimFlags、SystemGesture 和 DominantHand,即可得知系統何時執行這項動作。如要進一步瞭解 AimFlags,請參閱 Unity 的 Enum MetaAimFlags 說明文件。

XR Interaction Toolkit

XR Interaction Toolkit 套件是高階、以元件為基礎的互動系統,可用於建立 VR 和 AR 體驗。這個架構可讓 Unity 輸入事件提供 3D 和 UI 互動。支援觸覺回饋、視覺回饋和移動等互動工作。


OpenXR™ 和 OpenXR 標誌是 Khronos Group Inc. 擁有的商標,並已在中國、歐盟、日本和英國註冊為商標。