UI Shapes

v1.3.4 Manual

One component for Unity UI. Add a UIShape to any UI element and you get rounded, squircle, octagonal or slanted shapes with fill, gradients, textures, drop shadow, inner shadow, glow, outline, bevel and background blur, plus soft masking, progress wipes and per-state button styling. No sprites, no 9-slices, no render textures. Everything stays crisp at any resolution.

Requirements

The demo scene is UI Shapes/Demo/UI Shapes Demo Scene.unity. It runs on any render pipeline.

Quick Start

  1. Select a UI GameObject, or create an empty one under your Canvas.
  2. Add Component ▸ UI ▸ UI Shape.
  3. Tick the effects you want in the inspector and tune them. The component builds and manages everything itself.

To make it interactive, click Add... next to the Selectable field at the top of the inspector. See Interactive Controls.

TipYou can also use UIShape as a decorator: leave Fill off and put it on (or beside) an existing Image to wrap it in a shadow, glow or outline.

Ready-Made Controls

To start from a finished control rather than a blank shape, use GameObject ▸ UI. The UI Shapes entries sit at the top of that menu, above Unity's own. Every one builds the whole hierarchy out of UI Shapes, with no Image and no sprites anywhere, and with its hover and pressed looks already set up.

ItemWhat you get
UI ShapeA plain shape, same as adding the component by hand.
ButtonA shape with a Button and a label.
ToggleA row with a checkbox, a checkmark that turns on with it, and a label.
SliderA track with a fill and a handle that follow the slider's value.
DropdownA closed control plus its drop-down list, with rows that highlight on hover.
Input FieldA text box with placeholder text.
Scroll View - Vertical
Scroll View - Horizontal
A soft-masked scrolling area with a scrollbar, a layout group that stacks items along the scrolling axis, and one Item_1 shape to duplicate.

Dropdown and Input Field use TextMeshPro, so they appear only when TMP is installed. Everything else works either way, and adds a TMP label when TMP is there.

To turn a shape you've already styled into a control instead, click Add... next to Selectable and pick from the same list. Your shape becomes the control's background, and any parts it needs are created inside it. Scroll View isn't offered there, since a scrolling area has no states to drive.

Using the Inspector

Each effect is a collapsible module, styled like Unity's Particle System. The checkbox in the module header is the on/off switch, and clicking the bar expands the settings. A module you expand while it's off shows its settings read-only.

Most effects share the same handful of controls at the top of their module, described once under Common Controls. Each effect's section below lists only its own settings.

All sizes and distances are in canvas units, and all angles are in degrees.

Shape

FieldWhat it does
Corner StyleSharp (default) is a plain rectangle, and hides the radius controls since they don't apply. Rounded gives circular corner arcs. Octagonal cuts each corner off as a straight 45° chamfer. Squircle gives superellipse arcs, the continuous corner familiar from iOS and Figma, with Squareness setting how square they are.
Sharp
Rounded
Octagonal
Squircle
Border ModeHow the corner radius is shared out. Uniform uses one radius for all four corners. Round auto-sizes it to half the short side, so squares become circles and long rectangles become pills. Free gives a separate radius per corner.
Uniform
Round
Free
SquarenessSquircle only. How square the corner arcs are, from 0 to 1. At 0 the arc is a plain circle, identical to Rounded; around 0.5 sits the familiar iOS and Figma look; 1 is a nearly square corner that still meets the edges smoothly. Animatable, and it blends smoothly between button states.
Corner RadiusThe arc radius on Rounded and Squircle, or the chamfer size on Octagonal. Radii that would overlap along an edge scale down together, the same way CSS border-radius does.

Fill, outline, shadows, glow and bevel all follow the corner style, so the shape keeps one silhouette. Style and radii animate and can be overridden per button state. Transitions between Sharp, Rounded and Squircle morph the corners rather than popping, because squareness 0 is exactly the Rounded arc.

Pick a style by looks. Sharp, Rounded and Octagonal all cost the same. Squircle costs a little more, mostly on the soft effects, and only on the shapes that use it. That difference never registers on PC or console, and on mobile ordinary squircle buttons and panels are fine. The case worth profiling is a whole screen of squircle panels each carrying a drop shadow.

Skew

Turn the Skew module on to slant the shape like italic text. It's purely visual, so the RectTransform, layout and anchoring don't change, and every effect slants with it, still anti-aliased.

