H. Idris / Game UI/UX Designer

Designing game UI for Unity: a handoff that actually gets built

The gap between a design and a built interface is where most game UI quality is lost. This is what Unity actually needs from a design, why layouts break when they hit a real resolution, and the handoff package that gets your screens built the way you drew them.

Written by Hadjoudj Idris, Game UI/UX Designer. Six years of menus, HUDs and full interface systems, including a title shipped on Steam.

Hire me

A design delivered as flat images is a picture of an interface. Unity needs to know how it behaves: what happens at a different aspect ratio, which parts of a panel stretch, what a button looks like when it is disabled, and where the focus goes when a player presses down on a gamepad. None of that is visible in a PNG.

Why designs get rebuilt instead of built

When a developer says a design "did not work in Unity", it is almost always one of five things, and all five are preventable at the design stage.

  1. It was designed at one resolution with no instruction about what happens at any other.
  2. Panels were delivered as flat images, so a container that needs to grow with its content cannot.
  3. Only the default state exists. No hover, pressed, disabled, focused, selected.
  4. No controller navigation was specified, so the developer invents an order and it feels wrong.
  5. Assets were exported inconsistently: mixed densities, baked-in shadows, no padding, names nobody can search.

None of these are Unity's fault, and none require the designer to be an engineer. They require the design to describe behaviour as well as appearance.

Design at a reference resolution

Unity's Canvas Scaler is normally set to Scale With Screen Size with a reference resolution, most commonly 1920 × 1080 for PC and console. The design should be built at that same resolution so the numbers in the file mean something in the engine.

The Screen Match Mode setting then decides what happens when the real aspect ratio differs: matching width, matching height, or a blend between them. That is a decision worth making deliberately with your developer, because it determines whether an ultrawide monitor gets more visible area or a larger interface.

  • Agree the reference resolution before designing, not after.
  • Design in whole pixels at that resolution. Half-pixel values become soft edges once scaling is applied.
  • Check your layout at 16:10, 21:9 and 4:3 if you support them, and at the smallest resolution you allow.
  • For mobile, design for the safe area, not the full rectangle. Notches and gesture bars will eat the edges.

Anchors: design for resize, not for one screenshot

Every element in Unity has anchors that determine what it stays attached to when the canvas changes size. This is the single most valuable thing a design can specify, and it takes about ten minutes to annotate a whole screen.

ElementAnchor toBehaviour
Score, timer, resourcesTop-left or top-centreFixed size, stays pinned to that corner
Settings and close buttonsTop-rightFixed size, pinned
Action bar, ability slotsBottom-centreFixed size, centred horizontally
Backgrounds and scrimsStretch both axesFills whatever it is given
Content panels and listsStretch horizontally, fixed heightGrows wider, keeps its height
Modal dialogsCentreStays centred, fixed size

Write it on the design. A single line per element, "anchored top-right, fixed size, 32px margin", removes an entire category of guesswork and the rework that follows it.

Nine-slice: your corner radius is a spec, not a picture

A button that has to work at several widths should not ship as several images. In Unity a sprite gets border values in the Sprite Editor and the Image component is set to Sliced: the corners stay fixed, the edges stretch along one axis, and the middle fills. One small asset covers every size.

  • Export the smallest tile that contains the full corner, plus a few pixels of the straight edge.
  • Tell the developer the border values in pixels: top, right, bottom, left. They are a design decision, not a guess.
  • Keep corners in the corners. A gradient or highlight running across the whole button breaks when the middle stretches.
  • Do not bake shadows into a sliced sprite unless the shadow is uniform on all sides.
  • Flag anything that must tile rather than stretch, such as a repeating texture, because that is a different Image setting.

Exports, naming and atlases

DoWhy
Export PNG with transparency, trimmed but with consistent paddingUnpredictable padding shifts elements when they are placed
Use a flat naming scheme: btn_primary_default, btn_primary_pressedSortable, searchable, and states group together
Export at the reference resolution, and at 2× only if you need itMixed densities in one screen are a common source of soft edges
Group related sprites so they can share a Sprite AtlasAtlases reduce draw calls; scattered sprites make that harder
Deliver icons as SVG as well as PNG where possibleLets them be regenerated at any size later without asking you
Keep shadows and glows as separate assets where they overlap other elementsBaked effects cannot be adjusted, and they break nine-slice

