Kotak pembatas — MRTK2

Bounding box

Catatan

Kotak batas tidak digunakan lagi dan digantikan oleh kontrol batas penerusnya. Gunakan salah satu opsi migrasi untuk meningkatkan objek game yang ada.

Skrip ini BoundingBox.cs menyediakan fungsionalitas dasar untuk mengubah objek dalam realitas campuran. Kotak pembatas akan menampilkan kubus di sekitar hologram untuk menunjukkan bahwa itu dapat berinteraksi. Menangani 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 pembatas dan Bilah aplikasi di Windows Dev Center.

Contoh adegan

Anda dapat menemukan contoh konfigurasi kotak pembatas di BoundingBoxExamples adegan.

Bounding Box Examples

Cara menambahkan dan mengonfigurasi kotak pembatas menggunakan Unity Inspector

  1. Menambahkan Collider Kotak ke objek
  2. Menetapkan BoundingBox skrip ke objek
  3. Mengonfigurasi opsi, seperti metode 'Aktivasi' (lihat bagian Properti pemeriksa di bawah)
  4. (Opsional) Menetapkan prefab dan bahan untuk kotak pembatas 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.

Bounding Box 1

Cara menambahkan dan mengonfigurasi kotak pembatas dalam kode

  1. Membuat instans kubus GameObject

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. Menetapkan BoundingBox skrip ke objek dengan collider, menggunakan AddComponent<>()

    private BoundingBox bbox;
    bbox = cube.AddComponent<BoundingBox>();
    
  3. 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;
    
  4. (Opsional) Tetapkan prefab dan bahan untuk kotak 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.

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 batas 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 pembatas 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 Ratakan Sumbu diatur ke Ratakan 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 materi 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: Diaktifkan saat penskalakan dimulai.
  • Skala Berakhir: Kebakaran saat penskalakan berakhir.
Events

Menangani gaya

Secara default, ketika Anda baru saja menetapkan BoundingBox.cs skrip, skrip akan menampilkan handel gaya HoloLens generasi ke-1. Untuk menggunakan gagang gaya HoloLens 2, Anda perlu menetapkan prefab dan bahan handel yang tepat.

Bounding Box Handle Styles

Di bawah ini adalah prefab, bahan, dan nilai penskalaan untuk gagang kotak pembatas gaya HoloLens 2. Anda dapat menemukan contoh ini di BoundingBoxExamples adegan.

HandStyles 2

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)

Kedekatan (Penyetelan untuk gaya HoloLens 2)

Perlihatkan dan sembunyikan gagang dengan animasi berdasarkan jarak ke tangan. Ini memiliki animasi penskalakan dua langkah.

Proximity
  • Efek Kedekatan Aktif: Aktifkan aktivasi handel berbasis kedekatan
  • Menangani Kedekatan Sedang: Jarak untuk penskalaan langkah ke-1
  • Menangani Jarak Dekat: Jarak untuk penskalaan langkah ke-2
  • Skala Jauh: Nilai skala default aset handel saat tangan berada di luar jangkauan 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 'Tangan Tutup Kedekatan'. 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 dipungut 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.

Manipulation Handler

Agar tepi kotak pembatas bertingkah sama ketika memindahkannya menggunakan ManipulationHandlerinteraksi 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.

Bounds Control Migrate