Migrate dari Unity UI (UGUI) ke UI Toolkit
WordPress.org

Migrate dari Mode Segera GUI (IMGUI) ke UI Toolkit

Panduan ini adalah untuk pengembang yang berpengalaman dengan GUI (IMGUI) untuk bermigrasi ke UI(User Interface) Memungkinkan pengguna untuk berinteraksi dengan aplikasi Anda. Unity saat ini mendukung tiga sistem UI. More info
Lihat di Glossary
Toolkit. Panduan ini berfokus pada UI Editor, tetapi informasinya juga dapat diterapkan pada UI runtime serta.

Perbedaan utama

Code-driven versus UI-driven

JPG PNG BMP GIF 3 MB UI Toolkit menyediakan lebih banyak pilihan untuk penciptaan UI Editor. Dengan UI Toolkit, Anda mendefinisikan perilaku di C# OnGUI. Namun, ketika mendefinisikan elemen UI dan gaya, selain C #, Anda dapat secara visual mendefinisikan kontrol UI di scriptsSepotong kode yang memungkinkan Anda untuk membuat Komponen Anda sendiri, memicu peristiwa permainan, memodifikasi sifat komponen dari waktu ke waktu dan menanggapi input pengguna dengan cara apa pun yang Anda sukai. More info
Lihat di Glossary
atau menulis dalam Pembuat UI langsung. Untuk informasi lebih lanjut, lihat file teks seperti XML (disebut UXML).Sederhana UI Toolkit alur kerja.

Segera versus mode dipertahankan

Dengan IMGUI, Anda menggambarkan pohon UI ketika UI direpainted dalam fungsi OnGUI(). Anda harus memanggil fungsi ini ketika acara memasuki UI atau ketika Anda melukis ulang UI. Tidak ada informasi terus-menerus yang berkaitan dengan pohon UI antara peristiwa yang berbeda. Sedangkan, Anda membuat elemen visual dengan UI Toolkit dalam struktur pohon yang disebut Pohon Visual. Informasi di Pohon Visual dipertahankan secara konsisten.

Perubahan keadaan versus konstan

JPG PNG BMP GIF 3 MB Anda mendefinisikan tampilan dan perilaku UI untuk setiap bingkai yang mungkin. Tubuh OnGUI() mungkin mengandung banyak kondisi dan keadaan yang berbeda.OnGUI() might contain many conditions and different states.

UI Toolkit beroperasi dalam sistem berbasis acara. Anda menentukan tampilan UI dalam keadaan default dan menentukan perilaku UI dalam menanggapi peristiwa. Setiap perubahan yang Anda buat di UI Toolkit menyebabkan perubahan tetap pada keadaan UI Anda.

Sebagai contoh, deklarasi tombol di IMGUI terlihat seperti berikut:

if (GUILayout.Button("Click me!"))
{
    //Code runs here in frames where the user clicks the button.

    //Code makes changes to the UI for frames where the user has just clicked the button.
}
else
{
    //Code specifies what happens in all other frames.
}

Contoh di atas terlihat seperti berikut di UI Toolkit:

UIDocument document = GetComponent<UIDocument>();

//Create button.
Button button = new Button();
button.text = "Click me!";

//Set up event handler.
button.RegisterCallback<ClickEvent>((ClickEvent evt) =>
{
    //Code runs here after button receives ClickEvent.
});

//Add button to UI.
document.rootVisualElement.Add(button);

Untuk contoh lengkap tentang cara membuat jendela editor kustom dengan UI Toolkit, lihat Sederhana UI Toolkit alur kerja.

WordPress.org

Gunakan kode IMGUI di dalam IMGUIContainer. Semua yang dapat Anda lakukan di dalam VisualElement didukung.OnGUI() is supported.

Anda dapat mengatur beberapa IMGUIContainers dan meletakkannya dengan mencampur tata letak GUILayout dan UI Toolkit. Perhatikan bahwa tidak mungkin untuk menambahkan instance VisualElement di dalam IMGUIContainer.

IMGUIContainer example
IMGUIContainer contoh

Dari IMGUI ke UI Toolkit konversi

Daftar tabel berikut fungsi setara antara IMGUI dan UI Toolkit:

