Structuring UXML atribut
Grafik

Menggunakan elemen kustom (C#)

Sitemap Elemen C# adalah cara untuk menanam fungsionalitas yang berhubungan dengan UI yang kompleks secara langsung dalam kode UI(User Interface) Memungkinkan pengguna untuk berinteraksi dengan aplikasi Anda. Unity saat ini mendukung tiga sistem UI. More info
Lihat di Glossary
. Misalnya, ambil kontrol IntegerField. Ini adalah elemen C # kustom tunggal yang muncul dan berperilaku seperti elemen tunggal di UXML dan dalam Pembuat UI, tetapi secara internal itu menciptakan hirarki elemen yang mengelola input pengguna, validasi data, dan mengikat data.

Anda dapat membuat elemen C# kustom baru di C# dengan mengheriting dari kelas VisualElement. Ini akan memungkinkan Anda untuk membuat dan menggunakan elemen ini di C# tetapi tidak akan secara otomatis mengeksposnya di UXML dan UI Builder. Untuk mengekspos jenis elemen baru Anda di UXML dan UI Builder, Anda perlu menentukan UxmlFactory, seperti ini:

class MyElement : VisualElement
{
    public new class UxmlFactory : UxmlFactory<MyElement, UxmlTraits> { }
}

Setelah Anda menambahkan UxmlFactory ke kelas Anda, Anda akan dapat membuat elemen Anda di UXML melalui tag <MyElement> dan menemukannya di Library UI Builder, di bawah tab Project, di bagian Custom Controls (C#). categorisasi lebih lanjut akan dibuat jika kelas Anda berada di ruang nama.

Anda dapat mengekspos atribut UXML khusus tambahan seperti ini:

class MyElement : VisualElement
{
    public new class UxmlFactory : UxmlFactory<MyElement, UxmlTraits> { }

    public new class UxmlTraits : VisualElement.UxmlTraits
    {
        UxmlStringAttributeDescription m_String =
            new UxmlStringAttributeDescription { name = "string-attr", defaultValue = "default_value" };
        UxmlIntAttributeDescription m_Int =
            new UxmlIntAttributeDescription { name = "int-attr", defaultValue = 2 };

        public override IEnumerable<UxmlChildElementDescription> uxmlChildElementsDescription
        {
            get { yield break; }
        }

        public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc)
        {
            base.Init(ve, bag, cc);
            var ate = ve as MyElement;

            ate.stringAttr = m_String.GetValueFromBag(bag, cc);
            ate.intAttr = m_Int.GetValueFromBag(bag, cc);
        }
    }

    public string stringAttr { get; set; }
    public int intAttr { get; set; }
}

UI Builder menambahkan satu persyaratan tambahan di atas apa yang sudah diperlukan untuk atribut UXML murni untuk bekerja. UI Builder mengharuskan kelas elemen Anda untuk mengekspos properti { get; set; } C # yang memiliki nama yang sama dengan nama yang Anda set di Uxml*AttributeDescription Anda, kecuali bukan dasbor, nama properti C# perlu menggunakan camelCasing. Misalnya, jika atribut UXML Anda dinamakan my-int, nama properti C# harus myInt. Ini karena Pembuat UI bergantung pada sifat C# ini untuk membaca nilai atribut C# untuk mengisi pane InspectorA Unity window that displays information about the currently selected GameObject, asset or project settings, allowing you to inspect and edit the values. More info
See in Glossary
.

Berikut adalah atribut kustom di atas yang ditampilkan dalam pane Inspector:

CustomElementAttributes
CustomElementAttributes

Pembuat UI saat ini tidak mendukung Inspektur kustom untuk elemen C # kustom.

Structuring UXML atribut
Grafik