← К блогу

Nine-Slice в игровом UI и масштабируемые панели: метки Figma / PSD и QA нарезки в движке

Когда панелям нужен 9-slice, как размечать границы и экспортный масштаб в дизайне и как принимать Sliced в Unity UGUI, StyleBox в Godot и caps в Cocos — с путями исправления.

Опубликовано
  • game-ui-design
  • game-dev-ai
  • ui-slicing
  • figma-to-unity
  • psd-to-unity
  • nine-slice
  • vberai
  • ai-studio
  • unity
  • godot
  • cocos
  • 2026
Nine-Slice в игровом UI и масштабируемые панели: метки Figma / PSD и QA нарезки в движке

Когда панель растягивается шире, размытые углы, повторяющаяся текстура в центре или овальные углы обычно означают, что nine-slice (9-slice / cap insets) не был задан при передаче, либо движок использует масштабирование Simple для всего спрайта. Настройка Image Type и границ в редакторе Unity может спасти один экран, но следующий дроп дизайна перезапишет это — если границы не совпадают с экспортным масштабом, начинаются циклы переделок.

Примеры ниже сосредоточены на Unity UGUI Image (Sliced / Tiled). Godot StyleBoxTexture и nine-slice спрайтов в Cocos отображаются на те же идеи, включая content padding. Якоря и Safe Area: чек-лист движка + MCP, пункт 6. Отступы в зоне растяжения с локалями: переполнение локалей, проверка дизайна 7.

Чек-лист передачи дизайна, пункт 6 требует чётких nine-slice / зон растяжения. Этот пост охватывает когда нарезать, метки Figma/PSD, приёмку в трёх движках и путь для полноэкранного канваса, плюс таблицу исправлений.

Критерии провала (любой один = не пройдено): угловой арт деформируется при растяжении; непреднамеренный повтор или швы в зоне растяжения; радиус угла меняется с размером панели; масштабируемый фон масштабируется вместе с фиксированными иконками/аватарами; экспортный масштаб не совпадает с пикселями границ в движке (зазоры в 1px или мягкие края).


Когда nine-slice обязателен, а жёсткое растяжение запрещено

Тип ассетаДелатьНе делать
Фон диалога / панели настроекNine-slice + content paddingОдин Simple-спрайт на всю область
Контейнеры ввода / полосNine-slice или L/R cap + повтор центраСжимать высоту без правил арта
Основные кнопки (фиксированный размер)Фиксированный спрайт или nine-slice + мин. ширинаБесконечно широкая скруглённая кнопка как одно растяжение
Иконки, аватары, рамки навыковФиксированный размер, без nine-sliceОбъединять с фоном панели в одно растягиваемое изображение
Полноэкранный фон (без рамки)Полное изображение или стратегия тайлинга в спецификацииПереиспользовать границы панели на полный экран

Правило: Если ширина или высота меняется с разрешением, текстом или содержимым списка, а углы должны сохранять форму → nine-slice или эквивалент в движке. Контролы фиксированного размера → фиксированный спрайт + ограничения лейаута.


Метки передачи Figma / PSD (чек-лист)

#ПроверкаСтандарт прохождения
1Слой растяжения отделён от декора / иконок / текстаРескин фона панели + нарезка; иконки не масштабируются с фоном
2Border / cap inset в px (четыре стороны)Совпадает с @1x или командным экспортным масштабом в заметках о передаче
3Фиксированный экспортный масштаб (@1x/@2x или базовая линия 1080)Инженеры не угадывают математику границ
4Радиус угла вне зоны растяжения или спецификация допускает нерастягиваемые углыНикаких пропусков в духе «углы превращаются в капсулы»
5Зона растяжения дружелюбна к тайлингу или однороднаПовтор центра без заметного смещения
6Семантические именаНапример, Panel_Shop_9s, Input_Field_9s
7Мультисостояние (normal / disabled) с одинаковой границейИнсеты совпадают; меняются только цвет/скин
8PSD slice или заметки об экспорте Figma прозрачного паддингаНе считать тень в границе, если спецификация не говорит иначе
9Передавать вместе с пунктом 5 передачи состояний кнопокНе латать отсутствующие состояния неправильным 9s-артом
10Рескин события меняет только арт, граница неизменнаСм. спецификацию рескина

Figma: указывайте cap inset в документации компонента при использовании resizable frames или плагинов нарезки. PSD: выравнивайте слайсы с PSD в Unity за 5 минут.


Три движка: компоненты и приёмка

