Mengembangkan dengan Unity untuk Android XR

Perangkat XR yang kompatibel
Panduan ini membantu Anda membangun pengalaman untuk jenis perangkat XR ini.
Headset XR
Kacamata XR Berkabel

Panduan ini memberikan ringkasan tentang pengembangan dengan Unity untuk Android XR. Android XR berfungsi dengan alat dan fitur yang sudah Anda kenal dari Unity, dan karena dukungan Android XR Unity dibangun di atas OpenXR, banyak fitur yang dijelaskan dalam Ringkasan OpenXR juga didukung di Unity.

Ikuti panduan ini untuk mempelajari:

  • Dukungan Unity untuk Android XR
    • Dasar-dasar Unity XR
    • Mengembangkan dan memublikasikan aplikasi untuk Android XR
    • Paket Unity untuk Android XR
      • Unity OpenXR: Paket Android XR
      • Ekstensi Android XR untuk Unity
      • Pertimbangan Fitur dan Kompatibilitas
  • Input dan interaksi

Dukungan Unity untuk Android XR

Saat membangun aplikasi Unity untuk Android XR, Anda dapat memanfaatkan alat dan kemampuan mixed reality di Unity 6 versi terbaru. Ini termasuk template mixed reality yang menggunakan XR Interaction Toolkit, AR Foundation, dan Plugin OpenXR, untuk membantu Anda memulai dengan cepat. Saat membangun aplikasi dengan Unity untuk Android XR, sebaiknya gunakan Universal Render Pipeline (URP) sebagai pipeline render dan Vulkan sebagai Graphics API. Fitur ini memungkinkan Anda memanfaatkan beberapa fitur grafis Unity, yang hanya didukung dengan Vulkan. Tinjau panduan penyiapan project untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi setelan ini.

Dasar-Dasar Unity XR

Jika Anda baru mengenal Unity atau pengembangan XR, Anda dapat membaca Panduan XR Unity untuk memahami konsep dan alur kerja XR dasar. Manual XR berisi informasi tentang:

Mengembangkan dan memublikasikan aplikasi untuk Android

Unity menyediakan dokumentasi mendalam untuk mengembangkan, membangun, dan memublikasikan untuk Android, yang mencakup topik termasuk Izin Android di Unity, Setelan Build Android, Membangun aplikasi untuk Android, dan Mengirim ke Google Play.

Paket Unity untuk Android XR

Ada dua paket yang memberikan dukungan untuk membangun aplikasi Unity untuk Android XR. Kedua paket ini adalah plug-in penyedia XR, yang dapat diaktifkan melalui paket XR Plug-in Management Unity. Pengelola XR plugin menambahkan Setelan Project untuk mengelola dan menawarkan bantuan terkait pemuatan, inisialisasi, setelan, dan dukungan build untuk XR plugin. Agar aplikasi Anda dapat menjalankan fitur OpenXR saat runtime, project harus mengaktifkan fitur ini melalui pengelola plugin.

Gambar ini menunjukkan contoh tempat Anda dapat mengaktifkan grup fitur ini melalui editor Unity.

Gambar 1. Contoh layar Unity XR Plug-in Management.

Unity OpenXR Android XR

Paket Android XR Unity OpenXR adalah XR Plug-in untuk menambahkan dukungan Android XR ke Unity. Plugin XR ini menyediakan sebagian besar dukungan Android XR untuk Unity, dan memungkinkan dukungan perangkat Android XR untuk project AR Foundation. AR Foundation dirancang untuk developer yang ingin membuat pengalaman AR atau mixed reality. Library ini menyediakan antarmuka untuk fitur AR, tetapi tidak mengimplementasikan fitur apa pun. Paket Android XR Unity OpenXR menyediakan implementasinya. Untuk mulai menggunakan paket ini, lihat panduan paket, yang berisi panduan Memulai.

Ekstensi Android XR untuk Unity

Android XR Extensions untuk Unity melengkapi paket Android XR Unity OpenXR, dan menyertakan fitur tambahan untuk membantu Anda membangun pengalaman imersif. Paket ini dapat digunakan sendiri atau bersama dengan paket Android XR Unity OpenXR.