FieldWhat it does
Skew AxisHorizontal or Vertical.
Skew AngleThe slant in degrees. 0° is upright.
Skew ModeParallel: both edges share the angle, giving a parallelogram. This is the classic italic slant, and the default.
Mirrored: the opposite edge takes the negative angle, giving a symmetric trapezoid. Good for banners, ribbons and fake-perspective panels.
Custom: an angle per edge (Left and Right, or Bottom and Top on a vertical skew) for an asymmetric trapezoid.
Parallel
Mirrored
Custom
Even Effect WidthOff by default. Off, the effects slant along with the shape, so an outline gets thicker on some edges and thinner on others, exactly the way italic text slants its own strokes. Turn it on to keep outlines, shadows and glows the same thickness all the way around instead. It costs noticeably more to draw: see Performance & Platforms.

The module has its own on/off switch, so you can keep an angle set and switch the slant per button state, where it fades in and out smoothly.

A trapezoid narrows as the angle grows and stops before the edges cross, settling into a clean triangle. How steep you can go depends on the element's proportions: a tall element takes a much steeper angle than a short one.

Soft masks, Background Blur and click detection all follow the slanted outline.

A slanted shape costs the same as an upright one to draw, unless you turn Even Effect Width on: see Performance & Platforms.

LimitationSoft masking a skewed shape assumes the mask and its canvas aren't rotated.

Common Controls

These four settings appear on most effect modules. Each effect section below says which of them it has, then lists its own specific fields.

FieldWhat it does
Color ModeWhether the effect uses a Single Color or a gradient. See below.
Opacity0 to 1, fading that effect alone. Layers on top of the color's own alpha.
Blend ModeHow the effect composites over what's beneath it. Normal covers, Additive brightens (good for glows and bevel highlights), and Multiply darkens (good for bevel shadows and tinted overlays).
Intensity0.1 to 10, an alpha multiplier. Values above 1 make a soft effect's core denser without making it any bigger, which is the difference between a faint haze and a solid core at the same radius. Only the three soft effects have it.

Gradients

Wherever Color Mode offers a gradient, the choices are Vertical (top to bottom), Horizontal (left to right), or Custom Angle, which adds an Angle slider (0° puts the end color on the right, 90° on top).

Fill uses Unity's own gradient editor: click the Gradient field and add as many color and alpha stops as you like, anywhere along the ramp. Set the gradient's own mode to Fixed for hard-edged bands instead of a smooth blend. Every other effect (Texture, Drop Shadow, Inner Shadow, Glow, Outline) keeps a simpler start and end color, which is what those effects are normally used for.

Colors carry alpha, so a transparent stop gives a clean fade-out, and alpha stops can sit at different positions from the color stops. Colors blend the way they do in Photoshop, Figma and CSS. Gradients cost nothing extra to draw, and state transitions cross-fade them, including between a single color and a gradient, or between two gradients with different numbers of stops.

NoteThe Animator can key an effect's Color (in Single Color mode) but not a Gradient, which Unity's animation system cannot handle. To animate a Fill gradient, put the gradients on button states and let the state transition cross-fade them, or swap them from a script.
NoteMultiply-blended effects render in a separate draw call from Normal and Additive ones. It's a small cost, and worth it for the classic bevel look, but it's the one blend mode with a performance side.

Fill

The shape's interior, as a single color or a multi-stop gradient.

Single Color
Two stops
Multi-stop

Common controls: Color Mode and Opacity. Fill has no blend mode or intensity of its own, since it's the bottom layer everything else composites over. Textures are a separate module, covered next.

Texture

A sprite drawn on top of the Fill and clipped to the shape's corners. It has its own on/off switch, so you can use it with Fill off. With no sprite assigned it draws a plain white rect, which the tint turns into a flat colored layer.

Sprite
Grayscale
Grayscale + tint

Common controls: Color Mode, Blend Mode and Opacity. The color here is a tint: it multiplies the sprite's own colors rather than replacing them, like Image.color. White, the default, leaves the sprite untouched, and a grayscale or white sprite can be recolored freely. A gradient Color Mode tints across the shape, so one sprite can fade between two colors. The tint's alpha multiplies with Opacity.

