Guide

Game radial menu systems explained

Harbor Siege shipped emotes behind a nested text chat command. In co-op breach runs, players typed /wave while taking fire — social callouts dropped 40% week over week. Moving gestures to a hold-to-open radial wheel with eight sectors cut average emote latency from 4.2 s to 0.6 s and raised ping-plus-emote combos in telemetry. That is a radial menu system: a circular UI that maps discrete actions to angular sectors, selected by stick deflection, mouse angle, or touch drag from a center anchor. Radials trade screen space for muscle memory — one button opens many choices without hunting a linear bar. They pair naturally with emote wheels, weapon swap rings, ability palettes, and ping wheels, but compete with linear hotbars when players need at-a-glance cooldown state. This guide covers wheel taxonomy, the selection pipeline, sector layout and dead zones, combat-time policy, input surfaces, the Harbor Siege refactor, a technique decision table, pitfalls, and a production checklist.

What radial menus change (and what they do not)

A radial reorganizes how the player picks an action, not what the action does. The underlying ability, emote, or weapon swap logic stays identical to a hotbar binding.

Layer Radial changes Does not change
Input mapping Angle + release selects slot instead of direct key press Ability cooldowns, ammo counts, or unlock gates
Screen layout Temporary overlay centered on cursor or character Persistent HUD footprint of a fixed action bar
Motor learning Directional muscle memory (“up-left = heal”) Whether the heal is channeled or instant
Combat pacing Often pauses or slows time while open Enemy AI tick rate outside the menu window

Wheel taxonomy

Not every circle menu is the same interaction. Pick a taxonomy entry per wheel type in your game and document it in your input spec so QA can regression-test each mode.

Mode Open gesture Select gesture Best when Weakness
Hold-to-aim-release Hold modifier or shoulder button Deflect stick; release to confirm highlighted sector Combat wheels; prevents mis-fires on tap Slow for actions needed every 2–3 s
Tap-toggle Single tap opens wheel until second tap Click sector or press bound number Mouse-heavy strategy, inventory wheels Leaves UI open during panic moments
Flick-select Quick stick flick in direction No visible wheel; haptic/audio confirm only Expert players; minimal HUD clutter Opaque to new players without tutorial
Nested ring Outer ring categories; inner ring items Hover outer, then inner; or two-step stick 12+ items (crafting, build menus) Two-step latency; thumb fatigue on gamepad
Contextual slice Only sectors valid for current target appear Same as hold-to-aim Interact wheels on NPCs and objects Layout shifts confuse muscle memory

Harbor Siege uses hold-to-aim-release for combat wheels (weapons, gadgets) with 0.35× time dilation, and flick-select for emotes once players complete a 30-second onboarding vignette. Casual players can revert to hold-to-aim in settings.

Selection pipeline

Treat radial open, highlight, and confirm as a small state machine. Partial states (wheel visible but input still moving the character) are the top source of accidental deaths and desynced emotes in multiplayer.

Typical state flow

  1. Idle — wheel hidden; gameplay input routes to locomotion and camera.
  2. Open requested — validate gate (not stunned, not in cutscene, wheel unlocked).
  3. Opening — play scale-in animation (80–120 ms); optionally apply time scale or input lock.
  4. Highlighting — read pointer angle each frame; map to sector index with hysteresis.
  5. Confirm — on release or accept button, fire bound action and close wheel.
  6. Cancel — release inside dead zone, press back, or take hit — close without action.

Angle-to-sector math

Convert stick or cursor offset (dx, dy) to angle with atan2(dy, dx), normalize to [0, 2π), then divide by 2π / N for N sectors. Apply a center dead zone (radius 15–25% of wheel radius) so slight thumb drift does not jump sectors. Add angular hysteresis of 5–8° at sector boundaries so highlight does not flicker when the vector sits on an edge.

For gamepad sticks, apply a radial dead zone before atan2 — vectors below 0.25 magnitude should map to “no selection” rather than snapping to sector 0. Mouse users benefit from the wheel following the cursor even when it leaves the original anchor; touch users need the anchor locked to the initial press point to avoid drift under the thumb.

Sector layout and visual hierarchy

Sector count and ordering are design decisions, not pure math. Players remember positions, not labels, within a few sessions.

Layout rules that survive playtests

  • Cap at eight sectors on the primary ring unless using nested rings; beyond eight, error rate climbs sharply on gamepad.
  • Put high-frequency actions at cardinal directions (up/down/left/right) — thumbs naturally rest along those axes.
  • Group by category with consistent clock positions — e.g. healing always upper-right across every wheel in the game.
  • Gray out unavailable sectors instead of hiding them; hiding shifts indices and breaks muscle memory.
  • Overlay cooldown sweeps and ammo counts on icons; radials hide state when closed, so sector art must carry status.
  • Label sparingly — icon + 1–2 word tooltip on highlight beats permanent text on every slice.

Align radial visual language with your broader HUD design: same corner radius, glass opacity, and accent color on the highlighted wedge so wheels feel native rather than a modal from another UI kit.

Combat-time policy: pause, slow, or real-time

