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
GameObjectdenganARMarkerManagerterlampir.ARMarkerManagerbertanggung jawab untuk membuat, memperbarui, dan menghapus setiapGameObjectkode QR yang terdeteksi. - Prefab dengan
ARMarkerterlampir. ARMarkerManagerdikonfigurasi untuk menggunakan prefab saat membuatGameObjectsaat 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.
ARMarkerTambahkan 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 ARMarkerke prefab juga secara otomatis menambahkan ARMarkerScale komponen. Komponen ini digunakan untuk mencocokkan skala representasi visual kode QR dengan rekan fisiknya.
Untuk melakukannya:
- Tambahkan kosong
GameObjectke prefab yang Anda buat di bagian sebelumnya. Ini akan mewakili semua konten penanda visual. - Tambahkan anak 3D
GameObject, sepertiQuad, ke kontenGameObjectpenanda .
- Di komponen prefab
ARMarkerScale, atur Transformasi Skala Penanda ke kontenGameObjectpenanda . Mengatur bidang ini memastikan 3DGameObjectyang 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
GameObjectke dalam adegan Anda. ARMarkerManagerTambahkan komponen keGameObject, yang terletak di bawah Skrip > Microsoft.MixedReality.OpenXR > ARMarkerManager.

- Atur
ARMarkerManagerbidang 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
ARMarkerManagermarkersChanged 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 allocatormetode , 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
QRCodePropertiesdalam nilai pengembalian untuk mendapatkan jenis kode QR. Nilainya adalahQRCodeType.QRCodeatauQRCodeType.MicroQRCode. - Akses bidang nilai
QRCodeProperties.versionyang 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