Jika Anda melakukan tugas tertentu sering, Anda dapat menggunakan UI(User Interface) Memungkinkan pengguna untuk berinteraksi dengan aplikasi Anda. Unity saat ini mendukung tiga sistem UI. More info
Lihat di Glossary Toolkit untuk membuat UI khusus untuk itu. Misalnya Anda dapat membuat jendela editor kustom.
Panduan ini menjelaskan alur kerja UI Toolkit dasar menggunakan jendela editor kustom sebagai contoh. Contohnya menunjukkan bagaimana membuat jendela editor kustom dan menambahkan kontrol UI ke jendela editor kustom Anda menggunakan Pembuat UI, UXML, dan skrip C#.
Anda dapat menemukan file yang lengkap yang contoh ini menciptakan di Repositori GitHub ini.
Panduan ini adalah untuk pengembang yang akrab dengan Editor Unity dan skrip C #, tetapi baru untuk UI Toolkit. Unity merekomendasikan bahwa Anda memiliki pemahaman dasar tentang konsep berikut:
MyCustomEditor
dan disable USS.Ini menciptakan jendela editor kustom dengan dua label. Anda dapat membuka jendela Editor dari menu (Window > UI Toolkit > MyCustomEditor). Anda dapat menemukan file sumber untuk di folder Asset/Editor
.
Anda dapat menambahkan kontrol UI ke jendela Anda dengan cara berikut:
Anda dapat menggunakan metode ini secara individual, atau menggabungkan. Contoh berikut membuat tiga set label, tombol, dan toggles menggunakan kombinasi metode ini.
Untuk menambahkan kontrol UI secara visual ke jendela Anda, gunakan Pembuat UI. Contoh berikut menunjukkan cara menambahkan tombol dan beralih ke jendela editor kustom Anda selain label default.
Dalam folder Editor
, klik dua MyCustomEditor.uxml
untuk membuka UI Builder.
Dalam UI Builder, drag Button dan Toggle dari Library > Controls ke dalam Hierarchy atau jendela Pratinjau di Viewport.
Pada Hierarchy, tambahkan beberapa atribut untuk kontrol Anda:
These controls were created in UI Builder
.This is button1
. Di bidang Name Inspector, masukkan button1
.Number?
. Di bidang Name Inspector, masukkan toggle1
.Save dan menutup jendela UI Builder.
Buka jendela editor kustom Anda. Anda harus melihat tombol dan toggle Anda hanya ditambahkan di jendela Anda.
Jika Anda lebih memilih mendefinisikan UI Anda dalam file teks, Anda dapat mengedit UXML untuk menambahkan kontrol UI. Contoh menambahkan satu set label, tombol, dan beralih ke jendela Anda.
Dalam folder Editor
, klik Assets > Create > UI Toolkit > UI Document untuk membuat file UXML yang disebut MyCustomEditor_UXML.uxml
.
Buka MyCustomEditor_UXML.uxml
pada editor teks.
Tip: Anda dapat melakukannya dengan mengklik panah pada MyCustomEditor_UXML.uxml
di Project windowJendela yang menunjukkan isi folder Assets
(Project tab) More info
Lihat di Glossary, dan kemudian klik dua inlineStyle
.
Secara default, dokumen UXML menampilkan elemen tunggal dengan tag engine:UXML
. Ini adalah elemen akar dari pohon XML. Dalam elemen ini, Anda dapat menambahkan kontrol UI dengan atribut mereka.
File MyCustomEditor_UXML.uxml
selesai Anda harus terlihat seperti berikut:
<?xml version="1.0" encoding="utf-8"?>
<engine:UXML
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:engine="UnityEngine.UIElements"
xmlns:editor="UnityEditor.UIElements"
xsi:noNamespaceSchemaLocation="../../UIElementsSchema/UIElements.xsd"
>
<engine:Label text="These controls were created with UXML." />
<engine:Button text="This is button2." name="button2"/>
<engine:Toggle label="Number?" name="toggle2"/>
</engine:UXML>
Buka MyCustomEditor.cs
.
Tambahkan bidang VisualTreeAsset
pribadi yang disebut m_UXMLTree
ke kelas MyCustomEditor
. Masukkan atribut [SerializeField]
di atasnya:
[SerializeField]
private VisualTreeAsset m_UXMLTree;
Tambahkan garis berikut kode ke akhir CreateGUI()
.
rootVisualElement.Add(m_UXMLTree.Instantiate());
Di jendela Proyek, pilih MyCustomEditor.cs
.
Seret MyCustomEditor_UXML.uxml
dari jendela Proyek ke bidang UXML Tree di Inspector. Ini menetapkan UXML Anda ke pohon visual.
Buka jendela editor kustom Anda. Anda harus melihat tiga label, dua tombol, dan dua sakelar di jendela Anda.
Jika Anda lebih suka pengkodean, Anda dapat menambahkan Kontrol UI ke jendela Anda menggunakan skrip C #. Contoh berikut menambahkan satu set label, tombol, dan beralih ke jendela Anda.
Buka MyCustomEditor.cs
.
Unity menggunakan UnityEngine.UIElements
untuk kontrol UI dasar seperti label, tombol, dan toggle. Untuk bekerja dengan kontrol UI, Anda harus menambahkan deklarasi berikut jika belum hadir.
using UnityEngine.UIElements;
Ubah teks label yang ada dari "Hello World! From C#"
ke "These controls were created using C# code."
.
Kelas EditorWindow memiliki properti yang disebut rootVisualElement
. Untuk menambahkan kontrol UI ke jendela Anda, meluruskan kelas elemen dengan beberapa atribut, dan kemudian gunakan metode Add
dari rootVisualElement
.
Metode CreateGUI()
selesai Anda harus terlihat seperti berikut:
public void CreateGUI()
{
// Each editor window contains a root VisualElement object
VisualElement root = rootVisualElement;
// VisualElements objects can contain other VisualElements following a tree hierarchy.
Label label = new Label("These controls were created using C# code.");
root.Add(label);
Button button = new Button();
button.name = "button3";
button.text = "This is button3.";
rootVisualElement.Add(button);
Toggle toggle = new Toggle();
toggle.name = "toggle3";
toggle.label = "Number?";
rootVisualElement.Add(toggle);
// Import UXML
var visualTree = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/Editor/MyCustomEditor.uxml");
VisualElement labelFromUXML = visualTree.Instantiate();
root.Add(labelFromUXML);
rootVisualElement.Add(m_UXMLTree.Instantiate());
}
Pergi ke Editor dan buka jendela editor kustom Anda. Anda harus melihat tiga label, tiga tombol, dan tiga toggles di jendela Anda.
Anda dapat mengatur handler acara untuk kontrol UI Anda sehingga ketika Anda mengklik tombol, dan pilih atau menghapus toggle, kontrol UI Anda melakukan beberapa tugas.
Kode di bawah menunjukkan contoh event handler yang melakukan berikut:
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
public class MyCustomEditor : EditorWindow
{
[MenuItem("Window/UI Toolkit/MyCustomEditor")]
public static void ShowExample()
{
MyCustomEditor wnd = GetWindow<MyCustomEditor>();
wnd.titleContent = new GUIContent("MyCustomEditor");
}
[SerializeField]
private VisualTreeAsset m_UXMLTree;
private int m_ClickCount = 0;
private const string m_ButtonPrefix = "button";
public void CreateGUI()
{
// Each editor window contains a root VisualElement object
VisualElement root = rootVisualElement;
// VisualElements objects can contain other VisualElements following a tree hierarchy.
Label label = new Label("These controls were created using C# code.");
root.Add(label);
Button button = new Button();
button.name = "button3";
button.text = "This is button3.";
rootVisualElement.Add(button);
Toggle toggle = new Toggle();
toggle.name = "toggle3";
toggle.label = "Number?";
rootVisualElement.Add(toggle);
// Import UXML
var visualTree = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/Editor/MyCustomEditor.uxml");
VisualElement labelFromUXML = visualTree.Instantiate();
root.Add(labelFromUXML);
rootVisualElement.Add(m_UXMLTree.Instantiate());
//Call the event handler
SetupButtonHandler();
}
//Functions as the event handlers for your button click and number counts
private void SetupButtonHandler()
{
var buttons = rootVisualElement.Query<Button>();
buttons.ForEach(RegisterHandler);
}
private void RegisterHandler(Button button)
{
button.RegisterCallback<ClickEvent>(PrintClickMessage);
}
private void PrintClickMessage(ClickEvent evt)
{
++m_ClickCount;
//Because of the names we gave the buttons and toggles, we can use the
//button name to find the toggle name.
Button button = evt.currentTarget as Button;
string buttonNumber = button.name.Substring(m_ButtonPrefix.Length);
string toggleName = "toggle" + buttonNumber;
Toggle toggle = rootVisualElement.Q<Toggle>(toggleName);
Debug.Log("Button was clicked!" +
(toggle.value ? " Count: " + m_ClickCount : ""));
}
}
UI Toolkit alur kerja sederhana ditambahkan dalam Unity Panties20212