Untuk mulai menggunakan paket ini, ikuti panduan penyiapan project atau panduan memulai untuk mengimpor Android XR Extensions untuk Unity.

Pertimbangan Fitur dan Kompatibilitas

Tabel berikut menjelaskan fitur yang didukung oleh paket Unity OpenXR: Android XR dan paket Android XR Extensions untuk Unity, dan dapat digunakan untuk menentukan paket mana yang berisi fitur yang Anda butuhkan dan pertimbangan kompatibilitas apa pun.

Fitur

Unity OpenXR: String fitur Android XR

String fitur Android XR Extensions untuk Unity

Kasus penggunaan dan perilaku yang diharapkan

Sesi AR

Android XR: Sesi AR

  • Setelan fitur mencakup Optimize Buffer Discards (Vulkan)

Android XR (Ekstensi): Pengelolaan Sesi

  • Setelan fitur mencakup Subsampling (Vulkan) dan URP SpaceWarp (Vulkan)

Untuk menggunakan fitur dari salah satu paket, Anda harus mengaktifkan fitur AR Session untuk paket tersebut. Anda dapat mengaktifkan kedua set fitur secara bersamaan; setiap fitur akan menangani konflik sebagaimana mestinya.

Pelacakan perangkat

T/A

T/A

Pelacakan perangkat digunakan untuk melacak posisi dan rotasi perangkat di ruang fisik. GameObject XR Origin otomatis menangani pelacakan perangkat dan mengubah objek yang dapat dilacak menjadi sistem koordinat Unity menggunakan komponen XROrigin dan hierarki GameObject dengan Kamera dan TrackedPoseDriver.

Kamera

Android XR: Kamera AR

T/A

Fitur ini memberikan dukungan untuk estimasi pencahayaan dan passthrough layar penuh.

Deteksi bidang

Android XR: AR Plane

T/A

Fitur ini memberikan dukungan untuk mendeteksi dan melacak permukaan datar di lingkungan fisik.

Pelacakan objek

T/A

Android XR (Ekstensi): Pelacakan Objek

Fitur ini memberikan dukungan untuk mendeteksi dan melacak objek di lingkungan fisik, yang digunakan bersama dengan library objek referensi.

Pelacakan wajah

Android XR: AR Face

  • Khusus XR_ANDROID_eye_tracking
  • Tidak ada pelacakan wajah

Android XR: Pelacakan Wajah

  • XR_ANDROID_face_tracking

Dukungan mata avatar disediakan melalui fitur Android XR: AR Face. Mengakses ekspresi wajah pengguna melalui fitur Android XR: Pelacakan Wajah. Kedua fitur ini dapat digunakan bersama.

Ray cast

Android XR: AR Raycast

  • Anchor Bidang
  • Depth Anchor

T/A

Fitur ini memungkinkan Anda mentransmisikan sinar dan menghitung persimpangan antara sinar tersebut dan bidang yang dapat dilacak atau kedalaman yang dapat dilacak yang terdeteksi di lingkungan fisik.

Anchor

Android XR: Anchor AR

T/A

Anchor AR mendukung anchor spasial, bidang, dan persisten melalui AR Foundation.

Oklusi

Android XR: AR Occlusion

  • Kedalaman Lingkungan

T/A

Oklusi memungkinkan konten mixed reality di aplikasi Anda tampak tersembunyi atau sebagian tertutup di balik objek di lingkungan fisik.

Metrik Performa

Metrik Performa Android XR

T/A

Gunakan fitur ini untuk mengakses metrik performa perangkat Android XR.

Lapisan Komposisi

Dukungan Lapisan Komposisi (Plugin OpenXR dan Lapisan Komposisi XR diperlukan)

Android XR: Lapisan Komposisi Passthrough

  • XR_ANDROID_composition_layer_passthrough_mesh

Gunakan Dukungan Lapisan Komposisi Unity untuk membuat lapisan komposisi dasar (misalnya, quad, silinder, proyeksi). Android XR: Lapisan Komposisi Passthrough dapat digunakan untuk membuat lapisan passthrough dengan mesh kustom, yang membaca dari GameObject Unity.

