← Back to blog

Game UI Nine-Slice and Scalable Panels: Figma / PSD Marks and Engine Sliced QA

When panels and fields need 9-slice, how to mark borders and export scale in design, and how to fail/pass Unity UGUI Sliced, Godot StyleBox, and Cocos caps—with fix paths. Extends handoff checklist item 6.

Published
  • game-ui-design
  • game-dev-ai
  • ui-slicing
  • figma-to-unity
  • psd-to-unity
  • nine-slice
  • vberai
  • ai-studio
  • unity
  • godot
  • cocos
  • 2026
Game UI Nine-Slice and Scalable Panels: Figma / PSD Marks and Engine Sliced QA

When a panel is stretched wider, blurry corners, repeating center texture, or oval corners usually mean nine-slice (9-slice / cap insets) was not specified at handoff, or the engine uses Simple scale on the whole sprite. Tuning Image Type and borders in the Unity Editor can save one screen, but the next design drop overwrites it—if borders do not match export scale, rework loops.

Examples below focus on Unity UGUI Image (Sliced / Tiled). Godot StyleBoxTexture and Cocos sprite nine-slice map to the same ideas, including content padding. Anchors and Safe Area: engine + MCP checklist item 6. Stretch-region padding with locales: locale overflow design check 7.

Design handoff checklist item 6 requires clear nine-slice / stretch regions. This post covers when to slice, Figma/PSD marks, three-engine acceptance, and full-screen canvas path, plus a fix table.

Fail criteria (any one = not passed): corner art deforms when stretched; unintended repeat or seams in the stretch region; corner radius changes with panel size; scalable background scaled together with fixed icons/avatars; export scale does not match engine border pixels (1px gaps or soft edges).

Simple full stretch: blurry corners, oval rounding

When nine-slice is required vs hard stretch forbidden

Asset typeDoDo not
Dialog / settings panel bgNine-slice + content paddingSingle Simple sprite full bleed
Input / bar containersNine-slice or L/R cap + center repeatSquash height without art rules
Primary buttons (fixed size)Fixed sprite or nine-slice + min widthInfinite wide rounded button as one stretch
Icons, avatars, skill framesFixed size, no nine-sliceMerge with panel bg into one stretch image
Full-screen bg (no framed box)Full image or tile strategy in specReuse panel borders on full bleed

Rule: If width or height changes with resolution, copy, or list content and corners must keep shape → nine-slice or engine equivalent. Fixed-size controls → fixed sprite + layout constraints.


Figma / PSD handoff marks (tick list)

#CheckPass standard
1Stretch layer separate from decor / icons / textPanel bg reskin + slice; icons not scaled with bg
2Border / cap inset in px (four sides)Matches @1x or team export scale in delivery notes
3Fixed export scale (@1x/@2x or 1080 baseline)Engineering does not guess border math
4Corner radius outside stretch region or spec allows non-stretch cornersNo “corners turn into capsules” pass
5Stretch region tile-friendly or solidCenter repeat without obvious misalignment
6Semantic namese.g. Panel_Shop_9s, Input_Field_9s
7Multi-state (normal / disabled) same borderInsets match; only color/skin changes
8PSD slice or Figma export notes transparent paddingDo not count shadow in border unless spec says so
9Deliver with handoff item 5 button statesDo not patch missing states with wrong 9s art
10Event reskin changes art only, border unchangedSee reskin spec

Figma: put cap inset in component docs when using resizable frames or slice plugins. PSD: align slices with PSD to Unity in 5 minutes.

Nine-slice cap insets on four sides and content area


Three engines: components and acceptance

ItemUnity UGUIGodot 4 ControlCocos UI
ComponentImage → Sliced / TiledStyleBoxTexture (patch margin)Sprite nine-slice / Sliced
Border sourceSprite Editor Border (L/T/R/B px)content_margin / patchCap insets (LTRB)
Content areaRectTransform + child paddingMarginContainer + ThemeWidget / layout padding
Typical failSimple misuse; wrong-scale borderPatch vs texture size mismatchAtlas rotation breaks inset
PassAt 150% / 200% width: sharp corners, clean centerSame; Theme preview matches PlaySame; device spot-check long list

Unity Editor acceptance (map to other engines):

  1. Set Prefab Image to Sliced with borders matching design.
  2. Drag panel RectTransform to min and max design widths.
  3. Compare corners, edges, and center to Figma/PSD capture.
  4. If Play mode OK → one device pass per pre-ship checklist.

Full-screen concept: canvas split and re-export

With PNG or AI full-screen art only, border cannot be inferred. Path: VberAI Studio (AI Studio, ≠ Google AI Studio) in-place split → mark scalable panels → export Prefab (deterministic, not LLM YAML).

StepActionAcceptance
1Full screen on canvas; split Panel_* and fixed iconsNamed hierarchy
2Confirm panel 9-slice intent on canvas or before exportOwner for inset documented
3Export Unity / Godot / Cocos PrefabSliced QA per table above
4After reskin / locales, full-tree re-exportIf border spec unchanged, insets unchanged

Layered Figma/PSD: prefer Figma → Unity or PSD to UGUI, then minor border tweaks in engine—avoid re-exporting 20 loose PNGs each event.


Fix routing

SymptomLikely causeActionOwner
Blurry cornersSimple scale on whole imageSliced + correct border; design adds inset markEngineering + Design
Center seam / repeat blocksinset off 1–2px; scale mismatchMatch design px; reimport spriteEngineering
Corners stretch ovalArt should not nine-sliceFixed size or new corner artDesign
Border changes after reskinNew art size or paddingLock canvas size in reskin spec; re-QA after reskinDesign
List row bg deformsRow bg stretched like full panelRow-specific 9s or fixed heightDesign
Fail only at some resolutionCanvas Scaler non-integer scaleEngine checklist Anchor/ScalerEngineering

Rule: If border ≠ design → fix marks or sprite source first, then Prefab. Inspector-only fixes without updating delivery → lost on next export.


vs “PNG pack only” handoff

ApproachFitsDoes not fit
Manual export + engineering fills borderFew panels, demoFrequent reskin, many screens
Figma/PSD + VberAI Studio structured exportMulti-screen, multi-engine, eventsReplacing inset marks and QA
Temporary Sliced in engineHotfix one screenLong-term without design source

Recommended: design inset marks → structured Prefab export → Unity Editor Sliced at two widths → MCP for logic. Raycast and binding: engine + MCP checklist.


FAQ

Can rounded panels use nine-slice?
Yes, but insets must sit on straight stretch edges; corners stay in non-stretch corner tiles. If corner radius grows with panel size → fail; fix art or cap max size.

Do shadows count in the border?
Product spec decides. If shadow does not stretch, split layers or mark inset on the solid rect without outer glow.

Tiled vs Sliced?
Sliced for framed panels; Tiled (or tile-friendly center art) for repeating middle texture. Write in spec—do not leave engineering to guess.

Separate slices for Godot / Cocos?
One inset semantics; switch export target via canvas multi-engine export and verify patch/cap per table.

Does VberAI Studio auto-fill borders?
Depends on export and assets; acceptance is always engine Sliced/StyleBox. No inset in design → engineering sets borders in Editor and records in spec.

Is VberAI Studio the same as Google AI Studio?
No. See comparison.

More guides you might like