Tangkap peristiwa memberi tahu Anda tentang perubahan dalam keadaan tangkapan mouse. UI(User Interface) Memungkinkan pengguna untuk berinteraksi dengan aplikasi Anda. Unity saat ini mendukung tiga sistem UI. More info
Lihat di Glossary Toolkit memiliki dua jenis acara capture:
Ketika elemen menangkap mouse atau pointer, itu satu-satunya elemen yang menerima peristiwa dari perangkat penunjuk sampai perangkat rilis atau kehilangan tangkapan.
Misalnya, jika Anda mengklik kotak teks, kotak teks menangkap mouse. mouse masih bisa bergerak di sekitar layar, tetapi tidak akan memicu peristiwa di luar kotak teks. Selama kotak teks memiliki mouse Anda ditangkap, itu tidak akan memicu peristiwa lain. Ketika pengguna menekan tombol pada mouse di luar kotak teks, kotak melepaskan tangkapan mouse.
Event | Description | Trickles down | Bubbles up | Cancellable |
---|---|---|---|---|
Login Sitemap | Sent ketika elemen mengambil tangkapan mouse. | ✔ | ✔ | |
Login Sitemap | Sent ketika rilis elemen atau kehilangan tangkapan mouse. | ✔ | ✔ | |
Login Sitemap | Sent ketika elemen menangkap pointer. | ✔ | ✔ | |
Login Sitemap | Sent ketika elemen melepaskan pointer. | ✔ | ✔ |
Tikus menangkap peristiwa merujuk pada peristiwa pada mouse fisik, atau mouse virtual yang meniru mouse fisik. Tutup mouse juga akan menghasilkan PointerCaptureEvent
untuk pointer mouse.
Ketika elemen melepaskan tangkapan mouse, pemicu MouseCaptureOutEvent
yang sesuai, dengan target menjadi elemen yang meminta pelepasan penangkapan.
Tidak ada dua elemen yang menangkap mouse pada saat yang sama. Jika elemen visual lain memicu MouseCaptureEvent
, elemen yang mengirimkan MouseCaptureEvent
asli kehilangan tangkapan. Ini juga memicu MouseCaptureOutEvent
pada elemen asli.
Acara pointer pracede acara mouse di UI Toolkit. Jika jenis pointer adalah mouse, menangkapnya juga akan memicu peristiwa tangkapan mouse yang sesuai. Capturing pointer juga akan menangkap mouse.
Acara MouseCaptureEvent
dikirim ketika elemen mengambil tangkapan mouse.
target
: Elemen yang mengambil tangkapan.
Acara MouseCaptureOutEvent
dikirim ketika rilis elemen, atau kehilangan tangkapan mouse.
target
: Elemen yang kehilangan tangkapan.
Acara PointerCaptureEvent
dikirim ketika elemen mengambil penangkapan pointer.
target
: Elemen yang mengambil tangkapan.
Acara PointerCaptureOutEvent
dikirim ketika rilis elemen, atau kehilangan penangkapan pointer.
target
: Elemen yang kehilangan tangkapan.
Contoh berikut menunjukkan perilaku acara capture, dan menangkap dan melepaskan pointer.
Untuk melihat contoh dalam tindakan, lakukan berikut:
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
public class CaptureEventsTestWindow : EditorWindow
{
[MenuItem("Window/UI Toolkit/Capture Events Test Window")]
public static void ShowExample()
{
var wnd = GetWindow<CaptureEventsTestWindow>();
wnd.titleContent = new GUIContent("Capture Events Test Window");
}
private bool m_IsCapturing = false;
public void CreateGUI()
{
// Add a few clickable labels that print a message to the console when clicked
for (int i = 0; i < 4; i++)
{
Label clickableLabel = new Label($"Label {i} - Click Me!");
clickableLabel.RegisterCallback<MouseDownEvent>((evt) => { Debug.Log($"Clicked on label '{(evt.target as Label).text}'"); });
rootVisualElement.Add(clickableLabel);
}
// Now add a label that captures the pointer
Label capturingLabel = new Label("Click here to capture mouse");
capturingLabel.RegisterCallback<MouseDownEvent>((evt) =>
{
if (!m_IsCapturing)
{
capturingLabel.text = "Click here to release mouse";
MouseCaptureController.CaptureMouse(capturingLabel);
m_IsCapturing = true;
}
else
{
capturingLabel.text = "Click here to capture mouse";
MouseCaptureController.ReleaseMouse(capturingLabel);
m_IsCapturing = false;
}
});
rootVisualElement.Add(capturingLabel);
// Register callbacks to print a message when the mouse is captured or released
rootVisualElement.RegisterCallback<MouseCaptureEvent>((evt) =>
{
Debug.Log("Mouse captured");
});
rootVisualElement.RegisterCallback<MouseCaptureOutEvent>((evt) =>
{
Debug.Log("Mouse captured released");
});
}
}