Foveated Rendering

Foveated Rendering (Plugin OpenXR diperlukan)

  • Mendukung foveated rendering yang dilacak mata: area resolusi yang lebih tinggi dipusatkan di tempat pengguna melihat, sehingga tidak terlalu terlihat oleh pengguna

Foveation (Lama)

Foveated rendering memungkinkan percepatan rendering dengan menurunkan resolusi area dalam penglihatan periferal pengguna. Fitur foveated rendering Unity hanya didukung untuk aplikasi yang menggunakan URP dan Vulkan. Fitur Foveation (Lama) di Android XR Extensions untuk Unity juga mendukung Pipeline Render Bawaan dan OpenGL ES. Sebaiknya gunakan fitur foveated rendering Unity jika memungkinkan, dan perhatikan bahwa URP dan Vulkan direkomendasikan saat mem-build untuk Android XR.

Ruang Referensi Tanpa Batas

T/A

Android XR: Ruang Referensi Tanpa Batas

Fitur ini menetapkan mode asal pelacakan XRInputSubsystem ke Unbounded. Unbounded menunjukkan bahwa XRInputSubsystem melacak semua InputDevice sehubungan dengan anchor dunia, yang dapat berubah.

Mode Campuran Lingkungan

T/A

Mode Campuran Lingkungan

Fitur ini memungkinkan Anda menyetel Mode Penggabungan Lingkungan XR, yang mengontrol cara gambar virtual digabungkan dengan lingkungan dunia nyata saat passthrough diaktifkan.

Geospasial (VPS)

T/A

Android XR: Geospatial

Memungkinkan XRGeospatialManager mengakses kemampuan Sistem Pemosisi Visual (VPS), memeriksa ketersediaan lokasi, menghitung pose geospasial, dan mengonfigurasi pelacakan bidang untuk anchor permukaan dan geospasial.

Google Cloud Auth

T/A

Android XR: Google Cloud

Menyediakan strategi konfigurasi autentikasi sesi (Kunci API, Tanpa Kunci, dan Token Autentikasi) untuk layanan yang didukung cloud.

Wajah Multimodal

T/A

Android XR (Ekstensi): Multimodal Face

Memperluas Unity ARFace dengan modalitas pelacakan wajah multimodal yang dapat dikonfigurasi (XRFaceTrackerMode).

Tampilan Status Baterai

T/A

Tampilan Status Baterai

Memungkinkan kueri status baterai runtime dan tingkat pengisian daya pengontrol dan jalur input yang terhubung menggunakan XRBatteryStateDisplayFeature.

Peredupan Passthrough Global

Android XR: Kamera AR

T/A

Memungkinkan pembuatan kueri dan penetapan tingkat peredupan passthrough dunia nyata menggunakan ARCameraFeature Unity.

Enumerasi Properti Sistem

T/A

Android XR: Properti Sistem

Menghitung properti ekstensi runtime dan kemampuan perangkat menggunakan XR_ANDROID_enumerate_system_extension_properties.

Setelan yang Direkomendasikan

T/A

Android XR: Setelan yang Direkomendasikan

Memungkinkan kueri status prapeluncuran lingkungan runtime (termasuk mode penggabungan lingkungan, opasitas passthrough, dan modalitas input aktif) menggunakan XRRecommendedSettingsFeature.TryGetRecommendedSettings.

Deteksi Kotak Pembatas

Android XR: Kotak Pembatas AR

Entitas Spasial (Ekstensi): Kotak Pembatas

Memberikan dukungan deteksi kotak pembatas untuk objek 3D di lingkungan fisik menggunakan framework Entity Spasial OpenXR (SpatialBoundingBoxSubsystem).

Anchor yang Dapat Dibagikan

T/A

Spatial Entities (Ekstensi): Anchor yang Dapat Dibagikan

Memperluas kemampuan anchor menggunakan ARShareableAnchorManager dan XRShareableAnchorSubsystem, termasuk memasang anchor geospasial (TryAttachGeospatialAnchor) dan anchor permukaan (TryAttachSurfaceAnchorAsync) saat digunakan dengan Android XR: Geospasial.

