Bagikan melalui


Kotak pembatas — MRTK2

Kotak pembatas

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.

Contoh Kotak Pembatas

Cara menambahkan dan mengonfigurasi kotak pembatas menggunakan Unity Inspector

  1. Menambahkan Box Collider 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 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.

Kotak Pembatas 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 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.
Acara

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.

Gaya Gagang Kotak Pembatas

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

Gaya Tangan 2

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.

Kedekatan
  • 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.

Penangan Manipulasi

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.

Migrasi Kontrol Batas