Создание пользовательской привязки для привязки селекторов USS
Версия: 2023.2+
В этом примере показано, как создать пользовательскую привязку, которая привязывает селектор USS к визуальному элементу.
Примерный обзор
В этом примере создаётся пользовательская привязка, которая назначает селекторы USS-классов каждому дочернему элементу визуального элемента в зависимости от его порядка в иерархии. У первого элемента всегда скруглён левый край, у последнего — правый.
Вы можете найти завершенные файлы, созданные этим примером, в хранилище GitHub.
Предварительные условия
Это руководство предназначено для разработчиков, знакомых со скриптами Unity Editor, UI Toolkit и C#. Перед началом работы ознакомьтесь со следующим:
Создание пользовательского типа привязки
Создайте пользовательский тип привязки, который назначает классы USS на основе индекса родственника. Привязка обновляется только при изменении индекса родственника.
Создайте проект в Unity с любым шаблоном.
-
В папке
Assetsвашего проекта создайте скрипт C# с именемAddMenuUSSClass.csсо следующим содержанием:using UnityEngine.UIElements; [UxmlObject] public partial class AddMenuUssClass : CustomBinding { protected override BindingResult Update(in BindingContext context) { // Assign USS classes based on the sibling index. The binding updates when the sibling index changes. var element = context.targetElement; var index = element.parent.IndexOf(element); element.EnableInClassList("menu-button--first", index == 0); element.EnableInClassList("menu-button--last", index == element.parent.childCount - 1); return new BindingResult(BindingStatus.Success); } }
Создать UI и привязку
Обычно создается привязка, которая связывает существующее свойство элемента. В демонстрационных целях в этом примере создается пользовательская привязка, которая связывает свойство, не существующее в элементе. Для настройки привязки, которая связывает несуществующее свойство, необходимо использовать UXML или C#. В этом примере для настройки привязки используется UXML.
-
В папке
Assetsвашего проекта создайте файл USS с именемCustomBinding.ussсо следующим содержимым:.menu-button { flex-direction: row; height: 64px; align-items: center; justify-content: center; } .menu-button--first { border-top-left-radius: 15px; border-bottom-left-radius: 15px; border-left-width: 2px; } .menu-button--last { border-top-right-radius: 15px; border-bottom-right-radius: 15px; border-right-width: 2px; } Button { margin: 0px; border-color: red; } -
В папке
Assetsвашего проекта создайте файл UXML с именемCustomBinding.uxmlсо следующим содержимым:<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" editor-extension-mode="True"> <ui:VisualElement class="menu-button"> <ui:Button text="Bloub"> <Bindings> <AddMenuUssClass property="add-menu-button-class" /> </Bindings> </ui:Button> <ui:Button text="Bip"> <Bindings> <AddMenuUssClass property="add-menu-button-class" /> </Bindings> </ui:Button> <ui:Button text="Boop"> <Bindings> <AddMenuUssClass property="add-menu-button-class" /> </Bindings> </ui:Button> </ui:VisualElement> </ui:UXML> Дважды щелкните файл
CustomBinding.uxml, чтобы открыть его в UI Builder.В панели StyleSheet выберите + > Добавить существующий USS, а затем выберите файл
CustomBinding.uss.Сохраните изменения.
Проверка привязки
Чтобы проверить привязку, измените порядок элементов кнопки в UI Builder и наблюдайте за изменениями в окне UI Builder.
- Дважды щелкните файл
CustomBinding.uxml, чтобы открыть его в UI Builder. - В панели Hierarchy разверните корень VisualElement, чтобы отобразить дочерние элементы, которые являются кнопками.
- Перетаскивайте кнопки, чтобы изменить их порядок. Первая кнопка всегда имеет левый круглый угол, в то время как последняя кнопка всегда имеет правый круглый угол.