FieldWhat it does
TextureThe sprite to draw. Leave it empty to draw nothing.
Texture FitHow the sprite fits the rect when the aspect ratios don't match. See the table below.
Pixels Per Unit MultiplierConstant Size only. Scales the tile's on-screen size, matching Image.pixelsPerUnitMultiplier.
GrayscaleStrips the sprite's color before the tint is applied. On its own it grays an image out, which is what you want on a Disabled state. Combined with a tint it recolors the image through that single color.
SepiaTick Grayscale and set the tint to a warm brown: the image comes through in that one hue. Blue gives a cyanotype, green a night-vision look, and a gradient tint fades the image between two hues. Without Grayscale the same tint only darkens the colors already there.

Texture Fit handles mismatched aspect ratios:

ModeBehavior
Stretch (default)Scales to fill, ignoring aspect ratio.
Aspect FitKeeps aspect and fits inside the shape. The margin is transparent, like Image.preserveAspect.
Aspect FillKeeps aspect, scales up to cover the shape, crops the overflow.
Constant SizeA fixed on-screen texel size, tiled to cover the rect. Needs a non-atlas sprite with Wrap Mode: Repeat, and the inspector warns if the sprite doesn't qualify. The tile size comes from the sprite's Pixels Per Unit, the Canvas's Reference Pixels Per Unit, and the multiplier above.

Every fit works from the sprite's full authored size, including any transparent border, so artwork sitting off to one side keeps its intended aspect and position. A sprite packed into a trimmed Sprite Atlas is the exception: the border no longer exists there, so the fit uses the trimmed artwork. Set the sprite to Mesh Type: Full Rect if you need the border preserved in an atlas.

Textures always render upright. They never shear with a skewed shape, though the silhouette still clips them. The tint gradient does follow the shape, so it stays aligned with the fill's gradient.

Every Texture field animates and can be overridden per state, so a state can swap the sprite, the fit, the tint or the opacity. Grayscale is on or off rather than an amount, so it switches at the start of a state transition instead of fading across it, like Texture Fit and the blend modes. The two fields below are the exception: they apply to the whole shape rather than per state, so you'll find them on the Normal tab only.

Effects That Follow the Picture

Cut-out artwork, an icon, a character or a logo on a see-through background, usually wants its shadow and its outline around the picture, not around the rect it sits in. Tick Use Texture Outline for Effects and they do.

FieldWhat it does
Use Texture Outline for EffectsOutline, Drop Shadow, Glow, Inner Shadow and Bevel trace the sprite's own shape.
TargetsWhich of the five follow. The rest keep the shape's outline.

Every effect keeps all of its settings. Width, Placement, Radius, Distance, Spread, colors and blend modes all behave exactly as they do on a plain shape.

The tick appears once you assign a sprite, and it turns itself on the first time you assign one with a see-through background to a shape that has no Fill. Turn it off any time; it stays off after that.

Two limitsFollowing isn't available on a slanted shape, or with Constant Size, where the sprite tiles and there's no single outline to follow. The tick is hidden in both cases.

Drop Shadow

A soft shadow behind the element.

Drop Shadow

Common controls: Color Mode, Opacity, Blend Mode and Intensity.

FieldWhat it does
RadiusBlur distance.
DistanceHow far the shadow is offset from the shape.
AngleWhich way it's offset. 0° is right, 90° is up.
SpreadGrows or shrinks the shadow before blurring.

The shadow is cut out of the shape's interior, so a semi-transparent glass panel never shows its own shadow through itself.

Inner Shadow

A soft shadow drawn inside the shape's edge, for a recessed look. It covers the outer edge completely, so no rim of fill color peeks through.

Inner Shadow

Common controls: Color Mode, Opacity, Blend Mode and Intensity.

FieldWhat it does
RadiusBlur distance.
DistanceHow far the shadow is offset inside the shape.
AngleWhich way it's offset. 0° is right, 90° is up.
SpreadPositive values thicken the shadow on all sides.

Glow

A halo around the shape, additive by default. It's centered, so unlike the shadows it has no distance or angle, and like the drop shadow it renders only outside the shape. The halo keeps an even width all the way around, so corners stay as sharp or as round as the shape's own.

Glow

Common controls: Color Mode, Opacity, Blend Mode and Intensity.

FieldWhat it does
RadiusHow far the glow reaches out from the shape.
SpreadPushes the whole halo out from the shape, or pulls it in, without changing how soft it is.