Penampung Spasial

T/A

Penampung Spasial

Memungkinkan konten aplikasi dirender dalam penampung volumetrik 3D yang dikelola sistem dalam Mode Ruang Penuh, dengan API dan peristiwa callback di XRSpatialContainerFeature untuk membuat kueri dan meminta status, batas, dan visibilitas penampung.

Input dan interaksi

Android XR mendukung input alami multimodal.

Selain pelacakan tangan dan pelacakan gerak mata, periferal seperti pengontrol 6DoF, mouse, dan keyboard fisik juga didukung. Artinya, aplikasi untuk Android XR diharapkan mendukung interaksi tangan, dan tidak dapat diasumsikan bahwa semua perangkat akan dilengkapi dengan pengontrol.

Profil Interaksi

Unity menggunakan profil interaksi untuk mengelola cara aplikasi XR Anda berkomunikasi dengan berbagai perangkat dan platform XR. Profil ini menetapkan input dan output yang diharapkan untuk berbagai konfigurasi hardware, sehingga meningkatkan kompatibilitas dan fungsionalitas yang konsisten di berbagai platform. Dengan mengaktifkan profil interaksi, Anda dapat membantu memastikan bahwa aplikasi XR berfungsi dengan benar di berbagai perangkat, mempertahankan pemetaan input yang konsisten, dan memiliki akses ke fitur XR tertentu. Untuk menetapkan profil interaksi:

  1. Buka jendela Setelan Project (menu: Edit > Setelan Project).
  2. Klik XR Plug-in Management untuk meluaskan bagian plug-in (jika perlu).
  3. Pilih OpenXR dalam daftar plugin XR.
  4. Di bagian Interaction Profiles, pilih tombol + untuk menambahkan profil.
  5. Pilih profil yang akan ditambahkan dari daftar.

Interaksi Tangan

Interaksi tangan (XR_EXT_hand_interaction) disediakan oleh Plugin OpenXR, dan Anda dapat mengekspos tata letak perangkat <HandInteraction> di Unity Input System dengan mengaktifkan Hand Interaction Profile. Gunakan profil interaksi ini untuk input tangan yang didukung oleh empat pose tindakan yang ditentukan oleh OpenXR: "pinch", "poke", "aim", dan "grip". Jika Anda memerlukan fungsi interaksi tangan atau pelacakan gerak tangan tambahan, lihat XR Hands di halaman ini.

Interaksi Pandangan Mata

Interaksi pandangan mata (XR_EXT_eye_gaze_interaction) disediakan oleh Plugin OpenXR, dan Anda dapat menggunakan tata letak ini untuk mengambil data pose mata (posisi dan rotasi) yang ditampilkan ekstensi. Baca selengkapnya tentang interaksi pandangan mata di panduan Input OpenXR.

Interaksi Pengontrol

Android XR mendukung Profil Pengontrol Oculus Touch untuk pengontrol 6DoF. Kedua profil ini disediakan oleh Plugin OpenXR.

Interaksi Mouse

Profil Interaksi Mouse Android XR (XR_ANDROID_mouse_interaction) disediakan oleh Android XR Extensions untuk Unity. Plugin ini mengekspos tata letak perangkat <AndroidXRMouse> di Unity Input System.

Interaksi Pose Telapak Tangan

Plugin OpenXR memberikan dukungan untuk Palm Pose Interaction (XR_EXT_palm_pose), yang mengekspos tata letak <PalmPose> dalam Unity Input System. Pose telapak tangan tidak dimaksudkan sebagai alternatif untuk ekstensi atau paket yang melakukan pelacakan gerak tangan untuk kasus penggunaan yang lebih kompleks; melainkan dapat digunakan untuk menempatkan konten visual khusus aplikasi seperti visual avatar. Pose telapak tangan terdiri dari posisi dan orientasi telapak tangan.

XR Hands

Paket XR Hands memungkinkan Anda mengakses data pelacakan gerak tangan—menggunakan XR_EXT_hand_tracking dan XR_FB_hand_tracking_aim—dan menyediakan wrapper untuk mengonversi data sendi tangan dari pelacakan gerak tangan ke pose input. Untuk menggunakan fitur yang disediakan oleh paket XR Hands, aktifkan fitur Hand Tracking Subsystem dan Meta Hand Tracking Aim OpenXR.