Fonts and TextMeshPro

Unity's TextMeshPro renders text from a generated font asset rather than the font file directly, which has practical consequences for design.

  • Supply the actual font files, plus the licence. A design showing a font nobody can legally embed is a problem discovered late.
  • Check the licence covers embedding in a game build. Desktop licences frequently do not, and this catches teams out constantly.
  • Name exact sizes, weights, line heights and letter spacing. "Slightly tighter" is not implementable.
  • Flag every language you will ship in. Non-Latin scripts need their glyphs included, usually through a fallback font asset, and that has to be planned rather than discovered.
  • Avoid relying on very thin weights at small sizes, which lose definition once rendered through a font atlas.
  • Decide about outlines and shadows early, since they change how the text asset is set up.

States, and how they actually get wired

Unity's Button component has built-in transitions between normal, highlighted, pressed, selected and disabled, either by tint, by swapping sprites, or by animation. Which one your design implies changes the work considerably.

If the state changesImplement asYou must supply
Only brightness or colourColour tintThe exact colour or multiplier per state
The whole graphicSprite swapOne exported sprite per state
Scale, position or multiple propertiesAnimationTimings, easing, and what moves

Deliver all five states for anything interactive. Disabled and focused are the two that get skipped, and they are the two that matter most on a gamepad. Also worth knowing: CanvasGroup is how a whole panel gets faded or made non-interactive at once, so if your design has a "dimmed while a modal is open" state, say so, and it is one component rather than fifty colour changes.

Controller navigation in Unity

Unity's EventSystem drives gamepad and keyboard navigation. Each Selectable has a Navigation mode, and the automatic one infers an order from screen positions. It is fine for a simple vertical list and wrong more or less everywhere else.

  1. Specify the first selected element for every screen. A menu that opens with nothing selected leaves a controller player pressing directions to find out where they are.
  2. Draw the navigation order on the design: which element leads to which in each direction. On anything grid-shaped or irregular, set it explicitly rather than relying on inference.
  3. Say what happens at the ends. Does the list wrap around, or stop?
  4. Skip disabled elements in the order entirely.
  5. Design the focus state to be unmissable, since it is the only thing telling the player where they are. On console it needs to read from across a room.
  6. Define the back button and keep its behaviour identical on every screen.

This is the area where late decisions cause full rebuilds, which is why it appears in seven HUD mistakes that make players quit as well. Deciding it during design costs nothing.

Layout groups, and when to stop using them

Unity's Horizontal, Vertical and Grid Layout Groups, usually with a Content Size Fitter, will arrange children automatically. They are genuinely useful for lists, inventories and anything driven by variable data, although past about fifty rows a list wants pooling rather than a layout group, which is its own subject in fast lists in Unity.

They also cost performance, because they force layout rebuilds, and nesting them deeply is a well-known way to make a UI hitch. For a fixed layout that never changes shape, positioning elements directly is cheaper and more predictable. The practical rule: use layout groups where the content is dynamic, and fixed positioning where it is not.

Two related things worth knowing as a designer, because they change what you should ask for: a Canvas rebuilds as a unit, so a small frequently-updating element such as a timer is better on its own Canvas than inside a large static one; and any graphic that does not need to receive clicks should have Raycast Target disabled, which is free performance and something you can flag on the design. Both of those, and the rest of the interface causes of a bad frame time, are in why your Unity menus tank the frame rate.

UGUI or UI Toolkit?

UGUI (Canvas)UI Toolkit
Maturity for runtime game UIThe established default, very widely usedNewer, improving, less common in shipped game UI
Authoring modelGameObjects, components, prefabsUXML and USS, closer to web markup and styles
Art-directed, animated game UIStrong, everything is a GameObjectWorkable, but less natural for heavy art direction
Editor tools and dense data UIServiceableExcellent, and the intended use
Team familiarityAlmost every Unity developer knows itFewer people, more ramp-up

For most game interfaces, UGUI remains the pragmatic choice, and it is what handoff conventions are built around. UI Toolkit is compelling for editor tooling and data-heavy screens. Either way, ask your developer which one they are using before you design, because it changes what a useful handoff looks like. The full comparison, including what Unity's own manual recommends for each case, is in uGUI or UI Toolkit.

