Mengontrol proses tracking Mega
Dokumen ini menjelaskan cara mengontrol berbagai fungsi dan parameter dalam proses tracking Mega untuk memenuhi kebutuhan skenario aplikasi yang berbeda.
Sebelum mulai
- Periksa Apakah fungsi lokalisasi saya sudah siap? untuk memastikan library lokalisasi telah dibuat dengan benar dan peta telah ditambahkan.
Alur kerja tracker
Workflow tracker adalah sebagai berikut:
flowchart LR
subgraph startup_graph[Mulai]
direction TB
sstart((session dimulai))
create[Pembuatan native]
load(Muat target)
init_g[[Inisialisasi]]
end
subgraph init_graph[Inisialisasi]
direction TB
init_{Inisialisasi 6DoF berhasil<br>atau non-6DoF}
init[[Proses inisialisasi tracking lokal]]
localization_g[[Localization awal]]
end
subgraph localization_graph[Localization awal]
direction TB
localize__{Localization aktif dan<br>melampaui interval request}
localize[Localization cloud]
localize_{Terlokalisasi ke block dan<br>block telah dimuat}
tracking_g[[Tracking]]
end
subgraph tracking_graph[Tracking]
direction TB
tracking[[Tracking berkelanjutan]]
localizet_{Localization aktif dan<br>melampaui interval request}
localize2[Localization cloud]
localize2_{Terlokalisasi ke block dan<br>block telah dimuat}
localization_g2[[Localization awal]]
end
subgraph stopping_graph[Berhenti]
direction TB
unload(Bongkar target)
dispose[Penghancuran native]
sstop([session berhenti])
end
sstart --> create --> load --> init_g
init --> init_ --> |Yes| localization_g
localize --> localize_ --> |Yes| tracking_g
localize_ --> |No| localize__ --> |Yes| localize
unload --> dispose --> sstop
init_ --> |No| init
tracking --> localizet_ --> |Yes| localize2 --> localize2_ --> |Yes| tracking
localizet_ --> |No| tracking
localize2_ --> |No| localization_g2
startup_graph --> init_graph
init_graph --> localization_graph
localization_graph --> tracking_graph
tracking_graph --> localization_graph
tracking_graph --> stopping_graph
Prosesnya secara garis besar dibagi menjadi beberapa tahap:
- Startup:
- Setelah session dimulai, tracker di layer native akan dibuat.
- Setelah Start() pada target sendiri, target akan dimuat ke tracker yang sesuai.
- Initialization:
- Saat menggunakan frame source 6DoF, proses inisialisasi local tracking akan dimulai.
- Saat menggunakan frame source non-6DoF, tahap initialization akan dilewati dan langsung masuk ke tahap initial localization.
- Proses ini mungkin memerlukan waktu, tergantung kompleksitas scene dan kemampuan performa perangkat, dan biasanya berkaitan dengan algoritme yang digunakan pada bagian bawah frame source.
- Pada konfigurasi default, konten pada tahap ini tidak akan ditampilkan. Anda dapat mengontrol perilaku ini melalui opsi komponen ActiveController.
- Initial localization:
- Jika lokalisasi diaktifkan dan interval permintaan telah terlewati, tracker akan mengirim permintaan lokalisasi ke cloud.
- Setelah lokalisasi berhasil, jika block yang sesuai dengan id yang dikembalikan layanan lokalisasi sudah dimuat, tracker akan masuk ke tahap tracking; jika block belum dimuat, tracker akan terus menunggu block selesai dimuat dan menunggu permintaan lokalisasi berikutnya.
- Setelah lokalisasi gagal, tracker akan terus menunggu permintaan lokalisasi berikutnya.
- Proses ini mungkin memerlukan waktu, tergantung kemudahan scene untuk dilokalisasi, kualitas pengambilan data dan pemetaan, serta kondisi jaringan.
- Pada konfigurasi default, konten pada tahap ini tidak akan ditampilkan. Anda dapat mengontrol perilaku ini melalui opsi komponen ActiveController.
- Jika lokalisasi diaktifkan dan interval permintaan telah terlewati, tracker akan mengirim permintaan lokalisasi ke cloud.
- Tracking:
- Tracker akan terus melacak block saat ini.
- Jika lokalisasi diaktifkan dan interval permintaan telah terlewati, tracker akan mengirim permintaan lokalisasi ke cloud.
- Setelah lokalisasi berhasil, jika id yang dikembalikan layanan lokalisasi tidak berubah, tracking akan dilanjutkan; jika id berubah dan block sudah dimuat, tracker akan berpindah ke block baru dan terus melacak; jika id berubah dan block belum dimuat, tracker akan terus menunggu block selesai dimuat dan menunggu permintaan lokalisasi berikutnya.
- Setelah lokalisasi gagal, tracker akan terus melacak block saat ini dan menunggu permintaan lokalisasi berikutnya.
- Pada konfigurasi default, hanya konten di bawah node target yang sedang dalam status tracking (TargetController.IsTracked ==
true) yang akan ditampilkan. Anda dapat mengontrol perilaku ini melalui opsi komponen ActiveController.
- Stopping:
- Setelah session berhenti, target di-unload, dan tracker di layer native akan dihancurkan.
Menyesuaikan level dukungan perangkat
Properti MegaTrackerFrameFilter.MinInputFrameLevel dari MegaTrackerFrameFilter digunakan untuk menentukan level minimum perangkat yang didukung Mega.
![]()
Mega dapat berjalan pada hampir semua jenis frame data source, tetapi setiap frame data source memberi dampak yang berbeda pada hasil tracking.
Secara default, Mega akan memilih frame data source dengan level tertinggi yang didukung perangkat untuk tracking. Session yang mendukung Mega pada konfigurasi default sudah dikonfigurasi dengan frame data source yang mendukung 6DoF dan 5DoF.
Untuk mendukung level frame data source tertentu saat Mega berjalan, dua syarat harus dipenuhi:
- Frame data source yang dibutuhkan ada di grup optional frame data source pada session.
- MegaTrackerFrameFilter.MinInputFrameLevel lebih besar atau sama dengan level CameraTransformType dari frame data source yang dibutuhkan.
Misalnya, untuk mendukung tracking 3DoF pada session default, Anda perlu:
- Menambahkan ThreeDofCameraDeviceFrameSource ke grup frame data source pada session.
- Mengubah MegaTrackerFrameFilter.MinInputFrameLevel menjadi ThreeDof.
Contoh lain, untuk menghapus dukungan tracking 5DoF pada session default, Anda perlu:
- Menghapus InertialCameraDeviceFrameSource dari grup frame data source pada session.
- Mengubah MegaTrackerFrameFilter.MinInputFrameLevel menjadi SixDof (bahkan jika tidak diubah, 5DoF tetap tidak akan dipakai karena tidak ada frame data source 5DoF).
Jika tidak ada frame data source yang memenuhi syarat, proses assembly session akan gagal.
Memahami status sistem saat ini
Pada konfigurasi default session, UI messages akan ditampilkan di layar dan berisi informasi tentang status tracking Mega.
Saat lokalisasi berhasil, informasi layanan Mega akan berisi teks status Found; saat lokalisasi gagal, informasi layanan Mega akan berisi teks status NotFound.
Block yang sudah dimuat akan ditampilkan sebagai Block [scnObj=<objName>] (<trackingStatus>): <name> (<id>). Di sini, <objName> adalah nama objek scene yang terkait dengan block, <name> adalah nama block, dan <id> adalah ID block. trackingStatus dapat berupa Tracking atau NotTracking, yang masing-masing menunjukkan apakah block saat ini sedang dilacak atau tidak.
![]()
Saat lokalisasi berhasil, informasi block yang berhasil dilokalisasi tetapi belum dimuat akan ditampilkan sebagai Block [scnObj=?]: <name> (<id>).
![]()
Kiat
NotFound adalah status normal dan sering muncul selama seluruh proses kerja Mega. Saat status ini muncul, tracking tetap berlanjut. Biasanya, tidak perlu penanganan khusus untuk status NotFound dalam pengembangan aplikasi.
Anda dapat menggunakan event MegaTrackerFrameFilter.LocalizationRespond untuk memperoleh status lokalisasi saat ini dan mengetahui apakah sistem telah menemukan target pelacakan.
Kode berikut menunjukkan cara menggunakan event tersebut, serta cara menangani status abnormal umum yang perlu diperhatikan aplikasi:
private void Awake()
{
megaTracker.LocalizationRespond += HandleLocalizationStatusChange;
}
private void HandleLocalizationStatusChange(MegaLocalizationResponse response)
{
var status = response.Status;
wakingUpCount = status == MegaTrackerLocalizationStatus.WakingUp ? wakingUpCount + 1 : 0;
if (wakingUpCount >= 5)
{
// layanan sedang dibangunkan; pengguna akhir perlu menunggu
}
if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
{
// batas QPS terlampaui; beberapa pengguna akhir dapat gagal melakukan lokalisasi secara acak (kualitas tracking keseluruhan menurun)
// biasanya perlu membayar untuk menaikkan batas QPS agar kualitas tracking tetap terjamin pada jumlah pengguna saat ini
}
if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
{
// Token kedaluwarsa; ini hanya terjadi saat mengakses layanan melalui antarmuka Token
// untuk menyelesaikannya, aplikasi perlu meminta Token dari backend sendiri dan memanggil MegaTrackerFrameFilter.UpdateToken untuk memperbaruinya
}
}
Jika aplikasi sering menemui status MegaTrackerLocalizationStatus.RequestTimeout, biasanya itu menandakan kondisi jaringan perangkat ke layanan kurang baik. Disarankan mengoptimalkan lingkungan jaringan untuk meningkatkan kualitas tracking. Pada skenario ketika kondisi jaringan tidak dapat diperbaiki, Anda dapat mempertimbangkan untuk menambah timeout permintaan.
Catatan
Anda tidak dapat memperoleh pose yang dikembalikan oleh lokalisasi melalui event ini.
Sebenarnya, pose hasil lokalisasi tidak diperlukan dalam pengembangan aplikasi. EasyAR akan menghitung pose yang lebih akurat melalui algoritme lokal setelah lokalisasi kembali dan memberikannya kepada developer. Pose ini sudah tercermin pada transform block, silakan lihat Mendapatkan hasil runtime session.
Jeda dan lanjut
Fungsi tracking dan lokalisasi Mega dapat dijeda dan dilanjutkan secara terpisah.
Menjeda tracking
Set MegaTrackerFrameFilter.enabled menjadi false untuk menjeda tracking.
Secara default, setelah tracking dijeda, semua konten di bawah node block akan disembunyikan.
Menjeda lokalisasi
Set MegaTrackerFrameFilter.EnableLocalization menjadi false untuk menjeda lokalisasi.
Peringatan
Menjeda lokalisasi akan memengaruhi hasil tracking, jadi umumnya tidak disarankan. Gunakan di bawah arahan dukungan teknis EasyAR.
Jika lokalisasi pernah dijeda selama aplikasi berjalan, pastikan Anda menyebutkannya saat melaporkan masalah ke EasyAR.
Kontrol layanan dan permintaan
Anda dapat mengontrol perilaku permintaan layanan dengan mengubah parameter komponen MegaTrackerFrameFilter.
Memilih library lokalisasi
Pilih objek Mega Tracker di bawah session, lalu ubah opsi di bawah Service untuk menyesuaikan library lokalisasi yang terhubung. Opsi ini harus diset sebelum session dimulai.
Pada konfigurasi default, Access Source adalah Global Config. Konfigurasi layanan menggunakan konfigurasi global, dan parameter layanan dapat diubah di Project Settings > EasyAR > Sense > Mega > Mega Block. Konfigurasi ini akan memengaruhi semua session yang menggunakan konfigurasi global tersebut.
![]()
Kiat
Konfigurasi layanan dapat diperoleh dari EasyAR Development Center.

