Kotak pembatas — MRTK2
Catatan
Kotak pembatas tidak digunakan lagi dan digantikan oleh kontrol batas penerusnya. Gunakan salah satu opsi migrasi untuk meningkatkan objek game yang ada.
BoundingBox.cs
Skrip ini menyediakan fungsionalitas dasar untuk mengubah objek dalam realitas campuran. Kotak pembatas akan menampilkan kubus di sekitar hologram untuk menunjukkan bahwa kotak tersebut dapat berinteraksi. Handel di sudut dan tepi kubus memungkinkan penskalaan atau memutar objek. Kotak pembatas juga bereaksi terhadap input pengguna. Pada HoloLens 2, misalnya, kotak pembatas merespons kedekatan jari, memberikan umpan balik visual untuk membantu memahami jarak dari objek. Semua interaksi dan visual dapat dengan mudah disesuaikan.
Untuk informasi selengkapnya, lihat Kotak batas dan bilah Aplikasi di Windows Dev Center.
Contoh adegan
Anda dapat menemukan contoh konfigurasi kotak pembatas di BoundingBoxExamples
adegan.
Cara menambahkan dan mengonfigurasi kotak pembatas menggunakan Unity Inspector
- Menambahkan Box Collider ke objek
- Menetapkan
BoundingBox
skrip ke objek - Mengonfigurasi opsi, seperti metode 'Aktivasi' (lihat bagian Properti pemeriksa di bawah)
- (Opsional) Menetapkan prefab dan bahan untuk kotak pembatas gaya HoloLens 2 (lihat bagian Menangani gaya di bawah)
Catatan
Gunakan bidang PenimpaanObjek Target dan Batas di inspektur untuk menetapkan objek tertentu dan collider di objek dengan beberapa komponen anak.
Cara menambahkan dan mengonfigurasi kotak pembatas dalam kode
Membuat instans kubus GameObject
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
Menetapkan
BoundingBox
skrip ke objek dengan collider, menggunakan AddComponent<>()private BoundingBox bbox; bbox = cube.AddComponent<BoundingBox>();
Mengonfigurasi opsi (lihat bagian Properti pemeriksa di bawah)
// Make the scale handles large bbox.ScaleHandleSize = 0.1f; // Hide rotation handles bbox.ShowRotationHandleForX = false; bbox.ShowRotationHandleForY = false; bbox.ShowRotationHandleForZ = false;
(Opsional) Tetapkan prefab dan bahan untuk kotak pembatas 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.
bbox.BoxMaterial = [Assign BoundingBox.mat]
bbox.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
bbox.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
bbox.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
bbox.ScaleHandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
bbox.ScaleHandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
bbox.ScaleHandleSize = 0.016f;
bbox.ScaleHandleColliderPadding = 0.016f;
bbox.RotationHandleSlatePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
bbox.RotationHandleSize = 0.016f;
bbox.RotateHandleColliderPadding = 0.016f;
Contoh: Mengatur skala kotak pembatas minimum dan maksimum menggunakan MinMaxScaleConstraint
Untuk mengatur skala minimum dan maksimum, gunakan MinMaxScaleConstraint
. Anda juga dapat menggunakan MinMaxScaleConstraint untuk mengatur skala minimum dan maksimum untuk ManipulationHandler
.
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bbox = cube.AddComponent<BoundingBox>();
// Important: BoundingBox creates a scale handler on start if one does not exist
// do not use AddComponent, as that will create a duplicate handler that will not be used
MinMaxScaleConstraint scaleConstraint = bbox.gameObject.GetComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;
Contoh: Menambahkan kotak pembatas di sekitar objek game
Untuk menambahkan kotak pembatas di sekitar objek, cukup tambahkan BoundingBox
komponen ke dalamnya:
private void PutABoxAroundIt(GameObject target)
{
target.AddComponent<BoundingBox>();
}
Properti pemeriksa
Objek target
Properti ini menentukan objek mana yang akan diubah oleh manipulasi kotak pembatas. Jika tidak ada objek yang diatur, kotak pembatas default ke objek pemilik.
Penimpaan batas
Mengatur collider kotak dari objek untuk komputasi terikat.
Perilaku aktivasi
Ada beberapa opsi untuk mengaktifkan antarmuka kotak pembatas.
- Aktifkan Saat Mulai: Kotak batas menjadi terlihat setelah adegan dimulai.
- Aktifkan Menurut Kedekatan: Kotak pembatas menjadi terlihat saat tangan artikulasi dekat dengan objek.
- Aktifkan Menurut Penunjuk: Kotak pembatas menjadi terlihat saat ditargetkan oleh penunjuk sinar tangan.
- Aktifkan Secara Manual: Kotak batas tidak terlihat secara otomatis. Anda dapat mengaktifkannya secara manual melalui skrip dengan mengakses properti boundingBox.Active.
Menskalakan minimum
Skala minimum yang diizinkan. Properti ini tidak digunakan lagi dan lebih baik menambahkan MinMaxScaleConstraint
skrip. Jika skrip ini ditambahkan, skala minimum akan diambil darinya alih-alih dari kotak pembatas.
Skala maksimum
Skala maksimum yang diizinkan. Properti ini tidak digunakan lagi dan lebih baik menambahkan MinMaxScaleConstraint
skrip. Jika skrip ini ditambahkan, skala maksimum akan diambil darinya alih-alih dari kotak pembatas.
Tampilan kotak
Berbagai opsi visualisasi kotak pembatas.
Jika Sumbu Rata diatur ke Rata otomatis, skrip akan melarang manipulasi di sepanjang sumbu dengan tingkat terkecil. Ini menghasilkan kotak pembatas 2D, yang biasanya digunakan untuk objek tipis.
Handles
Anda dapat menetapkan bahan dan prefab untuk mengambil alih gaya handel. Jika tidak ada handel yang ditetapkan, handel akan ditampilkan dalam gaya default.
Acara
Kotak batas menyediakan peristiwa berikut. Contoh ini menggunakan peristiwa ini untuk memutar umpan balik audio.
- Putar Dimulai: Diaktifkan saat rotasi dimulai.
- Putar Berakhir: Diaktifkan saat rotasi berakhir.
- Skala Dimulai: Menembak saat penskalakan dimulai.
- Skala Berakhir: Menembak saat penskalakan berakhir.
Menangani gaya
Secara default, ketika Anda baru saja menetapkan BoundingBox.cs
skrip, skrip 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 gagang kotak pembatas gaya HoloLens 2. Anda dapat menemukan contoh ini di BoundingBoxExamples
adegan.
Handel (Penyetelan untuk gaya HoloLens 2)
- Menangani Bahan: BoundingBoxHandleWhite.mat
- Menangani Grabbed Material: BoundingBoxHandleBlueGrabbed.mat
- Prefab Handel Skala: MRTK_BoundingBox_ScaleHandle.prefab
- Prefab Pegangan Skala Slate: 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 handle)
- 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 handle)
Kedekatan (Penyetelan untuk gaya HoloLens 2)
Perlihatkan dan sembunyikan gagang dengan animasi berdasarkan jarak ke tangan. Ini memiliki animasi penskalan dua langkah.
- Efek Kedekatan Aktif: Aktifkan aktivasi handel berbasis kedekatan
- Menangani Kedekatan Sedang: Jarak untuk penskalaan langkah ke-1
- Tangani Kedekatan Dekat: Jarak untuk penskalaan langkah ke-2
- Skala Jauh: Nilai skala default aset handel saat tangan berada di luar rentang interaksi kotak pembatas (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 kotak pembatas (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)
Membuat objek dapat di-movable dengan handler manipulasi
Kotak pembatas dapat dikombinasikan dengan ManipulationHandler.cs
untuk membuat objek bergerak menggunakan interaksi jauh. Handler manipulasi mendukung interaksi satu dan dua tangan.
Pelacakan tangan dapat digunakan untuk berinteraksi dengan objek dari dekat.
Agar tepi kotak pembatas bertingkah sama ketika memindahkannya menggunakan ManipulationHandler
interaksi jauh, disarankan untuk menghubungkan peristiwanya untuk On Manipulation Started / On Manipulation Berakhir untuk BoundingBox.HighlightWires
/ BoundingBox.UnhighlightWires
masing-masing, seperti yang ditunjukkan pada cuplikan layar di atas.
Migrasi ke kontrol terikat
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.