Panel merupakan contoh yang terlihat dari hierarki UI(User Interface) Memungkinkan pengguna untuk berinteraksi dengan aplikasi Anda. Unity saat ini mendukung tiga sistem UI. More info
Lihat di Glossary. Ini menangani acara perilaku elemen yang dikirim dalam hirarki pohon visual. Ini memegang referensi ke elemen visual akar hierarki. Untuk UI runtime, itu sebanding dengan Canvas di UGUI.
Anda harus melampirkan contoh elemen visual ke panel untuk render atau menerima acara.
Peristiwa panel api pada elemen visual ketika hubungannya dengan perubahan panel. Misalnya, ketika Anda menambahkan elemen visual ke panel (AttachToPanelEvent
) atau menghapusnya dari panel (DetachFromPanelEvent
).
Peristiwa panel hanya dikirim ke elemen visual dan keturunan mereka dalam hirarki yang langsung dipengaruhi ketika perubahan panel terjadi. Elemen induk tidak menerima peristiwa ketika elemen visual keturunan melampirkan atau mendetach dari panel.
Misalnya, dalam kode UXML di bawah ini, ketika Anda menambahkan elemen visual parent
ke hierarki yang sudah melekat pada panel, parent
, child
, dan grandchild
semua menerima acara yang sama. Jika Anda menghapus parent
dari hierarki UXML yang sama, semua elemen visual akan menerima peristiwa DetachFromPanel
.
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements">
<ui:VisualElement name="parent">
<ui:VisualElement name="child">
<ui:VisualElement name="grandchild" />
</ui:VisualElement>
</ui:VisualElement>
</ui:UXML>
Kelas dasar untuk semua peristiwa panel adalah PanelChangedEventBase.
Event | Description | Trickles down | Bubbles up | Cancellable |
---|---|---|---|---|
Login Sitemap | Sent benar setelah elemen (atau salah satu orang tuanya) melekat pada panel. | |||
Login Sitemap | Sent hanya sebelum elemen (atau salah satu orang tuanya) didetakdirkan dari panel. |
originPanel
: originPanel
mengandung data spesifik untuk DetachFromPanelEvent
. Ini mengandung panel sumber yang detaches elemen visual selama perubahan panel.
destinationPanel
: destinationPanel
mengandung data spesifik untuk AttachFromPanelEvent
. Ini menyediakan panel di mana elemen visual sekarang terpasang.
Daftar berikut menyediakan nama, deskripsi, dan target setiap acara dalam keluarga acara. Untuk informasi lebih lanjut tentang acara, lihat UI Toolkit API.
Perapian AttachToPanelEvent
setelah elemen visual melampirkan ke panel. Hal ini juga terjadi ketika Anda menambahkan elemen visual ke hierarki yang melekat pada panel.
target
: Elemen visual yang melekat pada panel.
Pemicu DetachFromPanelEvent
sebelum Anda menghapus elemen visual dari panel. Hal ini juga terjadi ketika Anda menghapus elemen visual dari hirarki yang melekat pada panel.
target
: Elemen visual yang terlepas dari panel.
Contoh berikut membuat jendela Editor dengan tombol yang akan menambahkan label tambahan ke jendela. Mengklik label akan menghapusnya lagi.
Contoh ini mengimplementasikan kelas label kustom yang mencetak pesan ke konsol setiap kali instance dari VisualElement dilampirkan atau dipisahkan dari panel. Ini menyoroti perilaku LampiranToPanelEvent dan DetachFromPanelEvent acara dan bagaimana menggunakan properti Panel Asal dan panel tujuan.
Untuk melihat contoh dalam tindakan, lakukan berikut:
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
public class PanelEventsTestWindow : EditorWindow
{
[MenuItem("Window/UI Toolkit/Panel Events Test Window")]
public static void ShowExample()
{
PanelEventsTestWindow wnd = GetWindow<PanelEventsTestWindow>();
wnd.titleContent = new GUIContent("Panel Events Test Window");
}
public void CreateGUI()
{
// Set a name for the panel
rootVisualElement.panel.visualTree.name = "Our Window Root Visual Element";
// Add a button which will add new instances of our custom labels to the window
rootVisualElement.Add(new Button(() => rootVisualElement.Add(new CustomLabel())) { text = "Add New Label" });
}
}
/// <summary>
/// Custom label class which prints out a console message when it is attached or detached.
/// </summary>
public class CustomLabel : Label
{
private static int m_InstanceCounter = 0;
private int m_LabelNumber;
public CustomLabel() : base()
{
m_LabelNumber = ++m_InstanceCounter;
text = $"Label #{m_LabelNumber} - click me to detach";
RegisterCallback<AttachToPanelEvent>(evt =>
{
Debug.Log($"I am label {m_LabelNumber} and I " +
$"just got attached to panel '{evt.destinationPanel.visualTree.name}'");
});
RegisterCallback<DetachFromPanelEvent>(evt =>
{
Debug.Log($"I am label {m_LabelNumber} and I " +
$"just got detached from panel '{evt.originPanel.visualTree.name}'");
});
// Register a pointer down callback that removes this element from the hierarchy
RegisterCallback<PointerDownEvent>(evt => this.RemoveFromHierarchy());
}
}