Sistem koordinat spasial yang bertahan

Secara umum, manfaat kemampuan persistensi Alat Penguncian Dunia lebih menarik daripada detail implementasinya.

Oleh karena itu, artikel ini akan dimulai dengan diskusi tentang pengalaman yang diaktifkan persistensi Alat Penguncian Dunia. Setelah itu kita akan melihat bagaimana persistensi Status Alat Penguncian Dunia dapat dikelola. Kita kemudian akan menutup dengan sketsa singkat tentang data apa yang disimpan dan dimuat.

Alat Penguncian Dunia di seluruh sesi

Seperti yang didefinisikan di tempat lain, Status Beku adalah semua data yang diperlukan untuk melanjutkan ruang stabil yang dikunci dunia saat ini.

Utilitas utama persistensi Alat Penguncian Dunia adalah dalam memungkinkan manfaat pekerjaan sesi awal, memindai area dan menyelaraskan ruang virtual ke dunia nyata, untuk digunakan dalam sesi berikutnya.

Pemulihan status ini memungkinkan sesi berikutnya untuk melakukan penyiapan yang membosankan atau memakan waktu dan langsung mendapatkan pengalaman fokus.

Menyimpan Status Alat Penguncian Dunia

Sebelum dapat dimuat, Status Beku harus disimpan.

Cara paling mudah untuk menyimpan Status Beku adalah dengan mengaktifkan SimpanOtomatis pada World Locking Tools Manager, baik di pemeriksa Unity pada Konteks Alat Penguncian Dunia, atau pada runtime melalui skrip.

Mengatur status World Locking Tools Manager melalui skrip dilakukan dengan terlebih dahulu mendapatkan status, mengubahnya dengan cara apa pun yang diinginkan, lalu mengatur status kembali sebagai blok. Misalnya, untuk mengaktifkan fitur SimpanOtomatis:

var settings = WorldLockingManger.GetInstance().Settings;
settings.AutoSave = !settings.AutoSave;
WorldLockingManager.GetInstance().Settings = settings;

Jika fitur SimpanOtomatis berubah dari diaktifkan ke dinonaktifkan selama sesi, tidak ada penyimpanan berkala lebih lanjut yang akan dicoba. Jika berubah dari dinonaktifkan ke diaktifkan, penyimpanan berkala akan dimulai atau dilanjutkan.

Fitur SimpanOtomatis akan menjaga status tersimpan terbaru dengan menyimpan status saat ini secara berkala secara asinkron.

Jika kontrol lebih besar atas waktu penyimpanan status diperlukan, maka SimpanOtomatis dapat diatur ke false, dan penyimpanan manual dapat dilakukan melalui skrip. Penyimpanan asinkron mudah dipicu, karena:

WorldLockingManager.GetInstance().Save();

Karena penyimpanan tidak sinkron, upaya lain untuk memanggil Save() sementara penyimpanan sebelumnya masih dalam proses akan diabaikan.

Memuat Status Beku

Setelah menyimpan Status Beku, mungkin diinginkan untuk memuat ulang Alat Penguncian Dunia kembali ke status itu, baik dalam sesi berikutnya atau bahkan nanti dalam sesi yang sama.

Seperti yang kita temukan dengan menyimpan Status Beku, ada dua jalur untuk memuat status.

Jika bendera AutoLoad pada World Locking Tools Manager diaktifkan, status tersimpan sebelumnya akan dimuat pada waktu mulai. Jika tidak ada status tersimpan untuk dimuat, tidak ada kesalahan yang dihasilkan dan startup berlanjut seolah-olah bendera tidak diatur.

Mengatur bendera AutoLoad dari false ke true (misalnya, melalui skrip) pada runtime tidak akan berpengaruh. AutoLoad terjadi pada beban awal, atau tidak terjadi sama sekali.

Namun, beban dapat dimulai dari skrip kapan saja melalui fungsi Beban World Locking Tools Manager:

WorldLockingManager.GetInstance().Load();

Seperti halnya Simpan, Beban dilakukan secara asinkron. Setiap panggilan berikutnya ke Muat saat panggilan masih berlangsung akan diabaikan.

Apa yang disimpan?

Data yang diperlukan untuk merekonstruksi pemetaan Alat Penguncian Dunia--yaitu, keselarasan dunia virtual ke dunia nyata--dapat dipecah menjadi empat grup.

  • Spatial Anchors: Jaringan jangkar spasial yang mendasar yang dibuat dan dikelola secara internal oleh World Locking Tools' Anchor Manager memasok pengikatan yang diperlukan ke dunia nyata. Jangkar tersebut bertahan melalui mekanisme penyimpanan yang mendasar platform.

  • Status Mesin: Status mesin dipertahankan untuk memungkinkan mesin melanjutkan pemetaannya saat ini. Memulihkan status ini menghilangkan ketidaktersediaan seperti pose awal kepala di sesi sebelumnya.

  • Penyematan Ruang: Jika aplikasi telah menerapkan Pin Ruang lebih lanjut untuk memaksa penyelarasan koordinat pemodelan ke dunia nyata pada serangkaian titik diskrit, pemetaan itu juga tetap ada.

  • Ruang Koordinat: Alat Penguncian Dunia mempertahankan ruang koordinat relatif terhadap dunia fisik dengan menyimpan grafik internal jangkar spasial lokal.

Apa yang tidak disimpan?

Pengaturan tidak disimpan, dan Alat Penguncian Dunia tidak menyimpan atau memulihkan objek aplikasi individual. Hanya status yang disimpan. Setiap perubahan konfigurasi oleh aplikasi--misalnya, perubahan yang dilakukan melalui WorldLockingManager API--diatur ulang ke nilainya sebagaimana diatur dalam Unity Inspector setiap kali aplikasi dimulai. Atau, jika tidak diatur di Inspektur, maka nilai tersebut diatur ke nilai default dalam kode.

Misalnya, aplikasi ingin menyajikan pengguna dengan opsi untuk status Simpan Otomatis Penguncian Dunia, dan minta preferensi pengguna bertahan di seluruh sesi hingga berubah. Kemudian aplikasi harus:

  1. Sajikan pengguna dengan UX untuk mengatur preferensi SimpanOtomatis (mungkin dengan pengaturan aplikasi lain).
  2. Teruskan preferensi pengguna ke WorldLockingManager.
  3. Rekam preferensi ke file (mungkin dengan pengaturan aplikasi lain).
  4. Pada pengaktifan aplikasi, muat preferensi yang disimpan (jika ada yang disimpan) dan teruskan ke WorldLockingManager.

Lihat catatan di WorldLockingContext mengenai masalah waktu saat mencampur pengaturan status antara aset dan skrip.

Lihat juga