Dispatching events

UI(User Interface) Memungkinkan pengguna untuk berinteraksi dengan aplikasi Anda. Unity saat ini mendukung tiga sistem UI. More info
Lihat di Glossary
Toolkit event systemCara mengirim peristiwa ke objek dalam aplikasi berdasarkan input, apakah keyboard, mouse, sentuh, atau input kustom. Sistem Acara terdiri dari beberapa komponen yang bekerja sama untuk mengirim acara. More info
Lihat di Glossary
mendengarkan acara, datang dari sistem operasi atau scriptsSepotong kode yang memungkinkan Anda untuk membuat Komponen Anda sendiri, memicu peristiwa permainan, memodifikasi sifat komponen dari waktu ke waktu dan menanggapi input pengguna dengan cara apa pun yang Anda sukai. More info
Lihat di Glossary
, dan mengirimkan acara ini ke elemen visual menggunakan EventDispatcher. Pengirim acara menentukan strategi pengiriman yang tepat untuk setiap acara yang dikirim. Setelah ditentukan, pengiriman mengeksekusi strategi.

Elemen visual menerapkan perilaku default untuk beberapa peristiwa. Ini dapat melibatkan penciptaan dan pelaksanaan acara tambahan. Sebagai contoh, MouseMoveEvent bisa menghasilkan MouseEnterEvent tambahan dan MouseLeaveEvent. Peristiwa ini memasuki antrian dan proses setelah acara saat ini. Sebagai contoh, proses selesai MouseMoveEvent sebelum peristiwa MouseEnterEvent dan MouseLeaveEvent.

Perilaku yang tidak tepat dari jenis acara

Setiap jenis acara memiliki perilaku pengiriman sendiri. Perilaku dari setiap jenis acara memecah ke tiga tahap:

  • Trickles down: Events sent to elements during the trickle down phase.
  • Bubbles up: Events sent to elements during the bubble-up phase.
  • Cancellable: Events that can have their default action execution cancelled, stopped, or prevented.

Untuk daftar perilaku pengiriman untuk setiap jenis acara, lihat Halaman referensi acara.

Penyebaran acara

Setelah pengiriman acara memilih target acara, itu menghitung jalur perbanyakan acara. Jalur perambatan adalah daftar elemen visual yang dipesan yang menerima acara. Jalur perambatan terjadi dalam urutan berikut:

  1. trickle-down phase.
  2. Target acara menerima acara.
  3. bubble-up phase.
Propagation path

Sebagian besar jenis acara dikirim ke semua elemen di sepanjang jalur perambatan. Beberapa jenis acara melewatkan fase gelembung-up, dan beberapa jenis acara dikirim ke target acara hanya.

Jika Anda menyembunyikan atau menonaktifkan elemen, itu tidak akan menerima acara. Acara masih menyebar ke nenek moyang dan keturunan elemen tersembunyi atau dinonaktifkan.

Sebagai perjalanan acara di sepanjang jalur perambatan, pembaruan Event.currentTarget ke elemen penanganan acara. Dalam fungsi callback acara, ada dua properti yang mencatat perilaku pengiriman:

  • Event.currentTarget adalah elemen visual di mana callback terdaftar.
  • Event.target adalah elemen di mana acara terjadi, misalnya elemen langsung di bawah mouse.

Target acara

Target acara tergantung pada jenis acara. Untuk acara mouse, targetnya paling umum elemen yang dapat dipilih paling top, langsung di bawah mouse. Untuk acara keyboard, target adalah elemen yang memiliki fokus.

Acara UI Toolkit memiliki properti target, yang berisi referensi ke elemen di mana acara terjadi. Untuk sebagian besar peristiwa yang berasal dari sistem operasi, proses pengiriman menemukan target acara secara otomatis.

Elemen target disimpan dalam EventBase.target dan tidak berubah selama proses pengiriman. Properti Event.currentTarget memperbarui elemen visual saat ini menangani acara.

Memilih mode dan bentuk kustom

Sebagian besar peristiwa mouse menggunakan mode pengambilan untuk menentukan target mereka. Kelas VisualElement memiliki properti pickingMode yang mendukung nilai-nilai berikut:

  • PickingMode.Position (default): melakukan pengambilan berdasarkan posisi persegi panjang.
  • PickingMode.Ignore: mencegah penjemputan akibat peristiwa mouse.

Anda dapat menimpa metode VisualElement.ContainsPoint() untuk melakukan logika intersection kustom.

Mengatur mouse

Setelah MouseDownEvent, beberapa elemen harus menangkap posisi pointer untuk memastikan itu menerima semua peristiwa mouse berikutnya, bahkan ketika kursor tidak lagi menggigit elemen. Misalnya, ketika Anda mengklik tombol, slider, atau bilah gulir.

Untuk menangkap mouse, panggilan element.CaptureMouse() atau MouseCaptureController.CaptureMouse().

Untuk melepaskan mouse, panggilan MouseCaptureController.ReleaseMouse(). Jika elemen lain sudah menangkap mouse ketika Anda memanggil CaptureMouse(), elemen menerima MouseCaptureOutEvent dan kehilangan tangkapan.

Hanya satu elemen dalam aplikasi dapat memiliki capture setiap saat. Sementara elemen memiliki tangkapan, itu target semua peristiwa mouse berikutnya kecuali peristiwa roda mouse. Ini hanya berlaku untuk acara mouse yang belum memiliki target set dan bergantung pada proses pengiriman untuk menentukan target.

Untuk informasi lebih lanjut, lihat Kalender.

Cincin fokus dan urutan tab

Setiap panel UI Toolkit memiliki cincin fokus yang menentukan urutan elemen fokus. Secara default, pencarian pertama (DFS) pada pohon elemen visual menentukan urutan fokus elemen. Misalnya, urutan fokus untuk pohon yang digambarkan di bawah ini akan F, B, A, D, C, E, G, I, H.

Focus order
Fokus

Beberapa peristiwa menggunakan urutan fokus untuk menentukan elemen mana yang memegang fokus. Misalnya, target untuk acara keyboard adalah elemen dalam fokus.

Gunakan properti focusable untuk mengontrol apakah elemen visual terfokus. Secara default, VisualElements tidak dapat difokuskan, tetapi beberapa subklas, seperti TextField, mungkin dapat difokuskan secara default.

Gunakan properti tabIndex untuk mengontrol pesanan fokus sebagai berikut (tabIndex nilai default 0):

  • Jika tabIndex negatif, Anda tidak dapat menggunakan tab pada elemen.
  • Jika tabIndex adalah nol, elemen menjaga urutan tab default, sebagaimana ditentukan oleh algoritma cincin fokus.
  • Jika tabIndex positif, elemen ditempatkan di depan elemen lain yang memiliki nol tabIndex (tabIndex = 0) atau nilai tabIndex lebih kecil dari sendiri.