Action IMGUI UI Toolkit
Buat ruang Jendela Editor% EditorWindow.OnGUI() EditorWindow.CreateGUI()
Buat Harta siteFitur Unity yang memungkinkan Anda untuk menyesuaikan tampilan kontrol tertentu di jendela Inspektur dengan menggunakan atribut pada skrip Anda, atau dengan mengendalikan bagaimana kelas Serializable tertentu harus terlihat More info
Lihat di Glossary
atau Attribute Properti
PropertyDrawer.OnGUI() PropertyDrawer.CreatePropertyGUI()
Buat editor kustom untuk ruang 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
%
Editor.OnInspectorGUI() Editor.CreateInspectorGUI()

Tabel berikut daftar metode yang setara, kelas, atribut antara IMGUI dan UI Toolkit:

IMGUI IMGUI namespaces UI Toolkit
AddCursorRect() EditorGUIUtility Set VisualElement.style.cursor, atau atur tekstur kursor elemen visual di UI Builder atau USS. Untuk berinteraksiivitas lebih rinci, gunakan acara C#.
AreaScope GUILayout Lingkup umumnya tidak diperlukan dalam UI Toolkit. SitemapBeginArea().
BeginArea() GUILayout Untuk menentukan area itu sendiri, buat elemen visual dan set style.position ke Position.Absolute. Untuk membuat anak-anak untuk daerah, membuat elemen visual anak di bawahnya.
BeginBuildTargetSelectionGrouping() EditorGUILayout Tidak setara.
BeginChangeCheck() EditorGUI Mendaftar callback pada setiap elemen dalam rentang cek perubahan. Jika menggunakan PropertyField sebagai stand-in untuk bidang serialisasi dalam Inspektur kustom, gunakan PropertyField.RegisterCallback<SerializedPropertyChangeEvent>() atau PropertyField.RegisterValueChangeCallback(). Dalam semua kasus lain, gunakan VisualElement.RegisterCallback<ChangeEvent<T>>() atau VisualElement.RegisterValueChangedCallback<T>().
BeginDisabledGroup() EditorGUI VisualElement.SetEnabled(false)
BeginFoldoutHeaderGroup() EditorGUI, EditorGUILayout See Foldout().
BeginGroup() GUI See BeginArea().
BeginHorizontal() EditorGUILayout, GUILayout See BeginArea().
BeginProperty() EditorGUI Jika Anda menggunakan BeginProperty() /EndProperty() untuk mengikat kontrol sederhana ke properti serial, Anda dapat melakukan itu di UI Toolkit dengan memanggil BindProperty(), dengan mengatur bindingPath, atau dengan mengatur atribut UXML binding-path. Jika Anda menggunakan BeginProperty()/EndProperty() untuk membuat properti tunggal dari UI kustom yang kompleks, yang tidak didukung dengan baik di UI Toolkit.
BeginScrollView() EditorGUILayout, GUI, GUILayout UnityEngine.UIElements.ScrollView
BeginToggleGroup() EditorGUILayout Tidak setara.
BeginVertical() EditorGUILayout, GUILayout See BeginArea().
BoundsField() EditorGUI, EditorGUILayout BoundsField
BoundsIntField() EditorGUI, EditorGUILayout BoundsIntField
Box() GUI, GUILayout Box
BringWindowToBack() GUI See Window().
BringWindowToFront() GUI See Window().
Button() GUI, GUILayout Button
CanCacheInspectorGUI() EditorGUI Tidak diperlukan dalam mode dipertahankan.
ChangeCheckScope EditorGUI Lingkup umumnya tidak diperlukan dalam UI Toolkit. SitemapBeginChangeCheck().
ColorField() EditorGUI, EditorGUILayout ColorField
CommandEvent() EditorGUIUtility Umumnya tidak diperlukan dalam mode dipertahankan. Gunakan callback C# untuk menangani acara.
CurveField() EditorGUI, EditorGUILayout CurveField
DelayedDoubleField() EditorGUI, EditorGUILayout DoubleField dengan set isDelayed untuk benar.
DelayedFloatField() EditorGUI, EditorGUILayout FloatField dengan set isDelayed untuk benar.
DelayedIntField() EditorGUI, EditorGUILayout IntegerField dengan set isDelayed untuk benar.
DelayedTextField() EditorGUI, EditorGUILayout TextField dengan set isDelayed untuk benar.
DisabledScope EditorGUI Lingkup umumnya tidak diperlukan dalam UI Toolkit. SitemapBeginDisabledGroup().
DoubleField() EditorGUI, EditorGUILayout DoubleField
DragWindow() GUI See Window().
DrawPreviewTexture() EditorGUI Tidak setara.
DrawRect() EditorGUI Gunakan VisualElement. Set style.position untuk Absolute. Mengatur style.top dan style.left untuk menentukan posisi. Set style.width dan style.height untuk menentukan ukuran. Set style.backgroundColor untuk mengatur warna.
DrawTexture() GUI Image. Set tintColor di tempat color. Tidak ada yang setara dengan alphaBlend palsu. Tidak ada yang setara dengan borderWidth, borderWidths, borderRadius, atau borderRadiuses.
DrawTextureAlpha() EditorGUI Tidak setara.
DrawTextureWithTexCoords() GUI Image. Set uv di tempat texCoords. Tidak ada yang setara dengan alphaBlend palsu.
DropdownButton() EditorGUI, EditorGUILayout Tidak ada setara yang tepat. Gunakan DropdownFields yang lengkap bukan hanya DropdownButton().
DropShadowLabel() EditorGUI Label dengan nilai bayangan yang ditetapkan dalam style.textShadow.
EditorToolbar() EditorGUILayout Buat Toolbar dengan satu ToolbarButton untuk setiap alat. Untuk setiap ToolbarButton, mendaftarkan callback ketika diklik untuk memanggil baik ToolManager.SetActiveTool() atau ToolManager.RestorePreviousTool() untuk membuat tombol mengaktifkan alat atau menonaktifkannya, masing-masing.
EndArea() GUILayout See BeginArea().
EndBuildTargetSelectionGrouping() EditorGUILayout See BeginBuildTargetSelectionGrouping().
EndChangeCheck() EditorGUI See BeginChangeCheck().
EndDisabledGroup() EditorGUI See BeginDisabledGroup().
EndFoldoutHeaderGroup() EditorGUI, EditorGUILayout See Foldout().
EndGroup() GUI See BeginArea().
EndHorizontal() EditorGUILayout, GUILayout See BeginArea().
EndProperty() EditorGUI See BeginProperty().
EndScrollView() EditorGUILayout, GUI, GUILayout See BeginScrollView().
EndToggleGroup() EditorGUILayout See BeginToggleGroup().
EndVertical() EditorGUILayout, GUILayout See BeginArea().
EnumFlagsField() EditorGUI, EditorGUILayout EnumFlagsField
EnumPopup() EditorGUI, EditorGUILayout EnumField
ExpandHeight() GUILayout Tidak setara.
ExpandWidth() GUILayout Tidak setara.
FlexibleSpace() GUILayout See Space().
FloatField() EditorGUI, EditorGUILayout FloatField
FocusControl() GUI VisualElement.Focus()
FocusTextInControl() EditorGUI TextField.Focus()
FocusWindow() GUI See Window().
Foldout() EditorGUI, EditorGUILayout Foldout
GetControlRect() EditorGUILayout Hanya diperlukan untuk mengonversi dari EditorGUILayout ke EditorGUI. Tidak diperlukan dalam UI Toolkit.
GetNameOfFocusedControl() GUI VisualElement.focusController.focusedElement
GetPropertyHeight() EditorGUI PropertyField.layout.height
GradientField() EditorGUI, EditorGUILayout GradientField
GroupScope GUI Lingkup umumnya tidak diperlukan dalam UI Toolkit. SitemapBeginArea().
Height() GUILayout VisualElement.style.height
HelpBox() EditorGUI, EditorGUILayout HelpBox
HorizontalScope EditorGUILayout, GUILayout Lingkup umumnya tidak diperlukan dalam UI Toolkit. SitemapBeginArea().
HorizontalScrollbar() GUI, GUILayout Scroller dengan set direction untuk Horizontal.
HorizontalSlider() GUI, GUILayout Slider dengan direction set ke Horizontal
InspectorTitlebar() EditorGUI, EditorGUILayout Tidak setara.
IntField() EditorGUI, EditorGUILayout IntegerField
IntPopup() EditorGUI, EditorGUILayout Tidak setara.
IntSlider() EditorGUI, EditorGUILayout SliderInt
Label() GUI, GUILayout Label
LabelField() EditorGUI, EditorGUILayout TextField dengan set isReadOnly untuk benar.
LayerField() EditorGUI, EditorGUILayout LayerField
LinkButton() EditorGUI, EditorGUILayout Tidak setara.
Load() EditorGUIUtility Jika menggunakan C #, Anda dapat menggunakan fungsi ini dan menetapkan nilai pengembaliannya ke properti VisualElement.style yang Anda inginkan. Jika menggunakan USS, gunakan fungsi resource() dengan argumen yang sama Anda akan memberikan ke Load().
LongField() EditorGUI, EditorGUILayout LongField
MaskField() EditorGUI, EditorGUILayout MaskField
MaxHeight() GUILayout VisualElement.style.maxHeight
MaxWidth() GUILayout VisualElement.style.maxWidth
MinHeight() GUILayout VisualElement.style.minHeight
MinMaxSlider() EditorGUI, EditorGUILayout MinMaxSlider
MinWidth() GUILayout VisualElement.style.minWidth
ModalWindow() GUI See Window().
[NonReorderable] Pastikan bahwa ListView.reorderable palsu.
ObjectField() EditorGUI, EditorGUILayout ObjectField
PasswordField() EditorGUI, EditorGUILayout, GUI, GUILayout TextField dengan set isPasswordField untuk benar
PixelsToPoints() EditorGUIUtility Berlaku untuk digunakan dengan UI Toolkit.
PointsToPixels() EditorGUIUtility Berlaku untuk digunakan dengan UI Toolkit.
Popup() EditorGUI, EditorGUILayout PopupField<T0>
ProgressBar() EditorGUI ProgressBar
PropertyField() EditorGUI, EditorGUILayout PropertyField
PropertyScope EditorGUI Lingkup umumnya tidak diperlukan dalam UI Toolkit. SitemapBeginProperty().
RectField() EditorGUI, EditorGUILayout RectField
RectIntField() EditorGUI, EditorGUILayout RectIntField
RepeatButton() GUI, GUILayout RepeatButton
ScrollTo() GUI ScrollView.ScrollTo() atau ScrollView.scrollOffset
ScrollViewScope EditorGUILayout, GUI, GUILayout Lingkup umumnya tidak diperlukan dalam UI Toolkit. SitemapBeginScrollView().
SelectableLabel() EditorGUI, EditorGUILayout Label dengan isSelectable dan focusable ditetapkan untuk benar.
SelectionGrid() GUI, GUILayout RadioButton
SetNextControlName() GUI VisualElement.name
singleLineHeight EditorGUIUtility Gunakan variabel USS --unity-metrics-single_line-height.
Slider() EditorGUI, EditorGUILayout Slider
Space() EditorGUILayout, GUILayout Gunakan sifat flex untuk mengkonfigurasi jarak antara elemen visual.
TagField() EditorGUI, EditorGUILayout TagField
TextArea() EditorGUI, EditorGUILayout, GUI, GUILayout TextField dengan set multiline untuk benar dan style.whiteSpace set ke Normal.
TextField() EditorGUI, EditorGUILayout, GUI, GUILayout TextField dengan set multiline untuk benar dan style.whiteSpace set ke NoWrap.
Toggle() EditorGUI, EditorGUILayout, GUI, GUILayout Toggle
ToggleGroupScope EditorGUILayout Lingkup umumnya tidak diperlukan dalam UI Toolkit. SitemapBeginToggleGroup().
ToggleLeft() EditorGUI, EditorGUILayout Toggle, tetapi bukan pengaturan label, set text.
Toolbar() GUI, GUILayout Tidak setara.
UnfocusWindow() GUI See Window().
Vector2Field() EditorGUI, EditorGUILayout Vector2Field
Vector2IntField() EditorGUI, EditorGUILayout Vector2IntField
Vector3Field() EditorGUI, EditorGUILayout Vector3Field
Vector3IntField() EditorGUI, EditorGUILayout Vector3IntField
Vector4Field() EditorGUI, EditorGUILayout Vector4Field
VerticalScope EditorGUILayout, GUILayout Lingkup umumnya tidak diperlukan dalam UI Toolkit. SitemapBeginArea().
VerticalScrollbar() GUI, GUILayout Scroller dengan set direction untuk Vertical.
VerticalSlider() GUI, GUILayout Slider dengan set direction untuk Vertical.
Width() GUILayout VisualElement.style.width
Window() GUI, GUILayout Tidak setara.

Sumber daya tambahan

Migrate dari Unity UI (UGUI) ke UI Toolkit
WordPress.org