Jika Anda perlu menggunakan library lokalisasi yang berbeda di session yang berbeda, Anda dapat mengatur Access Source ke API Key, lalu mengubah parameter layanan di bawahnya.
![]()
Di script, Anda dapat mengubah MegaTrackerFrameFilter.ServiceAccessSource dan MegaTrackerFrameFilter.ServiceAccessData untuk mendapatkan efek yang sama.
Misalnya, kode berikut menunjukkan cara mengonfigurasi tracker agar terhubung ke layanan menggunakan parameter runtime sebelum session dimulai:
megaTracker.ServiceType = easyar.MegaApiType.Block;
megaTracker.ServiceAccessSource = easyar.MegaServiceAccessSourceType.APIKey;
megaTracker.ServiceAccessData = new easyar.APIKeyAccessData
{
ServerAddress = serverAddress,
APIKey = apiKey,
APISecret = apiSecret,
AppID = appID
};
Interval permintaan dan timeout
Pilih objek Mega Tracker di bawah session, lalu ubah opsi di bawah Request Time Parameters untuk menyesuaikan interval waktu dan timeout permintaan layanan.
![]()
Di script, Anda dapat mengubah MegaTrackerFrameFilter.RequestTimeParameters untuk mendapatkan efek yang sama.
Peringatan
Mengubah interval permintaan akan memengaruhi hasil tracking, jadi umumnya tidak disarankan. Gunakan di bawah arahan dukungan teknis EasyAR.
Jika interval permintaan pernah diubah selama aplikasi berjalan, pastikan Anda menyebutkannya saat melaporkan masalah ke EasyAR.
Mengganti library lokalisasi
Gunakan MegaTrackerFrameFilter.SwitchEndPoint untuk mengganti library lokalisasi saat runtime. Saat interface ini digunakan, tampilan kamera dan session tidak akan terputus.
Topik terkait
- Best practice AR Session untuk Mega menjelaskan cara membuat dan mengonfigurasi AR Session yang cocok untuk Mega
- Menambahkan target pelacakan Mega menjelaskan cara menambahkan target pelacakan Mega block dan cara memuat model block di Unity Editor untuk membantu pengembangan
- Menambahkan sekelompok frame data source menjelaskan cara mengubah grup frame data source pada session
- Mendapatkan hasil runtime session menjelaskan cara memperoleh hasil tracking komponen session
- UI messages menjelaskan cara menggunakan UI messages untuk menampilkan status session