Быстрый старт UIDoc
Создавайте похожий на браузер игровой UI с помощью HTML- и CSS-ресурсов UIDoc, привязок CSL, списков и событий.
UIDoc позволяет описывать игровой интерфейс с помощью HTML и CSS, а затем передавать его изменяющиеся данные и обрабатывать его события в CSL. Это полезно для меню, инвентарей, деревьев навыков и других структурированных экранных интерфейсов.
UIDoc похож на браузер, но это не встроенный веб-браузер. Используйте поддерживаемое подмножество, описанное в Поддержка HTML и CSS в UIDoc.
Создайте ресурс UIDoc
Создайте папку в каталоге вашей игры res Каталог. Имя папки должно заканчиваться на .uidoc и содержать index.html и index.css:
res/
└── UI/
└── settings.uidoc/
├── index.html
└── index.cssПути к ресурсам, используемые CSL, являются относительными по отношению к res, поэтому этот документ загружается как UI/settings.uidoc.
Редактируйте визуально и генерируйте CSL
Выберите ресурс UIDoc в редакторе All Out, чтобы открыть его визуальный режим авторинга. Вы можете выделять и перетаскивать элементы на холсте, изменять их размер, менять их порядок или родительские связи в Layers, а также редактировать общие свойства HTML и CSS в инспекторе. Предпросмотр рендерится самой средой выполнения UIDoc, поэтому он использует ту же поддерживаемую раскладку и то же поведение рендеринга, что и игра.
Инспектор Interface выводит динамические поля, повторяющиеся списки, элементы ввода и действия из разметки документа. Сохранение ресурса, такого как ui/shop.uidoc также поддерживает scripts/generated/uidoc/ui/shop.csl. Его типизированная обёртка предоставляет default_data, decode_event, считыватели ввода и draw, поэтому игровому коду не нужно повторять низкоуровневые привязки, показанные далее в этом руководстве:
data := UiShop_UIDoc.default_data();
data.title = "Store";
UiShop_UIDoc.draw(data, player, shop_event);Сгенерированный код использует те же публичные UI.uidoc_* вызовы, описанные ниже; он не добавляет отдельную систему времени выполнения и не меняет API среды выполнения UIDoc.
При использовании инструментов автоматизации, uidoc_create_asset возвращает версию его шаблона и точное сгенерированное index.html/index.css содержимое. Ресурсы UIDoc не перезагружаются «на лету» в запущенной игре, поэтому перезапустите игру после изменения этих файлов. Используйте uidoc_diagnostics для проверок компиляции и области просмотра, а затем uidoc_runtime_inspect для проверки живых узлов, привязок, стилей, данных клика и прямоугольников.
Напишите документ
В index.html:
{{message}} — это текстовая привязка. data-on-click отправляет UIDoc_Event в CSL.
В index.css:
Отступы safe-area сохраняют полноэкранный интерфейс в стороне от вырезов устройства и области верхней панели игры.
Привязывайте и отрисовывайте его из CSL
Отрисовывайте интерфейс игрока из ao_late_update стека вызовов. Перед отрисовкой документа каждый кадр очищайте и заново создавайте привязки UIDoc:
Колбэк получает точную строку обработчика из data-on-click. Неповторяющийся элемент управления может задать статический data-key для event.key; повторяющиеся элементы управления используют свой разрешённый data-for-key или ключ элемента списка.
userdata передаётся только в этот колбэк; он не идентифицирует документ. Каждый ресурс UIDoc может быть отрисован один раз за одну симуляционную отправку. Когда документ перестаёт отрисовываться, его текущая активация закрывается; повторная отрисовка автоматически назначает новую генерацию активации, чтобы устаревшие реплицированные макеты не могли прикрепиться к вновь открытому документу. Одновременно может быть активировано не более четырёх различных ресурсов UIDoc.
Доступные привязки верхнего уровня:
Условия, привязки рисования и списки
Используйте data-if для включения узла только пока привязка верхнего уровня типа bool истинна. Необязательный ведущий ! инвертирует её. data-if не вычисляет выражения, локальные для списка, такие как item.visible; повторяющееся визуальное состояние следует задавать через локальную для списка привязку рисования, а повторяющуюся структурную или интерактивную видимость следует определять при построении списка CSL. Для другого динамического визуального состояния оставляйте классы статическими и привязывайте поддерживаемый цвет или непрозрачность:
Привяжите noticeColor с помощью UI.uidoc_bind_text с использованием поддерживаемой строки цвета CSS. Атрибуты class компилируются как статические токены классов и не поддерживают {{...}} интерполяцию.
Используйте data-for для повторяющихся данных:
Сформируйте этот список в CSL перед вызовом UI.uidoc:
Используйте стабильное, уникальное прямое выражение, такое как data-for-key="item.id" для каждого повторяющегося элемента. Оно возвращается как event.key. Передавайте UI.uidoc_list_item(...) то же стабильное значение, чтобы взаимодействие, ввод и идентичность прокрутки сохранялись при изменениях списка. Статический data-key обозначает роль элемента управления; UIDoc объединяет эту роль с привязанным ключом каждого вложенного элемента списка и его текущим индексом, чтобы сформировать зарегистрированную идентичность во время выполнения.
В приведённом выше примере имя живого теста содержит суффикс, например inventory-item#potion-42:7/__widget. Проверьте точное имя в client_ui_tree, а затем нацеливайтесь на этот экземпляр по полному имени или достаточно точному суффиксу, например Test.click_button("inventory-item#potion-42:7"). Поиск только по роли, например Test.click_button("inventory-item") неоднозначен, когда видно несколько строк. data-on-click а видимый текст не является селектором теста. Вложенные списки добавляют одну #key:index пару на каждый цикл.
Поля ввода
Привяжите поле ввода с помощью data-bind-value:
Считайте его текущее значение после отрисовки документа:
UI.uidoc_text_value находит поле ввода по его id или data-key, а затем возвращает текущее значение его data-bind-value привязки.
Прокрутка и масштабирование
Прокрутка включается через overflow в CSS. Обе оси можно включить в одном и том же вьюпорте:
Привяжите масштабирование с помощью UI.uidoc_bind_float. data-scroll-zoom масштабирует позиции, размеры, текст, изображения, области попадания и пределы прокрутки содержимого относительно центра вьюпорта. Оставляйте фиксированные элементы управления масштабом вне масштабируемого вьюпорта.
Атрибуты выражений привязки используют прямое выражение, такое как data-for-key="node.id", data-style-transform-x="node.x", или data-scroll-zoom="zoom". Не помещайте эти выражения внутрь {{...}}. Интерполяция Mustache предназначена для текста и src; классы и data-key значения статичны.
Для обычной панели прокрутки опустите data-scroll-zoom. Перетаскивание сдвигает по каждой включённой оси; колесо прокручивает по вертикали, а по горизонтали — только когда включён только горизонтальный overflow.
Распространённые ошибки
Загружайте документ, используя его путь относительно
res, включая.uidocсуффикс.Отрисовывайте его из UI-кода локального игрока под
is_local_or_server().Вызывайте
UI.uidoc_clear_bindings()и перед каждой отрисовкой передавайте текущие привязки.Отрисовывайте каждый ресурс UIDoc один раз за обновление. Используйте
userdataтолько как данные колбэка.Используйте
data-ifтолько с привязками верхнего уровня типа bool. Привязывайте локальное для списка визуальное состояние черезdata-style-opacity/data-style-color, либо исключайте структурные/интерактивные строки из привязанного списка.Назначайте повторяющимся узлам стабильное прямое
data-for-keyвыражение; оставляйтеdata-keyстатическим при именовании роли элемента управления.Рассматривайте поддержку CSS как зависящую от конкретного свойства и значения.
autoиnoneпринимаются только там, где они перечислены в сгенерированной справке, боковые границы, такие какborder-bottomне поддерживаются, аcalc(...)ограничен документированными полями длины с простой сложением/вычитанием.Задавайте содержимому прокрутки реальный размер. Одних только трансформаций не следует использовать как его единственный размер раскладки.
Используйте собственную адаптивную раскладку и поведение масштабирования UIDoc вместо применения второго ручного масштаба UI в CSL.
Последнее обновление