Acara Mouse terjadi ketika Anda berinteraksi dengan UI(User Interface) Memungkinkan pengguna untuk berinteraksi dengan aplikasi Anda. Unity saat ini mendukung tiga sistem UI. More info
Lihat di Glossary menggunakan mouse. Sentuh, pena, atau perangkat penunjuk lainnya menghasilkan acara lain, bukan acara mouse. Dalam hal Mouse API dan dalam dokumentasi ini, istilah "mouse" hanya merujuk pada mouse fisik atau mouse virtual yang meniru mouse fisik.
Acara Mouse selalu didahului oleh PointerEvent
yang sesuai.
Kelas dasar untuk semua acara mouse adalah MouseEventBase.
Event | Description | Trickles down | Bubbles up | Cancellable |
---|---|---|---|---|
Login Sitemap | Sent ketika pengguna menekan tombol mouse. | Yes | Yes | Yes |
MouseUpEvent | Sent ketika pengguna melepaskan tombol mouse. | Yes | Yes | Yes |
MouseMoveEvent | Sent ketika pengguna bergerak mouse. | Yes | Yes | Yes |
WheelEvent | Sent ketika pengguna mengaktifkan roda mouse. | Yes | Yes | Yes |
Login Sitemap | Sent ketika mouse memasuki jendela. | Yes | ||
Login Sitemap | Sent ketika mouse meninggalkan jendela. | Yes | ||
Login Sitemap | Sent ketika mouse memasuki elemen atau salah satu keturunannya. | Yes | Yes | |
Login Sitemap | Sent ketika mouse meninggalkan elemen atau salah satu keturunannya. | Yes | Yes | |
Login Sitemap | Sent ketika mouse memasuki elemen. | Yes | Yes | Yes |
Login Sitemap | Sent ketika mouse meninggalkan elemen. | Yes | Yes | Yes |
Login Sitemap (obsolete) | Sent ketika pengguna menekan dan melepaskan tombol mouse ketiga. Exists untuk keterbelakangan kompatibilitas dengan IMGUI. | Yes | Yes | Yes |
button
: Properti button
mengembalikan bilangan bulat yang mengidentifikasi tombol mouse ditekan untuk memicu acara. Tabel berikut daftar bilangan bulat dan tombol mouse terkait:
Integer | Button |
---|---|
0 | Tombol kiri |
1 | Tombol kanan |
2 | Tombol tengah |
pressedButtons
: Properti pressedButton
mengembalikan bilangan bulat yang mengidentifikasi kombinasi tombol mouse saat ini ditekan.
Jumlah adalah jumlah nilai integer tombol individu (lihat tabel di bawah). Sebagai contoh, memegang tombol mouse kanan dan tombol mouse tengah yang ditekan pada saat yang sama akan mengakibatkan pressedButton memiliki nilai 6.
Integer | Button |
---|---|
1 | Tombol kiri |
2 | Tombol kanan |
4 | Tombol tengah |
modifiers
: Properti modifiers
mengembalikan kunci pengubah ditekan selama acara keyboard. Beberapa contoh pengubah adalah tombol Shift
, Ctrl
, atau Alt
.
Untuk informasi lebih lanjut, lihat dokumentasi MDN.Bagian kunci pengubah of the MDN documentation.
mousePosition
: Properti mousePosition
mengembalikan posisi mouse dalam panel, juga dikenal sebagai sistem koordinat layar. Untuk informasi lebih lanjut tentang koordinat panel, lihat Login Halaman pohon.
localMousePosition
: Properti localMousePosition
mengembalikan koordinat relatif terhadap elemen visual target.
mouseDelta
: Perbedaan antara posisi pointer selama acara mouse sebelumnya dan posisinya selama acara mouse saat ini.
Daftar berikut menyediakan nama, deskripsi, dan target setiap acara dalam keluarga acara. Untuk informasi lebih lanjut tentang acara, lihat UI Toolkit API.
Sebuah Login Sitemap dikirim ketika tombol mouse ditekan sementara kursor berada dalam elemen visual.
target
: Elemen visual yang menerima tangkapan mouse. Jika tidak, itu elemen paling dapat dipilih di bawah kursor.
Pemicu MouseUpEvent ketika rilis tombol mouse sementara kursor berada dalam elemen visual. MouseUpEvent
gratis hingga MouseDownEvent
.
target
: Elemen visual yang menerima tangkapan mouse. Jika tidak, itu elemen paling dapat dipilih di bawah kursor.
MouseMoveEvent dikirim ketika hotspot kursor dipindahkan dalam elemen visual.
target
: Elemen visual yang menerima tangkapan mouse. Jika tidak, itu elemen paling dapat dipilih di bawah kursor.
WheelEvent dikirim ketika roda mouse ditekan.
target
: Elemen visual yang menerima tangkapan mouse. Jika tidak, itu elemen paling dapat dipilih di bawah kursor.
A Login Sitemap memicu ketika kursor dipindahkan ke jendela Editor. panel Runtime tidak menerima acara ini ketika Anda memasuki jendela tampilan Game.
target
: Elemen visual yang menerima tangkapan mouse. Jika tidak, itu elemen paling dapat dipilih di bawah kursor.
Login Sitemap api ketika kursor keluar ruang jendela Editor. MouseLeaveWindowEvent
adalah counterpoint untuk MouseEnterWindowEvent
.
target
: Elemen visual yang menerima tangkapan mouse. Jika tidak kembali kebohongan, karena kursor tidak di atas elemen.
Login Sitemap dikirim ketika kursor dipindahkan ke elemen visual, atau salah satu keturunannya.
target
: Elemen visual di bawah kursor mouse, atau salah satu keturunannya.
Login Sitemap memicu ketika kursor bergerak di luar elemen visual. Acara ini berbeda dari MouseOutEvent
sebagai acara ini dikirim ke setiap elemen keluar mouse. Acara ini tidak diperbanyak.
target
: Elemen visual (atau salah satu keturunannya) yang keluar kursor mouse.
Login Sitemap dikirim ketika kursor memasuki elemen. Ini berbeda dari MouseEnterEvent
, karena acara ini hanya dikirim ke elemen yang dimasukkan.
target
: Elemen visual yang berada di bawah kursor mouse.
Pemicu Login Sitemap ketika perangkat penunjuk bergerak kursor di luar batas elemen visual.
MouseOutEvent
berbeda dari MouseLeaveEvent
dalam MouseOutEvent
dikirim ketika meninggalkan elemen visual ke elemen lain, sementara MouseLeaveEvent
tidak dikirim ketika transisi dari elemen visual ke elemen keturunan.
target
: Elemen visual bahwa kursor mouse keluar.
Event dikirim oleh ContextualMenuManager
ketika menu kontekstual harus diisi dengan item menu.
target
: Elemen visual yang dibuat menu kontekstual.
Event dikirim ketika pengguna menekan dan melepaskan tombol mouse ketiga. Acara ini hanya ada kompatibilitas ke belakang dengan IMGUI.
Sampel kode berikut membuat jendela Editor dengan tiga tombol yang mencetak pesan ke konsol ketika mouse bergerak ke elemen, atau tombol ditekan pada mouse.
Sampel kode ini menyoroti pemecahan acara kedua MouseDownEvent
dan MouseEnterEvent
, dan cara menggunakan parameter acara.
Untuk melihat contoh dalam tindakan, lakukan berikut:
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
// Open this in the Editor via the menu Window --> UI ToolKit --> Mouse Event Test Window
public class MouseEventTestWindow : EditorWindow
{
[MenuItem("Window/UI Toolkit/Mouse Event Test Window")]
public static void ShowExample()
{
MouseEventTestWindow wnd = GetWindow<MouseEventTestWindow>();
wnd.titleContent = new GUIContent("Mouse Event Test Window");
}
public void CreateGUI()
{
// Add a few buttons
for (int i = 0; i < 3; i++)
{
Button newElement = new Button { name = $"Button {i}", text = $"Button {i}" };
newElement.style.flexGrow = 1;
rootVisualElement.Add(newElement);
}
// Register mouse event callbacks
rootVisualElement.RegisterCallback<MouseDownEvent>(OnMouseDown, TrickleDown.TrickleDown);
rootVisualElement.RegisterCallback<MouseEnterEvent>(OnMouseEnter, TrickleDown.TrickleDown);
}
private void OnMouseDown(MouseDownEvent evt)
{
bool leftMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.LeftMouse));
bool rightMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.RightMouse));
bool middleMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.MiddleMouse));
Debug.Log($"Mouse Down event. Triggered by {(MouseButton)evt.button}.");
Debug.Log($"Pressed buttons: Left button: {leftMouseButtonPressed} Right button: {rightMouseButtonPressed} Middle button: {middleMouseButtonPressed}");
}
private void OnMouseEnter(MouseEnterEvent evt)
{
VisualElement targetElement = (VisualElement)evt.target;
Debug.Log($"Mouse is now over element '{targetElement.name}'");
}
}
Contoh kode berikut mencetak pesan ke konsol ketika tombol mouse ditekan, menunjukkan tombol mana yang memicu acara, dan tombol mana saat ini ditekan.
Contoh kode ini menyoroti register callback ke MouseDownEvent
dan cara menggunakan parameter acara. Untuk melihat contoh dalam tindakan, lakukan berikut:
using UnityEngine;
using UnityEngine.UIElements;
public class MouseEventTestRuntime : MonoBehaviour
{
void Start()
{
var root = GetComponent<UIDocument>().rootVisualElement;
var newLabel = new Label("Move the mouse or press buttons to see the log output");
newLabel.style.flexGrow = 1;
root.Add(newLabel);
root.RegisterCallback<MouseDownEvent>(OnMouseDown, TrickleDown.TrickleDown);
}
private void OnMouseDown(MouseDownEvent evt)
{
bool leftMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.LeftMouse));
bool rightMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.RightMouse));
bool middleMouseButtonPressed = 0 != (evt.pressedButtons & (1 << (int)MouseButton.MiddleMouse));
VisualElement targetElement = (VisualElement)evt.target;
Debug.Log($"Mouse Down event. Triggered by {(MouseButton)evt.button} over element '{targetElement.name}'");
Debug.Log($"Pressed buttons: Left button: {leftMouseButtonPressed} Right button: {rightMouseButtonPressed} Middle button: {middleMouseButtonPressed}");
}
}