Outline

A stroke on the shape's edge.

Outline

Common controls: Color Mode, Opacity and Blend Mode. The outline is a hard-edged effect, so it has no intensity.

FieldWhat it does
PlacementInside, Outside or Centered on the edge.
WidthStroke thickness. On a slanted shape it slants too, unless you turn on Even Effect Width in the Skew module.
Softness0 for a crisp stroke, higher to feather it.
DistancePushes the stroke further out, for a detached ring.

On a sharp-cornered shape, Outside and Center strokes miter to a point. With a radius, the outer edge grows to radius + width, the way design tools stroke a rounded rectangle.

NoteA soft Outside outline can leave a very faint trace where its falloff crosses the fill's edge. Inside or Center placement avoids it.

Bevel

A Photoshop-style inner bevel: a lit band along the edge, with a highlight on the light-facing side and a shadow opposite, wrapping around rounded corners.

Raised
Invert

Bevel has no single color of its own. Instead the highlight and the shadow each get their own Color, Opacity and Blend Mode, so you can tune the two halves independently. The defaults are additive white and normal black; set the shadow to Multiply for the classic Photoshop look.

FieldWhat it does
WidthThe band size.
DepthShading strength.
SoftnessFeathers the band and flattens the shading where two edges meet: a square corner's miter line, an octagon's facet joins, and the ridge running inward from every corner. 0 gives a crisp chisel with hard miter joins. Measured in the same units as Width, so a Softness near the Width washes the facets out completely.
AngleLight direction. The default 135° is Photoshop's up-left.
InvertFlips the lighting so the shape reads as pressed in. Handy for a pressed button state.
Highlight Color
Highlight Opacity
Highlight Blend Mode
The lit side of the band. Additive white by default.
Shadow Color
Shadow Opacity
Shadow Blend Mode
The unlit side. Normal black by default.

Background Blur

Frosted glass, blurring whatever is rendered behind the shape. Pair it with a semi-transparent Fill for tinted glass. It's clipped to the shape's corners, respects soft masks, and composes correctly where panels overlap.

Background
Behind the panel

Blur has none of the common controls. Its three settings are its own, and the tint comes from the Fill module underneath.

FieldWhat it does
RadiusBlur strength.
Blur OpacityMixes between the sharp and the blurred background. 1 is fully blurred. This is a mix, not a fade to transparent, so lowering it lets the sharp background show through rather than making the panel see-through.
QualityThe blur's sample count: High (32 taps), Medium (16) or Low (8). Lower counts cost proportionally less and stay smooth even at large radii. On busy, high-contrast backdrops the lower settings can look very slightly softer, which is usually invisible in context. This is your main lever on mobile, so see Performance & Platforms before shipping.

Setup Per Pipeline

