Unity 6.3
0 онлайн 101 гостей 3 в системе
Вход
UI системы Шаг 28 из 317

Структура 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;
}

Дополнительные ресурсы