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.
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.
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.
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.
Gunakan kode IMGUI di dalam IMGUIContainer
. Semua yang dapat Anda lakukan di dalam VisualElement
didukung.OnGUI()
is supported.
Anda dapat mengatur beberapa IMGUIContainer
s dan meletakkannya dengan mencampur tata letak GUILayout
dan UI Toolkit. Perhatikan bahwa tidak mungkin untuk menambahkan instance VisualElement
di dalam IMGUIContainer
.
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 DropdownField s 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. |