PipelineSetup
Built-inWorks out of the box, and is the only pipeline that also blurs UI behind the panel, including elements on the same canvas.
URPOne-time setup: press Fix on the reminder in the Background Blur module, and UI Shapes adds the Renderer Feature UI Shapes Background Blur Feature to the default renderer of your active URP Asset. To do it by hand, select your URP Renderer asset (under your URP Asset's Renderer List) and add that feature there. Until the feature is in place, blur panels stay invisible. The feature costs nothing on frames with no blur panel, so it's safe to leave installed. Its Capture Resolution (default Half) is a second mobile lever, covered under Performance & Platforms.
HDRPNo setup. It's handled automatically.
URP / HDRPThe background is captured once per camera, after post-processing, so a panel blurs the finished world image. But UI drawn by that camera, and other elements on the same canvas, are not included. For UI-over-UI blur on URP or HDRP, render the content behind the panel with a separate camera.
PerformanceBackground Blur is by far the most expensive effect, and the only one worth budgeting for. See Performance & Platforms. It isn't supported in VR, though every other effect is.

Progress

Reveal a fraction of the shape, like an Image's Fill Amount, for radial timers, linear bars and cooldown sweeps. Off by default; turn the module on with its header checkbox.

Radial
Linear
FieldWhat it does
Amount0 to 1, how much shows. This is the value you animate or drive from script (ProgressAmount).
MethodRadial is a 360° sweep (pie or clock). Linear is a straight wipe.
OriginWhere the fill starts: the edge it grows from on Linear, or the starting angle on Radial.
ClockwiseRadial only. Reverses direction.
TargetsWhich effects get trimmed: any mix of Fill, Texture, Outline, Glow, Drop Shadow, Inner Shadow, Bevel and Background Blur. Fill and Texture are ticked by default. Unticked effects always draw in full, so you can wipe the Fill while a static Outline frames the whole shape.

The wipe has smooth anti-aliased edges, adds no draw calls, and works with masking, the Animator and button states. Gradients, textures and bevels are revealed exactly as far as the Amount.

NoteTrimming Background Blur hides the blur, but it does not make it cheaper. The panel's blur is still calculated across its whole area whatever the Amount says. Every other effect is genuinely cheaper when trimmed.

Masking

A mask hides whatever its children draw outside it. Use one to keep a scrolling list inside its panel, or to make a square photo come out round.

ModeWhat it does
NoneNo masking.
SimpleHard-edged clipping through Unity's own Mask component. Add that component to the same GameObject.
SoftSmooth-edged clipping, and any side can fade out. Replaces Mask and RectMask2D, so remove those from the object first.
Which to use?Soft looks better and covers the usual case: a scrolling list or panel of Images, UI Shapes and text. You can have as many Soft masks on screen as you like. Pick Simple for a mask inside another mask, a rotated mask, children with custom materials or third-party graphics, or TMP text that needs bevel, glow, lighting or a textured face while clipped.

A shape is clipped by the nearest Soft mask above it. Nesting one Soft mask inside another clips against the inner one only, so content can spill past the outer mask; make the outer one Simple if you need both to clip.

What Soft Clips

Soft also skips rows that scroll fully out of sight, so a long list only costs you what's on screen.

Padding and Softness

Soft mode adds two settings that reshape the clipped area:

Padding
Softness

Each takes four values, for Left, Right, Top and Bottom, so every side can differ:

FieldWhat it does
PaddingPulls that side inward. Negative values push it outward instead, letting children spill past the shape. Corner radii stay as they are.
SoftnessFades that side out over the distance you give it. Softening the top and bottom of a scrolling list is the classic use: rows dissolve at the edges, with no gradient overlay image. A side left at 0 keeps its crisp edge, and two soft sides meet cleanly in the corner between them.

Both belong to the shape itself, so they stay the same across button states and aren't saved into a style. From script they're MaskingPadding and MaskingSoftness.

Maskable, the last field in the module, works in every mode. Turn it off to stop a mask further up the hierarchy from clipping this shape, so a large shadow or glow can spill outside a masked parent. It controls whether this shape is clipped, not whether it clips others.

Clicks & Raycasting

Whether the shape catches pointer events is set at the top of the inspector, next to Selectable. Most shapes show a Raycast Target checkbox. A shape whose Selectable lives on a different UI Shape, such as a child checkmark, shows a Raycast Mode dropdown instead:

ModeWhat it does
Follow (default)Catches nothing itself, but mirrors the parent shape's Highlighted, Pressed and Selected look across the whole parent. That's how a checkmark lights up with its toggle.
OnHit-tests its own bounds and computes its own state.
OffInert, purely decorative.

Hit-testing matches the shape you see, not its bounding rectangle. Rounded, squircle and octagonal corners, slant and taper are all accounted for, so a click just outside a corner falls through to whatever's behind. Drop shadow and glow aren't clickable.

What the shape draws decides whether it catches clicks. Fill, Texture and Background Blur cover the shape's area, so any one of them makes it catch clicks, the way an Image does.

Outline, Inner Shadow and Bevel only draw near the edges, so on their own they catch nothing: a frame or a highlight drawn over your interface never blocks the controls underneath. A shape with a Selectable is the exception. A control has to be clickable everywhere it is shown, so it catches clicks whatever it draws, even when that is only an outline or a look that appears on hover.

This applies to the shape itself only. Children keep their own pointer behavior, so turning Raycast Target off makes the shape click-through without affecting anything parented under it.

Interactive Controls

A UI Shape can be the whole look of a Unity control, so a button, a slider or a dropdown needs no sprites at all. Point the Selectable field at a Button, Toggle, Slider, Scrollbar, Dropdown or Input Field and the shape takes over its visuals.

They all work the same way: the shape restyles itself as you hover, press, check and disable the control, with no sprite swaps. Control Types below covers what's specific to each, and Text Transitions carries the same states to the control's labels.

Setting Up States

  1. Assign a Selectable to the Selectable field, or click Add... to add and assign one in a single step.
  2. Tabs appear: Normal · Highlighted · Pressed · Selected · Disabled. Normal is the shape's main setup; the others override it.
  3. On a state tab, tick the checkbox next to any property to change it there. Unticked properties follow Normal, and unticking one snaps it back. A module's header checkbox is an override too, so you can switch a whole effect on or off for one state.
  4. Set Transition Duration to cross-fade between states. 0 is instant, and fades use unscaled time, so they keep running while the game is paused.

The selected tab is also the live preview, and an orange bar in the left gutter marks everything that differs from Normal, like Unity's prefab override lines. Previews are never saved.

Assigning a Selectable sets its Transition to None and turns Raycast Target on. Assigning one you already have, with the picker or by drag and drop, leaves its Navigation as you have it. Controls created from the GameObject > UI menu or the Add... button have their Navigation set to None.

Precedence matches Unity's: Disabled > Pressed > Selected > Highlighted > Normal.

Moving States

The Transform module lets a state move, turn and resize the shape, so a button can sink a little when pressed or grow under the pointer. It appears once a Selectable is assigned.

PropertyWhat it does
OffsetMoves the shape sideways and up or down, in canvas units.
RotationTurns the shape, in degrees.
ScaleResizes the shape. 1 is its resting size, 1.05 is five percent bigger.

All three are changes on top of the Rect Transform, not replacements for it, so you can move or lay out the shape later and every state still works. That's why they're read-only on the Normal tab: Normal is whatever the Rect Transform already holds. They cross-fade with the rest of the look over Transition Duration, and anything parented to the shape, like a button's label, moves with it.

LimitationDon't rotate a shape that uses Soft masking. Switch that shape's Masking to Simple instead.

Control Types

Every control below drives its states through the same tabs. What changes is which parts you get to style, and where each one's states come from.

A control's sub-parts, like a slider handle or a dropdown arrow, share the control's Selectable. They light up together with it, across its whole area, using the Follow raycast mode.

This works in your own layouts too. Give several shapes the same Selectable, such as a background and a separate icon, and they change state together across the whole button. It holds even when the Selectable sits on a plain parent object rather than on a UI Shape, which is common when a button prefab keeps its Button on an empty root.

Button

The shape itself is the button. Nothing else to wire up.

Toggle

A Toggle adds an Off | On bar above the state tabs, so the unchecked and checked looks are authored separately. Off/Normal is the base; On/Normal is the checked resting look.

An On state falls back to On/Normal, then to the matching Off state, then to the base, so you only override what actually differs when checked. Checking cross-fades with the same Transition Duration, including changes made from code or by a Toggle Group.

Adding a Toggle also creates a child Checkmark shape driven by the same Toggle. That's the pattern for any shape checkmark: give the child the same Toggle as its Selectable and author its On and Off looks.

NoteA UI Shape can't go in the Toggle's own Graphic field, because it isn't a uGUI Graphic. Use that field only for a plain Image checkmark that Unity fades for you.

Slider

The track, the Fill and the Handle are three separate shapes, each with its own effects and state looks. Style the handle on its own to make it stand out on hover.

Scrollbar

Same split as the Slider: a track shape and a Handle shape. Unity resizes the handle to match how much content fits, so leave its length to the Scrollbar and style the rest.

Dropdown

The closed control and the drop-down list are separate hierarchies. The list's Template and its Viewport are ordinary shapes, and each row carries its own Toggle, so a row has the full Off and On columns: On is the currently chosen option.

NoteHovering a row makes it Selected, not Highlighted, because TextMeshPro selects the row under the pointer. Put a row's hover look on the Selected tab.

Input Field

The shape is the text box. While the field has focus it sits in the Selected state, which is where a focus ring or a brighter outline goes.

Scroll View

A Scroll View has no Selectable of its own, so its background shape has no state tabs. Its scrollbars do, and its Viewport uses Soft masking, so the corner radius you give the viewport is the shape the content clips to.

Text Transitions

When a button inverts its fill on hover, its label often needs to change with it to stay readable. Text Transitions applies the shape's states to the TextMeshPro labels on it and beneath it. It sits at the bottom of the inspector, once a Selectable is assigned.

Each label gets its own module there, appearing and disappearing as you add and remove labels.

PropertyWhat it does
Text ColorThe color the label takes in this state.
Font StyleB bold, I italic, U underline, S strikethrough, and ab lowercase, AB uppercase, SC small caps, the same buttons TextMeshPro itself uses.
SpacingThe character, word, line and paragraph spacing the label uses in this state.
OffsetMoves the label, in canvas units.
RotationTurns the label, in degrees.
ScaleResizes the label. 1 is its resting size, 1.05 is five percent bigger. Text stays crisp at any scale, and the line breaks don't move.

Color, font style and spacing are the label's actual values: a state sets what the label is, and the Normal tab shows what it already holds. Offset, Rotation and Scale work like the shape's own Transform settings instead, as changes on top of the label's Rect Transform, so you can still move or lay the label out afterwards and every state keeps working.

Text Color, Offset, Rotation and Scale cross-fade with the shape over Transition Duration. Font Style and Spacing snap instead, because changing either makes the label lay itself out again, which is fine once per state change but too expensive every frame of a fade.

Reusable Styles

Any tab, Normal or a state, can save its settings as a style asset and load them onto other shapes. The Style field at the top of each tab is the picker.

A style saved from Normal is a complete look, so loading it onto a state tab overrides every property there. A style saved from a state tab stores only that state's overrides. Load it onto another button and it changes just those properties, leaving the rest to follow that button's own Normal. That's what makes one shared hover or pressed style work across buttons that look nothing alike.

Styles are an authoring tool. The link between a shape and its style is an editor one, so it costs nothing in a build and deleting a style asset never breaks a shape. To swap looks at runtime, keep a reference to the asset and call shape.ApplyStyle(asset), which copies its settings across without changing the asset.

Animation & Scripting

Every setting is a plain serialized field, so the Animator can drive it directly: corner radius, colors, shadow distance, anything. Animated values sit under state overrides, so animation drives the base look and states override on top.

From code, every setting is a property in the PrizmGames.UIShapes namespace. Set one and the shape updates itself, with nothing else to call:

using PrizmGames.UIShapes;

var shape = GetComponent<UIShape>();
shape.CornerRadius      = 24f;
shape.FillColor         = Color.white;
shape.Glow              = true;
shape.DropShadowOpacity = 0.6f;
shape.BorderMode        = BorderMode.Round;
shape.CornerStyle       = CornerStyle.Squircle;

shape.Progress          = true;      // radial timer
shape.ProgressAmount    = timeLeft / duration;

Each property is named after the field it matches in the inspector, and your IDE shows the same description as the tooltip.

From code you change how the shape looks now. The per-state looks a Selectable drives are authoring data: build those on the state tabs, or in a style asset, and they blend on top of whatever you set.

Cost of Setting Properties

Two things are free, so you can write the straightforward code:

Performance & Platforms

Each enabled effect draws one quad in a single pass, and effects of the same kind batch together across the whole canvas. However many shapes a canvas holds, it costs at most one draw call per kind of effect in use. There are no blur passes, no render textures and no per-frame memory churn.

PC and Console

On PC, Mac, PlayStation and Xbox, UI Shapes is not a budget item. Every effect is too cheap to time reliably there, and that holds when you stack effects on a shape or fill a screen with shapes. Even Background Blur, the one effect worth thinking about on mobile, disappears into the noise at every quality setting.

Design for looks first. The charts below are for mobile and Switch, on a deliberately unforgiving scale. An orange bar means "the most expensive thing in this asset", not "expensive".

Overall Impact

Typical UI built with UI Shapes, as a share of a frame's GPU budget. Here the full track is the whole frame, so short bars are the point:

PC / Consolenegligible
Mobile / Switchworth a budget

Mobile and Switch have real budgets, so the rest of this section is written for them. The guidance is simple, and following it costs you nothing visually.

Cost Per Effect

Relative GPU cost of each effect on its own, on a mobile-class GPU:

Background Blur (High)
Background Blur (Medium)
Beveldraws twice
Inner Shadowscales with Radius
Background Blur (Low)still reads as blur
Texture
Drop Shadowscales with Radius
Fill
Soft mask (per child)
Outline
Glowscales with Radius
Progressno extra quad

Bevel is the heaviest of the ordinary effects, because it draws two quads: a highlight and a shadow. Drop Shadow and Inner Shadow cost in proportion to their Radius, so read them as one band rather than a ranking. A shape with both Fill and Inner Shadow costs less than the two bars added together, because the two are drawn as one. Glow is the cheapest of the soft effects: per pixel it costs about the same as a plain Fill, though it still covers more ground as its Radius grows. Everything below Bevel is cheap enough to use freely at ordinary button and card sizes, even on mobile.

Skewed Shapes

Slanting a shape is free. The slant is built into the shape's geometry, so it draws at the same cost as the upright version and the chart above applies to it unchanged.

No Effects
All Effects
All Effects + Even Effect Width
Even Effect WidthWhen enabled every pixel then has to work out where the slanted edges and corners really are. Expect three to six times the shape's usual cost, depending on which effects it carries.

Leave it off on effect-heavy mobile and Switch screens, and on any shape whose slant is gentle enough that you can't see the difference.

A Mirrored or Custom slant costs a little even with the setting off, because the shape narrows across its width. A Parallel slant is free either way.

Budgeting Background Blur

Blur is the one effect that can dominate a mobile frame. On PC and console it's free in practice, but on a mobile-class GPU, Switch included, a large panel can cost more than every other effect combined. Your levers, in order of impact:

Blur suits menus and dialogs on any platform. Budget it before putting it on a permanent HUD.

Stacking Effects

On the same scale as the chart above:

1 effect
3 effects
6 effects

Effects add up, plus a little: six on one shape cost about half again as much as the same six spread out, because each is another transparent layer over the same pixels. Two effects on many elements is cheaper than six on a few.

Many Shapes

As you add shapesWhat happens
CPUFlat. Going from a handful of shapes to a screen full of them, with all of them animating a color every frame, does not move CPU time noticeably.
Draw callsNearly flat. Shapes using the same effect batch together, so a screen of overlapping three-effect shapes adds far fewer batches than shapes.
GPUAdds up with painted area. Transparent UI never occludes, so every effect pixel is paid for whether it ends up visible or buried.

The count of shapes is rarely the problem. The total area your effects paint almost always is. A drop shadow on every row of a long list is the classic way to run out of budget on mobile; the same shadow on the list container costs a fraction of it.

Platform Notes

Troubleshooting

SymptomFix
"Shader not found" in the consoleThe files under UI Shapes/Shaders/ were moved or deleted. Reimport the package.
Background Blur does nothing on URPAdd the UI Shapes Background Blur Feature to your URP Renderer asset. The inspector shows the same reminder.
Background Blur shows a sharp backgroundUnity cached a stale shader compile. Right-click UI Shapes/Shaders and choose Reimport.
Background Blur doesn't blur other UI on URP / HDRPBy design, since the capture is taken after the camera finishes. Only Built-in blurs same-canvas UI.
Effects invisible in VRThe canvas is Screen Space – Overlay. Switch it to World Space.
Button states don't apply in play modeCheck that a Selectable is assigned and its own Transition is None. The inspector hints at both.
TMP text isn't clipped by a Soft maskThe TMP integration compiles only when a TMP package is installed. Check that TMP is present in the project.
Soft-clipped TMP text is missing bevel / glow / lightingBy design: clipped text uses a Mobile Distance Field shader, which keeps face, outline and underlay. Use Simple masking if you need the full feature set.
A child Image or RawImage isn't soft-clippedGraphics with a custom material are skipped deliberately. Remove the custom material, or use Simple masking.
A child isn't clipped by Simple masking, Mask or RectMask2DCheck Maskable on that child. Stencil and rect clipping only apply to graphics that have it on.
Hidden objects named [UIShape] …The internal effect renderers. They're never saved into your scene or prefab and rebuild automatically, so don't edit them.

Using UI Shapes as a UPM Package

The UI Shapes folder is also a UPM package (com.prizmgames.uishapes). To reference it from another project, add this to that project's Packages/manifest.json:

"com.prizmgames.uishapes": "file:../path/to/UI Shapes/Assets/UI Shapes"

Contact & Support

Questions, bug reports and feature requests are all welcome. Email support@prizmgames.net.

For a bug report, please include your Unity version, the render pipeline you're using (Built-in, URP or HDRP), the UI Shapes version, and the steps to reproduce the problem. A screenshot or a small repro scene helps a lot.