Bagikan melalui


Batasan — MRTK3

ConstraintManager memungkinkan Anda menerapkan sekumpulan komponen batasan ke transformasi. Secara default, manajer batasan akan secara otomatis mengumpulkan semua komponen batasan yang terpasang dan menerapkannya ke objek target. Namun, pengguna juga dapat memilih untuk mengonfigurasi daftar batasan yang diterapkan secara manual dan hanya mengizinkan subset batasan terlampir untuk digunakan.

Catatan

MRTK3 saat ini menawarkan subset terbatas dari batasan dari MRTK 2.x. Saat ini kami sedang menyelidiki refaktor sistem Batasan untuk menyatukan alur kerja pengembang dengan Solvers dan Elastics. Pantau terus!

Saat ini, elemen MRTK UX berikut mendukung batasan:

Manajer batasan dapat beroperasi dalam dua mode:

  • Pilihan batasan otomatis
  • Pilihan batasan manual

Pilihan batasan

Pilihan batasan otomatis

Mode Pemilihan Otomatis

Mode Otomatis default akan mencantumkan semua komponen batasan terlampir. Anda dapat langsung melompat ke komponen di inspektur menggunakan tombol Buka komponen atau menambahkan batasan baru dari menu dropdown.

Pilihan batasan manual

Mode Pemilihan Manual

Jika manajer batasan diatur ke mode manual, hanya batasan yang ditautkan dalam daftar batasan yang diproses dan diterapkan ke transformasi. Saat mengaktifkan mode manual untuk pertama kalinya, manajer akan mengisi daftar secara otomatis dengan semua batasan yang saat ini terpasang.

Catatan

Tindakan Hapus Entri hanya akan menghapus batasan dari daftar pilihan manual. Komponen akan tetap ada pada GameObject.

Urutan eksekusi

Urutan eksekusi setiap batasan dapat ditentukan dalam opsi Urutan Eksekusi pada batasan itu sendiri. Urutan akan tercermin dalam daftar yang ditampilkan di manajer batasan. Beberapa batasan akan berprilaku berbeda ketika digabungkan dalam urutan yang berbeda, jadi perlu diingat prioritas setiap batasan dan sesuaikan urutannya.

Mengubah batasan

Anda dapat menggunakan batasan untuk membatasi manipulasi dalam beberapa cara. Misalnya, beberapa aplikasi mungkin memerlukan rotasi dan bahwa objek tetap tegak. Dalam hal ini, RotationAxisConstraint dapat ditambahkan ke objek dan digunakan untuk membatasi rotasi ke rotasi sumbu y. MRTK memberikan beberapa batasan, yang semuanya dijelaskan di bawah ini.

Anda juga dapat menentukan batasan baru dan menggunakannya untuk membuat perilaku manipulasi unik yang mungkin diperlukan untuk beberapa aplikasi. Untuk melakukan ini, buat skrip yang mewarisi dari TransformConstraint dan mengimplementasikan properti abstrak ConstraintType dan metode abstrak ApplyConstraint . Batasan baru Anda akan muncul di menu dropdown, dan harus didaftarkan di manajer batasan secara otomatis saat ditambahkan ke objek.

Semua batasan yang disediakan oleh MRTK berbagi properti berikut:

Jenis Tangan menentukan apakah batasan digunakan untuk manipulasi satu tangan, dua tangan, atau kedua jenis manipulasi. Karena properti ini adalah bendera, kedua opsi dapat dipilih.

  • Satu tangan: Batasan akan digunakan selama manipulasi satu tangan jika dipilih.
  • Dua tangan: Batasan akan digunakan selama manipulasi dua tangan jika dipilih.

ProximityType menentukan apakah batasan digunakan untuk manipulasi dekat, jauh, atau kedua jenis. Karena properti ini adalah bendera, kedua opsi dapat dipilih.

  • Dekat: Batasan akan digunakan selama manipulasi dekat jika dipilih.
  • Jauh: Batasan akan digunakan selama manipulasi jauh jika dipilih.

FaceUserConstraint

Batasan ini membatasi rotasi objek sehingga akan selalu dihadapi pengguna. Opsi Face Away mengontrol apakah sumbu Z positif atau negatif digunakan.

Demonstrasi FaceUserConstraint

FixedDistanceConstraint

Batasan ini memperbaiki jarak antara objek yang dimanipulasi dan transformasi objek lain pada awal manipulasi. Ini berguna untuk perilaku seperti memperbaiki jarak dari objek yang dimanipulasi ke transformasi kepala. Bidang Transformasi batasan default ke transformasi kamera, dan merupakan transformasi lain yang objek yang dimanipulasi akan memiliki jarak tetap.

Demonstrasi FixedDistanceConstraint

MaintainApparentSizeConstraint

Ketika batasan ini dilampirkan ke objek, tidak peduli seberapa jauh objek berasal dari pengguna, itu akan mempertahankan ukuran yang jelas yang sama kepada pengguna (yaitu akan memakan proporsi yang sama dari bidang pandang pengguna). Ini dapat digunakan untuk memastikan bahwa panel slate atau teks tetap dapat dibaca saat memanipulasi.

Demonstrasi MaintainApparentSizeConstraint

MoveAxisConstraint

Batasan ini dapat digunakan untuk memperbaiki di mana sumbu objek yang dimanipulasi dapat dipindahkan. Ini dapat berguna untuk memanipulasi objek di atas permukaan bidang, atau di sepanjang garis.
Batasan pada bidang pergerakan menentukan sumbu mana yang akan mencegah pergerakan. Secara default, sumbu ini akan menjadi global daripada lokal, tetapi ini dapat diubah di bawah ini. Karena properti ini adalah bendera, sejumlah opsi dapat dipilih.

Demonstrasi MoveAxisConstraint

MinMaxScaleConstraint

Batasan ini membatasi skala objek, berguna untuk mencegah pengguna menskalakan objek ke ukuran yang sangat kecil atau besar. Ini berfungsi untuk penskalaan berbasis handel (dengan BoundsControl) dan dengan penskalaan langsung dua tangan (dengan ObjectManipulator). Opsi Relatif terhadap status awal menentukan apakah nilai skala Minimum dan Maksimum tertentu adalah nilai absolut atau apakah nilai tersebut dikalikan pada skala awal objek.

Demonstrasi MinMaxScaleConstraint

RotationAxisConstraint

Batasan ini dapat digunakan untuk memperbaiki sumbu mana objek yang dimanipulasi dapat diputar. Ini dapat berguna untuk menjaga objek yang dimanipulasi dengan tegak, tetapi masih memungkinkan rotasi sumbu y, misalnya.
Bidang Batasan pada rotasi menentukan sumbu mana yang akan mencegah rotasi. Secara default, sumbu ini akan menjadi global daripada lokal, tetapi ini dapat diubah di bawah ini. Karena properti ini adalah bendera, sejumlah opsi dapat dipilih.

Demonstrasi RotationAxisConstraint