Kontrol batas — MRTK2
BoundsControl adalah komponen baru untuk perilaku manipulasi, yang sebelumnya ditemukan di BoundingBox. Kontrol batas membuat sejumlah peningkatan dan penyederhanaan dalam penyiapan dan menambahkan fitur baru. Komponen ini adalah pengganti untuk kotak pembatas, yang tidak akan digunakan lagi.
BoundsControl.cs
Skrip ini menyediakan fungsionalitas dasar untuk mengubah objek dalam realitas campuran. Kontrol batas akan menampilkan kotak di sekitar hologram untuk menunjukkan bahwa itu dapat berinteraksi. Handel di sudut dan tepi kotak memungkinkan penskalaan, memutar, atau menerjemahkan objek. Kontrol terikat juga bereaksi terhadap input pengguna. Pada HoloLens 2, misalnya, kontrol batas merespons kedekatan jari, memberikan umpan balik visual untuk membantu memahami jarak dari objek. Semua interaksi dan visual dapat dengan mudah disesuaikan.
Contoh adegan
Anda dapat menemukan contoh konfigurasi kontrol batas di BoundsControlExamples
adegan.
Properti pemeriksa
Objek target
Properti ini menentukan objek mana yang akan diubah oleh manipulasi kontrol terikat. Jika tidak ada objek yang diatur, objek tersebut default ke objek pemilik.
Perilaku aktivasi
Ada beberapa opsi untuk mengaktifkan antarmuka kontrol terikat.
- Aktifkan Saat Mulai: Kontrol batas menjadi terlihat setelah adegan dimulai.
- Aktifkan Menurut Kedekatan: Kontrol batas menjadi terlihat ketika tangan artikulasi dekat dengan objek.
- Aktifkan Menurut Pointer: Kontrol batas menjadi terlihat saat ditargetkan oleh penunjuk sinar tangan.
- Aktifkan Menurut Kedekatan dan Penunjuk: Kontrol batas menjadi terlihat ketika ditargetkan oleh penunjuk sinar tangan atau tangan artikulasi dekat dengan objek.
- Aktifkan Secara Manual: Kontrol batas tidak terlihat secara otomatis. Anda dapat mengaktifkannya secara manual melalui skrip dengan mengakses properti boundsControl.Active.
Penimpaan batas
Mengatur collider kotak dari objek untuk komputasi terikat.
Padding kotak
Menambahkan padding ke batas collider yang digunakan untuk menghitung tingkat kontrol. Ini tidak hanya akan memengaruhi interaksi tetapi juga berdampak pada visual.
Meratakan sumbu
Menunjukkan apakah kontrol diratakan di salah satu sumbu, menjadikannya 2 dimensi dan melarang manipulasi di sepanjang sumbu tersebut. Fitur ini dapat digunakan untuk objek tipis seperti slaes. Jika sumbu rata diatur ke Ratakan Otomatis , skrip akan secara otomatis memilih sumbu dengan luas terkecil sebagai sumbu rata.
Menghaluskan
Bagian penghalusan memungkinkan untuk mengonfigurasi perilaku penghalusan untuk skala dan memutar kontrol.
Visual
Tampilan kontrol batas dapat dikonfigurasi dengan memodifikasi salah satu konfigurasi visual yang sesuai. Konfigurasi visual adalah objek yang dapat ditulis yang ditautkan atau di-inlin dan dijelaskan secara lebih rinci di bagian objek konfigurasi.
Objek Konfigurasi
Kontrol dilengkapi dengan sekumpulan objek konfigurasi yang dapat disimpan sebagai objek yang dapat ditulis dan dibagikan antara instans atau prefab yang berbeda. Konfigurasi dapat dibagikan dan ditautkan baik sebagai file aset yang dapat ditulis individual atau aset skrip berlapis di dalam prefab. Konfigurasi lebih lanjut juga dapat didefinisikan langsung pada instans tanpa menautkan ke aset eksternal atau berlapis yang dapat ditulis.
Pemeriksa kontrol terikat akan menunjukkan apakah konfigurasi dibagikan atau di-inlin sebagai bagian dari instans saat ini dengan menampilkan pesan di pemeriksa properti. Selain itu, instans bersama tidak akan dapat diedit langsung di jendela properti kontrol terikat itu sendiri, tetapi sebaliknya aset yang ditautkannya harus langsung dimodifikasi untuk menghindari perubahan yang tidak disengaja pada konfigurasi bersama.
Kontrol terikat saat ini menawarkan opsi objek konfigurasi untuk fitur berikut:
Konfigurasi kotak
Konfigurasi kotak bertanggung jawab untuk merender kotak solid dengan batas yang ditentukan melalui ukuran tabrakan dan padding kotak. Properti berikut ini dapat disiapkan:
- Bahan kotak: mendefinisikan materi yang diterapkan ke kotak yang dirender ketika tidak ada interaksi yang terjadi. Kotak hanya akan dirender jika bahan ini diatur.
- Kotak mengambil bahan: bahan untuk kotak ketika pengguna berinteraksi dengan kontrol dengan mengambil melalui interaksi dekat atau jauh.
- Meratakan skala tampilan sumbu: skala yang diterapkan ke tampilan kotak jika salah satu sumbu diratakan.
Skala menangani konfigurasi
Laci properti ini memungkinkan untuk memodifikasi perilaku dan visualisasi handel skala kontrol batas.
- Menangani bahan: material yang diterapkan pada handel.
- Menangani bahan yang diambil: bahan yang diterapkan pada handel yang diambil.
- Menangani prefab: prefab opsional untuk handel skala. Jika non diatur MRTK akan menggunakan kubus sebagai default.
- Menangani ukuran: ukuran handel skala.
- Collider padding: padding untuk ditambahkan ke handle collider.
- Gambar tether saat memanipulasi: saat aktif akan menggambar garis tether dari titik awal interaksi ke posisi tangan atau penunjuk saat ini.
- Menangani collider abaikan: jika collider ditautkan di sini, handel akan mengabaikan tabrakan apa pun dengan collider ini.
- Menangani prefab slate: prefab yang digunakan untuk handel saat kontrol diratakan.
- Tampilkan handel skala: mengontrol visibilitas handel.
- Perilaku skala: dapat diatur ke penskalakan seragam atau non-seragam.
Rotasi menangani konfigurasi
Konfigurasi ini mendefinisikan perilaku handel rotasi.
- Menangani bahan: material yang diterapkan pada handel.
- Menangani bahan yang diambil: bahan yang diterapkan pada handel yang diambil.
- Menangani prefab: prefab opsional untuk handel. Jika non diatur MRTK akan menggunakan bola sebagai default.
- Ukuran handel: ukuran handel.
- Collider padding: padding untuk ditambahkan ke handle collider.
- Gambar tether saat memanipulasi: saat aktif akan menggambar garis tether dari titik awal interaksi ke posisi tangan atau penunjuk saat ini.
- Menangani collider abaikan: jika collider ditautkan di sini, handel akan mengabaikan tabrakan apa pun dengan collider ini.
- Menangani jenis collider prefab: jenis collider yang akan digunakan dengan handel yang dibuat.
- Tampilkan handel untuk X: mengontrol visibilitas handel untuk sumbu X.
- Tampilkan handel untuk Y: mengontrol visibilitas handel untuk sumbu Y.
- Tampilkan handel untuk Z: mengontrol visibilitas handel untuk sumbu Z.
Terjemahan menangani konfigurasi
Memungkinkan mengaktifkan dan mengonfigurasi handel terjemahan untuk kontrol terikat. Perhatikan bahwa handel terjemahan dinonaktifkan per default.
- Menangani bahan: material yang diterapkan pada handel.
- Menangani bahan yang diambil: bahan yang diterapkan pada handel yang diambil.
- Menangani prefab: prefab opsional untuk handel. Jika non diatur MRTK akan menggunakan bola sebagai default.
- Ukuran handel: ukuran handel.
- Collider padding: padding untuk ditambahkan ke handle collider.
- Gambar tether saat memanipulasi: saat aktif akan menggambar garis tether dari titik awal interaksi ke posisi tangan atau pointer saat ini.
- Menangani collider abaikan: jika collider ditautkan di sini, handel akan mengabaikan tabrakan apa pun dengan collider ini.
- Menangani jenis collider prefab: jenis collider yang akan digunakan dengan handel yang dibuat.
- Tampilkan handel untuk X: mengontrol visibilitas handel untuk sumbu X.
- Tampilkan handel untuk Y: mengontrol visibilitas handel untuk sumbu Y.
- Tampilkan handel untuk Z: mengontrol visibilitas handel untuk sumbu Z.
Konfigurasi tautan (bingkai kawat)
Konfigurasi tautan memungkinkan fitur wireframe kontrol terikat. Properti berikut dapat dikonfigurasi:
- Bahan bingkai kawat: bahan yang diterapkan pada jala bingkai kawat.
- Radius tepi bingkai kawat: ketebalan bingkai kawat.
- Bentuk bingkai kawat: bentuk bingkai kawat dapat dengan kubik atau silindris.
- Perlihatkan bingkai kawat: mengontrol visibilitas bingkai kawat.
Konfigurasi efek kedekatan
Perlihatkan dan sembunyikan gagang dengan animasi berdasarkan jarak ke tangan. Ini memiliki animasi penskalakan dua langkah. Default diatur ke perilaku gaya HoloLens 2.
- Efek Kedekatan Aktif: Aktifkan aktivasi handel berbasis kedekatan
- Kedekatan Objek Sedang: Jarak untuk penskalaan langkah ke-1
- Object Close Proximity: Jarak untuk penskalaan langkah ke-2
- Skala Jauh: Nilai skala default aset handel saat tangan berada di luar rentang interaksi kontrol batas (jarak yang ditentukan di atas oleh 'Tangani Kedekatan Sedang'. Gunakan 0 untuk menyembunyikan handel secara default)
- Skala Sedang: Nilai skala aset handel saat tangan berada dalam rentang interaksi kontrol batas (jarak yang ditentukan di atas oleh 'Tangani Kedekatan Dekat'. Gunakan 1 untuk memperlihatkan ukuran normal)
- Tutup Skala: Nilai skala aset handel saat tangan berada dalam rentang interaksi ambil (jarak yang ditentukan di atas oleh 'Tangani Kedekatan Dekat'. Gunakan 1.x untuk menampilkan ukuran yang lebih besar)
- Tingkat Kenaikan Jauh: Menilai skala objek yang diskalakan kedekatan ketika tangan bergerak dari kedekatan menengah hingga jauh.
- Tingkat Pertumbuhan Sedang: Beri peringkat objek berskala kedekatan ketika tangan bergerak dari jarak menengah hingga dekat.
- Close Grow Rate: Menilai objek berskala kedekatan ketika tangan bergerak dari jarak dekat ke pusat objek.
Sistem Batasan
Kontrol terikat mendukung penggunaan manajer batasan untuk membatasi atau memodifikasi perilaku terjemahan, rotasi, atau penskalaan saat menggunakan handel kontrol terikat.
Pemeriksa properti akan menampilkan semua manajer batasan yang tersedia yang melekat pada objek game yang sama dalam dropdown dengan opsi untuk menggulir dan menyoroti manajer batasan yang dipilih.
Acara
Kontrol terikat menyediakan peristiwa berikut. Contoh ini menggunakan peristiwa ini untuk memutar umpan balik audio.
- Putar Dimulai: Diaktifkan saat rotasi dimulai.
- Putar Dihentikan: Diaktifkan saat rotasi berhenti.
- Skala Dimulai: Diaktifkan saat penskalakan dimulai.
- Skala Dihentikan: Kebakaran saat penskalakan berhenti.
- Terjemahkan Dimulai: Aktif saat terjemahan dimulai.
- Terjemahkan Dihentikan: Diaktifkan saat terjemahan berhenti.
Elastis (Eksperimental)
Elastis dapat digunakan saat memanipulasi objek melalui kontrol terikat. Perhatikan bahwa sistem elastis masih dalam keadaan eksperimental. Untuk mengaktifkan elastis, tautkan komponen manajer elastis yang ada atau buat dan tautkan manajer elastis baru melalui tombol Add Elastics Manager
.
Menangani gaya
Secara default, ketika Anda baru saja menetapkan BoundsControl.cs
skrip, itu akan menampilkan handel gaya HoloLens generasi ke-1. Untuk menggunakan handel gaya HoloLens 2, Anda perlu menetapkan prefab dan bahan handel yang tepat.
Di bawah ini adalah prefab, bahan, dan nilai penskalaan untuk handel kontrol batas gaya HoloLens 2. Anda dapat menemukan contoh ini di BoundsControlExamples
adegan.
Handel (Penyetelan untuk gaya HoloLens 2)
- Menangani Bahan: BoundingBoxHandleWhite.mat
- Menangani Grabbed Material: BoundingBoxHandleBlueGrabbed.mat
- Prefab Handel Skala: MRTK_BoundingBox_ScaleHandle.prefab
- Prefab Slate Handle Skala: MRTK_BoundingBox_ScaleHandle_Slate.prefab
- Ukuran Handel Skala: 0,016 (1,6cm)
- Scale Handle Collider Padding: 0.016 (membuat collider yang dapat diambil sedikit lebih besar dari visual handel)
- Prefab Handel Rotasi: MRTK_BoundingBox_RotateHandle.prefab
- Ukuran Handel Rotasi: 0,016
- Rotasi Handel Collider Padding: 0.016 (membuat collider yang dapat diambil sedikit lebih besar dari visual handel)
Perubahan transformasi dengan manipulator objek
Kontrol terikat dapat digunakan dalam kombinasi dengan ObjectManipulator.cs
untuk memungkinkan jenis manipulasi tertentu (misalnya memindahkan objek) tanpa menggunakan handel. Handler manipulasi mendukung interaksi satu dan dua tangan. Pelacakan tangan dapat digunakan untuk berinteraksi dengan objek dari dekat.
Agar tepi kontrol batas bertingkah sama ketika memindahkannya menggunakan ObjectManipulator
interaksi jauh, disarankan untuk menghubungkan peristiwanya untuk On Manipulation Started / On Manipulation Berakhir untuk BoundsControl.HighlightWires
/ BoundsControl.UnhighlightWires
masing-masing, seperti yang ditunjukkan pada cuplikan layar di atas.
Cara menambahkan dan mengonfigurasi kontrol terikat menggunakan Unity Inspector
- Menambahkan Collider Kotak ke objek
- Menetapkan
BoundsControl
skrip ke objek - Mengonfigurasi opsi, seperti metode 'Aktivasi' (lihat bagian Properti pemeriksa di bawah)
- (Opsional) Menetapkan prefab dan bahan untuk kontrol batas gaya HoloLens 2 (lihat bagian Gaya handel di bawah)
Catatan
Gunakan bidang PenimpaanObjek target dan Batas di pemeriksa untuk menetapkan objek dan collider tertentu di objek dengan beberapa komponen anak.
Cara menambahkan dan mengonfigurasi kontrol terikat dalam kode
Membuat instans kubus GameObject
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
Menetapkan
BoundsControl
skrip ke objek dengan collider, menggunakan AddComponent<>()private BoundsControl boundsControl; boundsControl = cube.AddComponent<BoundsControl>();
Mengonfigurasi opsi baik langsung di kontrol atau melalui salah satu konfigurasi yang dapat ditulis (lihat bagian Properti pemeriksa dan Konfigurasi di bawah)
// Change activation method boundsControl.BoundsControlActivation = BoundsControlActivationType.ActivateByProximityAndPointer; // Make the scale handles large boundsControl.ScaleHandlesConfig.HandleSize = 0.1f; // Hide rotation handles for x axis boundsControl.RotationHandlesConfig.ShowRotationHandleForX = false;
(Opsional) Tetapkan prefab dan bahan untuk kontrol batas gaya HoloLens 2. Ini masih memerlukan penugasan melalui inspektur karena bahan dan prefab harus dimuat secara dinamis.
Catatan
Menggunakan folder 'Sumber Daya' Unity atau Shader.Find untuk memuat shader secara dinamis tidak disarankan karena permutasi shader mungkin hilang saat runtime.
BoxDisplayConfiguration boxConfiguration = boundsControl.BoxDisplayConfig;
boxConfiguration.BoxMaterial = [Assign BoundingBox.mat]
boxConfiguration.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
ScaleHandlesConfiguration scaleHandleConfiguration = boundsControl.ScaleHandlesConfig;
scaleHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
scaleHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
scaleHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
scaleHandleConfiguration.HandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
scaleHandleConfiguration.HandleSize = 0.016f;
scaleHandleConfiguration.ColliderPadding = 0.016f;
RotationHandlesConfiguration rotationHandleConfiguration = boundsControl.RotationHandlesConfig;
rotationHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
rotationHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
rotationHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
rotationHandleConfiguration.HandleSize = 0.016f;
rotationHandleConfiguration.ColliderPadding = 0.016f;
Contoh: Mengatur skala kontrol batas maksimum minimum menggunakan MinMaxScaleConstraint
Untuk mengatur skala minimum dan maksimum, lampirkan MinMaxScaleConstraint
ke kontrol Anda. Karena kontrol terikat secara otomatis melampirkan dan mengaktifkan manajer batasan, MinMaxScaleConstraint akan secara otomatis diterapkan ke perubahan transformasi setelah dilampirkan dan dikonfigurasi.
Anda juga dapat menggunakan MinMaxScaleConstraint untuk mengatur skala minimum dan maksimum untuk ObjectManipulator
.
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bcontrol = cube.AddComponent<BoundsControl>();
// Important: BoundsControl creates a constraint manager on start if one does not exist.
// There's no need to manually attach a constraint manager.
MinMaxScaleConstraint scaleConstraint = bcontrol.gameObject.AddComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;
Contoh: Menambahkan kontrol terikat di sekitar objek game
Untuk menambahkan kontrol batas di sekitar objek, cukup tambahkan BoundsControl
komponen ke dalamnya:
private void PutABoundsControlAroundIt(GameObject target)
{
target.AddComponent<BoundsControl>();
}
Migrasi dari Kotak Pembatas
Prefab dan instans yang ada menggunakan kotak pembatas dapat ditingkatkan ke kontrol batas baru melalui jendela migrasi yang merupakan bagian dari paket alat MRTK.
Untuk meningkatkan instans individual kotak pembatas, ada juga opsi migrasi di dalam pemeriksa properti komponen.