ПунктUnity UGUIGodot 4 ControlCocos UI
КомпонентImage → Sliced / TiledStyleBoxTexture (patch margin)Sprite nine-slice / Sliced
Источник границSprite Editor Border (L/T/R/B px)content_margin / patchCap insets (LTRB)
Область содержимогоRectTransform + паддинг дочернихMarginContainer + ThemeWidget / паддинг лейаута
Типичный провалНеверное использование Simple; граница не в том масштабеНесовпадение patch и размера текстурыПоворот в атласе ломает inset
ПрохождениеПри 150% / 200% ширины: чёткие углы, чистый центрТо же; превью Theme совпадает с PlayТо же; проверка на устройстве длинного списка

Приёмка в редакторе Unity (отображается на другие движки):

  1. Установите Image в Prefab на Sliced с границами, совпадающими с дизайном.
  2. Перетащите RectTransform панели до минимальной и максимальной ширины дизайна.
  3. Сравните углы, края и центр со скриншотом Figma/PSD.
  4. Если в режиме Play всё в порядке → одна проверка на устройстве по чек-листу перед релизом.

Полноэкранная концепция: разделение канваса и повторный экспорт

Имея только PNG или AI-арт полного экрана, границу вывести нельзя. Путь: VberAI Studio (AI Studio, ≠ Google AI Studio) разделение на месте → разметка масштабируемых панелей → экспорт Prefab (детерминированный, не LLM YAML).

ШагДействиеПриёмка
1Полный экран на канвасе; разделить Panel_* и фиксированные иконкиИменованная иерархия
2Подтвердить намерение 9-slice панели на канвасе или перед экспортомВладелец инсета задокументирован
3Экспорт Prefab для Unity / Godot / CocosSliced QA по таблице выше
4После рескина / локалей — повторный экспорт всего дереваЕсли спецификация границ не изменилась, инсеты не меняются

Слоистые Figma/PSD: предпочитайте Figma → Unity или PSD в UGUI, затем мелкие правки границ в движке — избегайте повторного экспорта 20 отдельных PNG на каждое событие.


Маршрутизация исправлений

СимптомВероятная причинаДействиеВладелец
Размытые углыМасштаб Simple на всём изображенииSliced + правильная граница; дизайн добавляет метку инсетаИнженерия + Дизайн
Шов в центре / блоки повтораИнсет смещён на 1–2px; несовпадение масштабаСовместить с px дизайна; переимпортировать спрайтИнженерия
Углы растягиваются в овалАрт не должен использовать nine-sliceФиксированный размер или новый арт угловДизайн
Граница меняется после рескинаНовый размер арта или паддингЗафиксировать размер канваса в спецификации рескина; повторный QA после рескинаДизайн
Фон строки списка деформируетсяФон строки растягивается как целая панель9s для строки или фиксированная высотаДизайн
Провал только на некоторых разрешенияхНецелочисленный масштаб Canvas ScalerЧек-лист движка Anchor/ScalerИнженерия

Правило: Если граница ≠ дизайн → сначала исправьте метки или исходный спрайт, затем Prefab. Исправления только в инспекторе без обновления передачи → потеряются при следующем экспорте.


Против передачи «только PNG-пак»

ПодходПодходитНе подходит
Ручной экспорт + инженерия заполняет границыМало панелей, демоЧастый рескин, много экранов
Figma/PSD + структурированный экспорт VberAI StudioМного экранов, много движков, событияЗамена меток инсетов и QA
Временный Sliced в движкеХотфикс одного экранаДолгосрочно без источника дизайна

Рекомендуется: метки инсетов в дизайне → структурированный экспорт Prefab → Sliced в редакторе Unity на двух ширинах → MCP для логики. Raycast и привязка: чек-лист движка + MCP.


Часто задаваемые вопросы

Могут ли скруглённые панели использовать nine-slice?
Да, но инсеты должны лежать на прямых растягиваемых краях; углы остаются в нерастягиваемых угловых тайлах. Если радиус угла растёт с размером панели → провал; исправьте арт или ограничьте максимальный размер.

Считаются ли тени в границе?
Решает спецификация продукта. Если тень не растягивается, разделите слои или отметьте инсет на сплошном прямоугольнике без внешнего свечения.

Tiled или Sliced?
Sliced для панелей с рамкой; Tiled (или дружелюбный к тайлингу арт центра) для повторяющейся текстуры середины. Пишите в спецификации — не оставляйте инженерам угадывать.

Отдельные слайсы для Godot / Cocos?
Одна семантика инсетов; переключайте цель экспорта через мультидвижковый экспорт канваса и проверяйте patch/cap по таблице.

Автоматически ли VberAI Studio заполняет границы?
Зависит от экспорта и ассетов; приёмка всегда — Sliced/StyleBox в движке. Нет инсета в дизайне → инженерия задаёт границы в редакторе и фиксирует в спецификации.

VberAI Studio — то же самое, что Google AI Studio?
Нет. См. сравнение.

Другие статьи, которые могут вам понравиться