Структура UI со скриптами C#
Технические пользователи могут определить макет UI непосредственно в C# скриптах.
Вы можете определить внешний вид элементов управления в файле USS, или изменить свойства стиля элемента управления в вашем скрипте C#.
Управления интерактивны и представляют собой значение, которое можно изменить. Например, FloatField представляет значение с плавающей запятой. Можно создать скрипты C# для изменения значения управления, регистрации обратного вызова или применения привязки данных.
Добавление элемента управления к UI с C# скрипты
Чтобы использовать элемент управления в UI, добавить его в визуальное дерево.
В следующем примере к существующему визуальному дереву добавляется элемент управления Кнопка.
var newButton = new Button("Click me!");
rootVisualElement.Add(newButton);
При добавлении элементов управления в иерархию UI механизм компоновки автоматически управляет их размерами и расположением. Кроме того, можно переопределить размер и положение визуальных элементов.
Изменение значения управления
Чтобы получить доступ или изменить значение элемента управления, используйте его свойство value.
В следующем примере создаются элементы управления Переключатель и Кнопка. При нажатии кнопки значение элемента управления Переключатель меняется.
// Create a toggle and register callback
m_MyToggle = new Toggle("Test Toggle") { name = "My Toggle" };
rootVisualElement.Add(m_MyToggle);
// Create button to flip the toggle's value
Button button01 = new Button() { text = "Toggle" };
button01.clicked += () =>
{
m_MyToggle.value = !m_MyToggle.value;
};
rootVisualElement.Add(button01);
Дополнительные сведения о свойствах определенного элемента управления см. в UI Toolkit встроенные элементы управления справочник.
Зарегистрировать обратный вызов
Управляющие элементы, имеющие свойства value, отправляют событие при изменении значения. Вы можете зарегистрировать обратный вызов для получения этого события.
В следующем примере создается контроллер Toggle и регистрируется обратный вызов:
// Create a toggle and register callback
m_MyToggle = new Toggle("Test Toggle") { name = "My Toggle" };
m_MyToggle.RegisterValueChangedCallback((evt) => { Debug.Log("Change Event received"); });
rootVisualElement.Add(m_MyToggle);
Дополнительные сведения об обратных вызовах и событиях см. в Обработка событий.
Применение привязки данных
Элементы управления можно привязать к объекту или к сериализованному свойству. Например, элемент FloatField можно привязать к открытой переменной типа float, принадлежащей MonoBehaviour. При привязке контроля к свойству в нем автоматически отображается значение этого свойства. При изменении контроля значение этого свойства обновляется.
Аналогичным образом, когда значение свойства изменяется с помощью кода, UI отображает обновленное значение. Это двустороннее соединение полезно при создании пользовательских окон Inspector.
Дополнительные сведения о привязке данных см. в разделе SerializedObject привязка данных.
Список встроенных контроллеров и информацию о том, поддерживают ли они привязку, см. в справочнике по встроенным контроллерам UI Toolkit.
Доступ к свойствам дочерних элементов управления только для чтения
Некоторые механизмы контроля дочерние элементы только для чтенияНапример, а ListView управление имеет ScrollView ребенок. Вы можете использовать UQuery чтобы обратиться к свойствам потомка и переопределить их значения.
В следующем примере изменяется скорость прокрутки контроля ListView путем переопределения свойства mouseWheelScrollSize дочернего элемента ScrollView:
var scrollView = listView.Q<ScrollView>();
scrollView.mouseWheelScrollSize = 55;
Управление состояниями управления
Контроллеры имеют различные состояния, которыми можно управлять в скриптах C#. Например, можно включить или отключить контроллер.
В следующем примере создается элемент управления Переключатель и элемент управления Кнопка. При нажатии кнопки переключатель отключается.
// Create a toggle.
Toggle myToggle = new Toggle("A Toggle");
// Create a button to disable the toggle.
Button button01 = new Button();
button01.text = "Button01";
button01.RegisterCallback<ClickEvent>(evt =>
{
myToggle.SetEnabled(false);
});
Вы также можете реализовать визуальную обратную связь при изменении состояния в USS с помощью псевдоклассы. Например, чтобы отключить переключатель, используйте селектор, имеющий disabled псевдосостояние:
.unity-button:disabled
{
background-color: #000000;
}