The handoff package

  1. Source file, organised, with layers named to match the exported assets.
  2. A screen list with every state, so nothing is discovered late.
  3. Anchor annotations for every element on every screen.
  4. Nine-slice borders in pixels for every stretchable graphic.
  5. Exported sprites, trimmed consistently, named in a flat searchable scheme, grouped for atlasing.
  6. Font files and licence, with exact sizes, weights, line heights and spacing.
  7. All five states for every interactive element, with the transition type named.
  8. Navigation order and first-selected per screen, plus back behaviour.
  9. Colour values as hex, and any alpha values used.
  10. Motion spec: durations and easing for transitions that matter.
  11. A short spec document tying it together, one page per screen is plenty.

That package is the difference between a developer building your design and a developer interpreting it. It is also what stops the interface drifting during production, which is the quiet way game UI quality erodes. How those components should be structured once they are in the project, so one change lands everywhere, is in prefabs, variants and a Unity UI kit.

Who should do the implementation?

ArrangementWorks whenWatch out for
Designer designs, developer buildsThe default, and correct for most teams.Handoff quality is everything. Budget time for questions during the build.
Designer builds the UI in Unity tooNo engineer free for UI, or the interface is highly art-directed.Needs a designer who genuinely knows the engine, and clear ownership of the scenes.
Designer prototypes, developer productionisesComplex interactions where feel matters more than a static spec.Agree up front that the prototype is a spec, not shipping code.

I work in all three shapes depending on the team. What matters is deciding which one you are running before the design starts, because it changes what gets delivered.

What resolution should I design game UI at for Unity?

Match your Canvas Scaler reference resolution, most commonly 1920 × 1080 for PC and console, so the numbers in your design file mean the same thing in the engine. Agree it with your developer before starting, along with how the canvas should behave at other aspect ratios.

What is nine-slice and why does my designer keep mentioning it?

It lets one small sprite render at any size: the corners stay fixed, the edges stretch along one axis, and the middle fills. It is why a single button asset can serve every width in your game. The border values in pixels are a design decision and should be handed over with the sprite.

What should a Unity UI handoff include?

Source file, screen and state list, anchor annotations, nine-slice borders, consistently trimmed and named sprite exports, font files with licence and exact type settings, all five interaction states, controller navigation order and first-selected per screen, colour values, and a short motion spec.

Do designers need to know Unity?

They do not need to build in it, but they do need to know what it needs: anchors, nine-slice, states, and how navigation works. A designer who has never seen their work implemented tends to produce designs that get reinterpreted rather than built.

Should I use UGUI or UI Toolkit for game UI?

UGUI remains the pragmatic default for runtime game interfaces: it is mature, widely known, and suits art-directed, animated UI. UI Toolkit is excellent for editor tooling and data-heavy screens. Decide before design starts, because it changes what a useful handoff looks like.

Why does my UI hitch when a menu opens?

Frequently layout rebuilds. Deeply nested layout groups with content size fitters recalculate a lot, and a Canvas rebuilds as a unit, so one changing element can dirty a large static screen. Splitting frequently updating elements onto their own Canvas is a common fix.

Can I hand over a Figma file and nothing else?

You can, and you will get an interpretation. Figma carries appearance but not behaviour: it does not say what stretches, what the disabled state is, or where focus goes on a gamepad. The annotations are the part that makes it buildable.

How do I handle localisation in Unity UI?

Design against the longest string you expect, not the English one, and plan for non-Latin scripts early since TextMeshPro needs those glyphs included, usually via a fallback font asset. Layouts that stretch rather than fitting exactly to English text survive translation far better.

Who should implement the UI, the designer or the developer?

Usually the developer, with a strong handoff and the designer available for questions during the build. Designers implementing directly works well when the interface is highly art-directed or no engineer is free, provided ownership of the scenes is clear.

Hadjoudj Idris

Game UI/UX Designer, Remote, worldwide

Need this done properly on your game?

Menus, HUDs, a full UI system, or one screen that isn't working. Tell me what you're building and I'll tell you honestly whether I'm the right fit, and what it would cost.

UpworkTop Rated100% Job Success

Contact

Have a game that needs an interface?

Menus, HUDs, full UI systems or a single screen that isn't working. Tell me what you're building and I'll tell you honestly whether I'm the right fit.

Email
Discord
Résumé Download PDF
Based Remote, worldwide