Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Headset HoloLens 2 dapat melacak dan mendeteksi kode QR yang dapat digunakan untuk menyediakan hologram dan fitur AR lainnya. Artikel ini memandu Anda melalui semua yang perlu Anda ketahui untuk mulai menggunakan kode QR di aplikasi Unity Anda, termasuk:
- Menambahkan deteksi kode QR ke aplikasi Unity Anda.
- Memahami konsep penting dan komponen Unity yang perlu Anda gunakan.
- Menyediakan tutorial yang mencakup penggunaan kode QR umum.
- Memperkenalkan skenario sampel PENANDA AR yang menunjukkan adegan yang mendukung kode QR dan contoh skrip.
Sebelum melanjutkan dengan artikel ini, kami sarankan untuk melalui gambaran umum kode QR.
Mengonfigurasi proyek dan aplikasi Unity Anda
Proyek dan aplikasi Unity Anda harus disiapkan dan dikonfigurasi dengan benar untuk mengaktifkan fungsionalitas kode QR, yang memerlukan:
- OpenXR untuk Windows Mixed Reality versi 113.2403.5001 atau yang lebih baru.
Catatan
Ini dilengkapi dengan OS dan dapat diperbarui melalui Windows Store. Perlu diketahui bahwa pengguna mungkin telah menginstal versi sebelumnya, dan perangkat mereka tidak akan dapat bekerja dengan penanda AR seperti kode QR hingga memperbarui ke versi 113.2403.5001 atau yang lebih baru.
- Proyek yang kompatibel dengan versi Unity yang didukung:
- Unity 2022.3 LTS (Disarankan)
- Unity 2021.3 LTS
- Plugin Mixed Reality OpenXR.
- Kemampuan webcam diaktifkan untuk proyek Unity Anda.
- Izin kamera yang diberikan ke aplikasi Anda.
Bagian berikut memandu Anda melalui cara mengonfigurasi proyek dan aplikasi Unity Anda untuk mengaktifkan deteksi kode QR.
Mendapatkan Plugin OpenXR Mixed Reality
Paket Plugin Mixed Reality OpenXR berisi API C# yang dapat Anda gunakan untuk mengakses fungsionalitas kode QR.
Untuk mengimpor paket:
Mixed Reality Feature Tool juga menyederhanakan manajemen paket dan dapat digunakan untuk menemukan, memperbarui, dan menambahkan fitur Mixed Reality yang diperlukan aplikasi Anda. Lihat Selamat Datang di Alat Fitur Mixed Reality untuk instruksi terperinci tentang cara menggunakan alat ini.
Mengaktifkan kemampuan WebCam
Untuk mendeteksi dan melacak kode QR, proyek Unity Anda harus mengaktifkan kemampuan WebCam .
Untuk mengaktifkan kemampuan WebCam :
- Buka proyek Unity Anda.
- Klik Edit di menu aplikasi editor Unity.
- Buka Pemutar Pengaturan > Proyek dan pilih tab UWP seperti yang diperlihatkan:
- Aktifkan WebCam di daftar Kemampuan .
- Keluar dari Pengaturan Proyek.
Kemampuan WebCam sekarang diaktifkan untuk aplikasi Unity Anda. Namun, aplikasi Anda masih harus diberikan izin untuk mengakses kamera perangkat.
Memberikan izin akses kamera aplikasi Anda
Jika aplikasi Anda mengaktifkan kemampuan WebCam , dialog izin akan meminta pengguna untuk memberikan akses aplikasi Anda ke kamera perangkat.
Dialog ini hanya ditampilkan kepada pengguna sekali, biasanya saat memasukkan adegan yang ARMarkerManager
berisi dukungan penanda kode QR diaktifkan. Jika akses kamera ditolak, pengguna dapat membuka Aplikasi Pengaturan > dan mengaktifkannya melalui Opsi Tingkat Lanjut aplikasi.
Membangun deteksi kode QR ke dalam adegan
Deteksi kode QR harus dibangun ke dalam setiap adegan tempat Anda ingin menggunakan kode QR, yang memerlukan:
- A
GameObject
denganARMarkerManager
terlampir.ARMarkerManager
bertanggung jawab untuk membuat, memperbarui, dan menghapus setiapGameObject
kode QR yang terdeteksi. - Prefab dengan
ARMarker
terlampir. ARMarkerManager
dikonfigurasi untuk menggunakan prefab saat membuatGameObject
saat kode QR terdeteksi.
Membuat prefab untuk kode QR
Untuk menggunakan kode QR di adegan Anda, Anda perlu membuat prefab untuk kode QR. ARMarkerManager
menggunakan prefab ini untuk membuat GameObject
dari setiap kali kode QR terdeteksi.
Untuk membuat prefab untuk kode QR:
- Buat prefab baru untuk proyek Anda.
ARMarker
Tambahkan komponen ke prefab, yang terletak di bawah Skrip > Microsoft.MixedReality.OpenXR > ARMarker.
Anda sekarang memiliki prefab dasar untuk dikerjakan. Anda mungkin ingin aplikasi Anda secara visual mewakili kode QR yang terdeteksi di lingkungan. Bagian berikutnya memandu Anda melalui cara menambahkan representasi visual untuk kode QR.
Menambahkan Visual
Di bagian sebelumnya, menambahkan ARMarker
ke prefab juga secara otomatis menambahkan ARMarkerScale
komponen. Komponen ini digunakan untuk mencocokkan skala representasi visual kode QR dengan rekan fisiknya.
Untuk melakukannya:
- Tambahkan kosong
GameObject
ke prefab yang Anda buat di bagian sebelumnya. Ini akan mewakili semua konten penanda visual. - Tambahkan anak 3D
GameObject
, sepertiQuad
, ke kontenGameObject
penanda . - Di komponen prefab
ARMarkerScale
, atur Transformasi Skala Penanda ke kontenGameObject
penanda . Mengatur bidang ini memastikan 3DGameObject
yang Anda pilih diskalakan dengan benar agar sesuai dengan kode QR dunia nyata.
ARMarkerManager
Menambahkan ke adegan
ARMarkerManager
bertanggung jawab untuk membuat, memperbarui, dan menghapus setiap GameObject
kode QR yang terdeteksi.
Untuk menambahkan ARMarkerManager
ke adegan Anda:
- Tempatkan
GameObject
ke dalam adegan Anda. ARMarkerManager
Tambahkan komponen keGameObject
, yang terletak di bawah Skrip > Microsoft.MixedReality.OpenXR > ARMarkerManager.
- Atur
ARMarkerManager
bidang Prefab Penanda ke prefab yang Anda buat di bagian sebelumnya. - Perluas Jenis Penanda yang Diaktifkan, lalu pilih elemen dan atur ke Kode QR.
Melacak perubahan kode QR
ARMarkerManager
markersChanged
berisi peristiwa, yang disediakan ARMarkersChangedEventArgs
untuk pelanggan. Gunakan argumen peristiwa ini untuk melacak kode QR mana yang ditambahkan atau dihapus dari deteksi atau data pose yang diperbarui.
Kode berikut menunjukkan berlangganan ARMarkerManager.markersChanged
peristiwa, menggunakan argumen peristiwanya untuk melakukan iterasi melalui ARMarker
objek ARMarkerManager
yang menangani dan menulis ke Debug apakah mereka ditambahkan, dihapus, atau diperbarui.
using System;
using Microsoft.MixedReality.OpenXR;
// ...
private void Awake()
{
m_arMarkerManager = GetComponent<ARMarkerManager>();
m_arMarkerManager.markersChanged += OnQRCodesChanged;
}
void OnQRCodesChanged(ARMarkersChangedEventArgs args)
{
foreach (ARMarker qrCode in args.added)
Debug.Log($"QR code with the ID {qrCode.trackableId} added.");
foreach (ARMarker qrCode in args.removed)
Debug.Log($"QR code with the ID {qrCode.trackableId} removed.");
foreach (ARMarker qrCode in args.updated)
{
Debug.Log($"QR code with the ID {qrCode.trackableId} updated.");
Debug.Log($"Pos:{qrCode.transform.position} Rot:{qrCode.transform.rotation} Size:{qrCode.size}");
}
}
Mendapatkan waktu kode QR terakhir terdeteksi
ARMarker.lastSeenTime
Gunakan properti untuk menentukan kapan perangkat terakhir melacak kode QR yang terdeteksi dan jumlah waktu, jika ada, pelacakan hilang. Waktu diukur dalam jumlah detik karena Unity memulai aplikasi Anda dan dianalogikan dengan UnityEngine.Time.realtimeSinceStartup
.
Menggunakan ID kode QR yang dapat dilacak
Kode QR adalah dapat dilacak, yang merupakan apa pun yang dapat dideteksi dan dilacak perangkat AR di lingkungan fisik. Dapat dilacak berasal dari jenis ARTrackable<TSessionRelativeData, TTrackable>
yang menyediakan ID, status pelacakan, pose, dan data lainnya.
ID yang dapat dilacak untuk kode QR dapat diteruskan ke metode ARMarkerManager
untuk mendapatkan properti kode QR, data byte mentah, dan representasi string, dan untuk mengatur mode transformasi untuk kode QR. Metode ini memungkinkan Anda mengambil data untuk kode QR tanpa harus berpegang pada ARMarker
referensi objek.
Anda dapat meneruskan ID kode QR ke dalam metode berikut ARMarkerManager
:
GetDecodedString(UnityEngine.XR.ARSubsystems.TrackableId trackableId)
GetMarker(UnityEngine.XR.ARSubsystems.TrackableId trackableId)
GetQRCodeProperties(UnityEngine.XR.ARSubsystems.TrackableId)
GetRawData(UnityEngine.XR.ARSubsystems.TrackableId, Unity.Collections.Allocator)
SetTransformMode(UnityEngine.XR.ARSubsystems.TrackableId, Microsoft.MixedReality.OpenXR.TransformMode)
Catatan
GetRawData
Untuk parameter allocator
metode , passing Unity.Collections.Allocator.Temp
cukup untuk sebagian besar skenario.
Mengikuti status pelacakan kode QR
ARMarker
Karena dapat dilacak, ia mewarisi trackingState
properti dan diatur ke salah satu dari tiga UnityEngine.XR.ARSubsystems.TrackingState
:
Limited
: Menunjukkan bahwa kode QR sedang dilacak tetapi informasi terbatas tersedia atau berkualitas buruk.Tracking
: Menentukan bahwa kode QR sedang dilacak sepenuhnya.None
: Menunjukkan bahwa kode QR tidak dilacak.
Untuk memantau status pelacakan untuk kode QR, berlangganan ARMarkerManager.markersChanged
dan melakukan iterasi melalui ARMarker
koleksi penanda yang disediakan dalam argumen peristiwa yang diteruskan ke penanganan aktivitas Anda.
Kode berikut menunjukkan penggunaan ARMarkerManager.markersChanged
peristiwa untuk melakukan iterasi melalui ARMarker
objek untuk kode QR yang baru terdeteksi dan menulis ID yang dapat dilacak ke jendela Debug.
using System;
using Microsoft.MixedReality.OpenXR;
// ...
private void Awake()
{
m_arMarkerManager = GetComponent<ARMarkerManager>();
m_arMarkerManager.markersChanged += OnQRCodesChanged;
}
void OnQRCodesChanged(ARMarkersChangedEventArgs args)
{
foreach (ARMarker qrCode in args.added)
{
if (qrCode.trackingState == UnityEngine.XR.ARSubsystems.TrackingState.Tracking)
Debug.Log($"Fully tracked QR code with the ID {qrCode.trackableId} was added.");
}
}
Mendapatkan versi kode QR dan jenis kode QR
Untuk mendapatkan versi dan jenis kode QR yang terdeteksi:
- Panggil
ARMarker.GetQRCodeProperties()
, yang mengembalikan instansQRCodeProperties
. - Akses bidang
QRCodeProperties
dalam nilai pengembalian untuk mendapatkan jenis kode QR. Nilainya adalahQRCodeType.QRCode
atauQRCodeType.MicroQRCode
. - Akses bidang nilai
QRCodeProperties.version
yang dikembalikan untuk mendapatkan versi kode QR. Nilai berkisar dari 1 hingga 40 jika jenisnya adalahQRCodeType.QRCode
, dan dari 1 hingga 4 jika jenisnya adalahQRCodeType.MicroQRCode
.
Sebagai alternatif, berikan ID objek yang ARMarker
dapat dilacak untuk ARMarkerManager.GetQRCodeProperties(TrackableId)
mendapatkan jenis dan versi kode QR.
Peringatan
Kode QR adalah satu-satunya jenis penanda yang saat ini didukung meskipun dukungan untuk jenis penanda lain dapat ditambahkan dalam rilis mendatang. Jika markerType
tidak ARMarkerType.QRCode
, panggilan akan GetQRCodeProperties(TrackableId)
melemparkan System.InvalidOperationException
. Pertimbangkan untuk membungkus panggilan ke GetQRCodeProperties(TrackableId)
dalam blok try-catch jika ini dapat menyebabkan masalah di aplikasi Anda nanti.
Membaca data QR
Komponen ARMarker
dilampirkan ke setiap GameObject
yang ARMarkerManager
membuat. ARMarker
menyediakan dua metode yang mengembalikan data kode QR:
GetDecodedString()
: Metode ini mendapatkan representasi string kode QR, seperti URL.GetRawData(Unity.Collections.Allocator allocator)
: Metode ini mengembalikan konten kode QR sebagai array byte, memungkinkan penyetelan butir halus tentang bagaimana array dialokasikan. Gunakan metode ini di jalur panas dan situasi lain di mana performa sangat penting.
Kode berikut menunjukkan penggunaan GetDecodedString()
dasar dan GetRawData(Unity.Collections.Allocator allocator)
:
using System;
using Microsoft.MixedReality.OpenXR;
// ...
void OnQRCodesChanged(ARMarkersChangedEventArgs args)
{
foreach (ARMarker qrCode in args.added)
{
var text = qrCode.GetDecodedString();
Debug.Log($"QR code text: {text}");
var bytes = qrCode.GetRawData(Unity.Collections.Allocator.Temp);
Debug.Log($"QR code bytes: {bytes.Length}");
bytes.Dispose();
}
}
Mendapatkan ukuran kode QR, posisi, rotasi, dan tengah
Objek ARMarker
menyediakan ukuran, posisi, rotasi, dan pusat kode QR yang diwakilinya.
Untuk mendapatkan ukuran kode QR dalam meter, gunakan properti ARMarker.size
.
ARMarker.transform
Gunakan properti untuk mendapatkan rotasi dan posisi ruang dunia transformasi kode QR, dan ARMarker.center
ke koordinat 2D kode QR relatif terhadap transformasi kode QR. Transformasi itu sendiri berpusat sesuai dengan apakah (mode transformasi) diatur ke TransformMode.MostStable
(paling stabil, kiri atas kode QR) atau TransformMode.Center
(tengah, pusat geometris kode QR).ARMarker.transformMode
ARMarkerManager.defaultTransformMode
Gunakan bidang untuk mengatur mode ARMarkerManager
transformasi yang membuat objek baruARMarker
. Bidang diinisialisasi dengan Default Transform Mode
bidang diatur ke di Pemeriksa Unity seperti yang ditunjukkan:
Sebagai alternatif untuk menggunakan ARMarker.transformMode
, teruskan ID objek yang ARMarker
dapat dilacak untuk ARMarkerManager.SetTransformMode(TrackableId, TransformMode)
mengatur mode transformasinya.
Kode berikut menunjukkan mendapatkan ukuran dan pusat kode QR baru, posisi dan rotasi transformasinya, dan posisi transformasi yang diperbarui setelah mengubah mode transformasi.
using System;
using Microsoft.MixedReality.OpenXR;
// ...
void OnMarkersChanged(ARMarkersChangedEventArgs args)
{
Debug.Log($"Default transform mode is {ARMarkerManager.Instance.defaultTransformMode}./n");
if (e.added.Count > 0)
{
ARMarker qrCode = args.added[0];
Debug.Log($"Position: {qrCode.transform.position}");
Debug.Log($"Rotation: {qrCode.transform.rotation}");
Debug.Log($"Center: {qrCode.center}");
if (qrCode.transformMode == TransformMode.Center)
qrCode.transformMode = TransformMode.MostStable;
else
qrCode.transformMode = TransformMode.Center;
Debug.Log($"QR code's transform mode is now set to {qrCode.transformMode}. /n");
Debug.Log($"New position: {qrCode.transform.position}");
}
}
Skenario sampel penanda AR
Sampel yang disediakan dengan paket Plugin OpenXR berisi adegan yang mendukung kode QR yang memberikan contoh cara ARMarkerManager
dan ARMarker
dapat digunakan.
Adegan ini terletak di Aset > ARMarker seperti yang ditunjukkan:
Anda dapat menemukan skrip C# yang digunakan dalam adegan dalam repositori Sampel Mixed Reality Unity OpenXR di GitHub: /OpenXR-Unity-MixedReality-Samples/tree/main/SampleScenarios/Scenarios/MarkerSample/Scripts