The biggest feel difference between wheels is whether the world waits. Document a per-wheel policy in your game design doc — mixing policies without UI explanation frustrates players.

Policy World behavior Typical wheels Risk
Full pause timeScale = 0; AI and projectiles freeze Single-player tactics, build menus Breaks immersion in action games; unusable in synchronous PvP
Slow motion timeScale = 0.2–0.5 for 2–4 s cap Weapon swap, consumable wheels in SP/co-op Players exploit slow-mo to aim; cap duration and cooldown open
Real-time No time change; player vulnerable Emotes in safe hubs, quick ping wheels High skill ceiling; new players avoid the feature
Local pause Only opening player slowed; others normal Asymmetric co-op with vote-to-continue Network complexity; feels unfair in PvP

Harbor Siege caps weapon-wheel slow-mo at 2.5 s per open with a 6 s recharge on the slow-mo privilege. Emote wheels in the social hub run real-time; emotes in combat zones use slow-mo only when no enemies are within 12 m, detected via a cheap overlap query before the wheel scales in.

Harbor Siege refactor: three wheels, one input stack

Before refactor, Harbor Siege scattered actions across number keys, a weapon scroll, and chat commands. Console certification failed usability review: players could not emote or ping without a keyboard. The unified RadialDirector shares one pipeline for three wheels:

  • Weapon wheel (hold LB) — six sectors: primary, sidearm, gadget, melee, special, empty. Slow-mo enabled.
  • Emote wheel (hold D-pad down) — eight sectors: callouts, dances, squad cheers. Real-time in hub; conditional slow-mo in combat.
  • Ping wheel (hold D-pad up) — six sectors: enemy, location, loot, defend, group up, cancel. Real-time always; replicates sector index and world target to squad.

Shared code handles open animation, sector highlight, confirm/cancel, and replication. Per-wheel ScriptableObject configs define sector bindings, icons, time policy, and unlock flags. After shipping, mis-weapon swaps in firefights fell 28%, emote usage in co-op rose 3.1×, and certification usability passed on first submission. The main regression caught in QA: opening the weapon wheel while climbing ladders — fixed with a LocomotionTag.BlockRadial gate on mantle and zipline states.

Technique decision table

Problem Prefer radial Prefer linear hotbar Avoid
8+ weapons with no fixed order preference Weapon wheel with slow-mo Scroll cycle on one button Number keys 1–9 on gamepad-only SKU
Abilities used every 3–5 s with cooldown tracking Nested radial only if ≤6 actives Persistent hotbar with sweep overlays Hold-to-open wheel for primary fire skills
Social callouts in co-op Ping + emote wheels, real-time or light slow-mo Text chat with quick phrases Chat-only in voiceless console co-op
Context actions on one interactable Contextual slice wheel (3–5 options) Cycling interact prompt (tap to cycle) Full eight-sector wheel with one active slice
Competitive PvP loadout swap Flick-select with no slow-mo Direct slot keys on PC Pause or slow-mo weapon wheel in ranked
Accessibility: limited thumb range Large sectors + sticky highlight assist Remappable linear bar with focus wrap Flick-only with no hold-to-aim fallback

Common pitfalls

  • Symmetric icons — similar glyphs at adjacent angles cause mis-selects; vary silhouette and color.
  • No cancel path — players must pick something to close the wheel; always allow dead-zone release or B/back.
  • Wheel follows moving camera — anchor to screen center or character, not world space, unless deliberate.
  • Rebinding breaks compass layout — if players remap sectors, show a one-time layout preview.
  • Slow-mo stack overflow — opening a wheel inside another menu with separate time scales compounds; use a single TimeDilation stack.
  • Network confirm without prediction — emotes appear late; predict locally and reconcile animation ID.
  • Tiny touch targets — mobile sectors below 48 dp fail HIG; enlarge outer radius instead of adding sectors.
  • Teaching only in text manual — first open needs animated wedge highlight and forced slow-mo tutorial.

Production checklist

  • Document wheel taxonomy per feature (weapon, emote, ping, interact).
  • Implement shared RadialController with open/highlight/confirm/cancel states.
  • Define dead zone radius, angular hysteresis, and max sector count per ring.
  • Specify combat-time policy per wheel and enforce max slow-mo duration.
  • Gate wheel open on locomotion, stun, and cutscene tags.
  • Gray out locked sectors; never remove slots from the layout mid-session.
  • Author icon + cooldown overlay prefab reused across all wheels.
  • Provide hold-to-aim and flick-select accessibility toggle.
  • Replicate sector index and target entity for multiplayer wheels.
  • Log mis-select rate, time-to-confirm, and cancel rate per wheel type.
  • Certification pass on gamepad-only path with no keyboard fallback.

Key takeaways

  • Radial menus trade persistent HUD space for a hold-to-aim selection gesture.
  • Sector position is the mnemonic — keep layouts stable and cap primary rings at eight slices.
  • Dead zones and angular hysteresis matter as much as icon art for mis-select rate.
  • Harbor Siege unified three wheels under one director and passed console usability after emote latency dropped 85%.
  • High-frequency combat skills belong on hotbars; radials win for occasional swaps and social callouts.

Related reading