Contoh yang menunjukkan cara mengaktifkan pelacakan gerak tangan Paket XR hands dapat berguna jika Anda memerlukan data pose tangan atau sendi tangan yang lebih terperinci atau saat Anda perlu menggunakan gestur kustom.

Untuk mengetahui detail selengkapnya, lihat dokumentasi Unity untuk menyiapkan XR Hands di project Anda

Daerah Kepercayaan Pelacakan Wajah

Ekstensi XR_ANDROID_face_tracking memberikan tingkat keyakinan untuk tiga area wajah: kiri atas, kanan atas, dan wajah bagian bawah. Nilai ini, yang berkisar dari 0 (tidak ada keyakinan) hingga 1 (keyakinan tertinggi), menunjukkan akurasi pelacakan wajah untuk setiap wilayah.

Anda dapat menggunakan tingkat keyakinan ini untuk menonaktifkan blendshape secara progresif atau menerapkan filter visual (seperti pemburaman) ke area wajah yang sesuai. Untuk bentuk campuran dasar, nonaktifkan bentuk campuran di area wajah yang sesuai.

Area "wajah bagian bawah" mencakup semua bagian di bawah mata, termasuk mulut, dagu, pipi, dan hidung. Dua wilayah atas mencakup area mata dan alis di sisi kiri dan kanan wajah.

Cuplikan kode C# berikut menunjukkan cara mengakses dan menggunakan data keyakinan dalam skrip 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;
        }
    }
}

Untuk mengetahui informasi selengkapnya, lihat dokumentasi Android XR Extensions untuk Unity.

Memilih cara merender tangan

Android XR mendukung dua cara merender tangan: mesh tangan dan visualizer prefab.

Mesh tangan

Paket Unity Android XR berisi fitur Hand Mesh yang memberikan akses ke XR_ANDROID_hand_mesh extension. Fitur Hand Mesh menyediakan mesh untuk tangan pengguna. Mesh tangan berisi verteks segitiga yang mewakili geometri tangan. Fitur ini dimaksudkan untuk digunakan dalam memberikan mesh yang dipersonalisasi yang mewakili geometri sebenarnya dari tangan pengguna untuk visualisasi.

Prefab XR Hands

Paket XR Hands berisi contoh yang disebut Hands visualizer, yang berisi tangan kiri dan kanan yang sepenuhnya dilengkapi rigging untuk merender representasi tangan pengguna yang sesuai konteks.

Gestur sistem

Android XR menyertakan gestur sistem untuk membuka menu bagi pengguna untuk kembali, membuka peluncur, atau mendapatkan ringkasan aplikasi yang sedang berjalan. Pengguna dapat mengaktifkan menu sistem ini dengan menggunakan cubitan tangan dominan.

Saat pengguna berinteraksi dengan menu navigasi sistem, aplikasi hanya akan merespons peristiwa pelacakan gerak kepala. Paket XR Hands dapat mendeteksi saat pengguna melakukan tindakan tertentu seperti berinteraksi dengan menu navigasi sistem ini. Memeriksa AimFlags, SystemGesture, dan DominantHand memungkinkan Anda mengetahui kapan tindakan sistem ini dilakukan. Untuk mengetahui informasi selengkapnya tentang AimFlags, lihat dokumentasi Enum MetaAimFlags Unity.

XR Interaction Toolkit

Paket XR Interaction Toolkit adalah sistem interaksi tingkat tinggi berbasis komponen untuk menciptakan pengalaman VR dan AR. Plugin ini menyediakan framework yang membuat interaksi 3D dan UI tersedia dari peristiwa input Unity. Alat ini mendukung tugas interaksi termasuk respons haptik, respons visual, dan lokomosi.


OpenXR™ dan logo OpenXR adalah merek dagang yang dimiliki oleh The Khronos Group Inc. dan terdaftar sebagai merek dagang di China, Uni Eropa, Jepang, dan Inggris Raya.