Game Engine Issues May 24, 2026

Unity 6 Input System Glyph Table Shows Wrong Steam Deck Buttons in Fest Demo - How to Fix

Fix Unity 6 fest demos when Input System glyph tables show wrong Steam Deck buttons. Steam Input activation, binding paths, control schemes, 1280x800 proof, and unity_glyph_table_receipt_v1.json.

By GamineAI Team

Unity 6 Input System Glyph Table Shows Wrong Steam Deck Buttons in Fest Demo - How to Fix

Problem: You shipped glyph_table_v1.json from the Unity 6 glyph-table evening tutorial. Keyboard prompts look correct on PC. On Steam Deck at 1280×800, players see B/Y swapped, generic Xbox art, or keyboard # icons while holding a gamepad.

Who is affected now: Micro-studios uploading May–October 2026 fest demos. Reviewers cold-boot the Deck build, expect Move / Confirm / Pause parity with hardware, and fail you when UI still keys off Editor keyboard paths or an inactive Steam Input action set.

Fastest safe fix: Activate Steam Input gameplay set on boot → refresh prompts from PlayerInput’s active control effectivePath (not last-known keyboard) → add a SteamDeck control scheme row in your Input Actions asset → re-run the 1280×800 proof table from the tutorial → file unity_glyph_table_receipt_v1.json before depot promotion.

Direct answer

The JSON table is only as correct as the binding path string you look up. If your UI resolver runs before Steam Input activates, or always reads the keyboard binding while Gamepad.current is active, Deck players see the wrong sprite even though gameplay bindings work. Fix lookup timing and path source, then verify on Deck hardware—not the Windows Editor with an Xbox pad.

Why this issue spikes in 2026

  1. The site’s first glyph-table tutorial shipped in May 2026—teams copied JSON without the U3 1280×800 gate.
  2. Steam Client autumn refresh changed when default action sets apply—glyph queries can run too early (Steam Input first-launch help).
  3. Deck Verified tightened elite/Series 2 glyph parity when you mix Steam PNGs with custom atlases (elite glyph help).
  4. Fest reviewers use Bluetooth pads; Editor XInput tests lie about which effectivePath appears.

Non-repetition: Layout detection help covers theme switching without glyph_table_v1.json. This article owns fest JSON table + Deck proof failures.

Symptoms and search phrases

  • glyph_table_v1.json present; UI shows keyboard sprites on Deck.
  • South/East buttons swapped vs physical Deck labels.
  • Generic Xbox glyph while using custom atlas rows.
  • Prompts correct after opening Steam overlay, wrong on cold boot.
  • Frame Debugger: Image.sprite never changes when swapping keyboard ↔ gamepad.
  • Metadata upload passed; in-game prompts still fail review.

Root causes (check in order)

  1. Lookup uses keyboard path while gamepad is active.
  2. Steam Input action set not activated before first prompt bind.
  3. Missing SteamDeck control scheme—only Keyboard&Mouse + generic Gamepad.
  4. Table keyed by action name instead of binding path (collisions on multi-bind actions).
  5. Stale effectivePath cached at scene load; never refreshed on onControlsChanged.
  6. B/Y sprites authored for Xbox layout, not Deck/Nintendo mental map.
  7. Fest build strips StreamingAssets/glyph_table_v1.json (wrong inclusion in build profile).

Fastest safe fix path

Step 1 — Confirm table loads in player build

  1. Build Windows or Linux player (Deck tests use Linux player when possible).
  2. Log Application.streamingAssetsPath + "/glyph_table_v1.json" exists.
  3. Parse JSON once at boot; log entries.Count.

Fail: File missing → add to StreamingAssets and verify Player Settings → included assets.

Step 2 — Activate Steam Input before glyph bind

If you use Steam Input (recommended for fest Deck cert):

  1. Defer SteamInput.Init until after first frame (see first-launch help).
  2. Call ActivateActionSet for gameplay handle explicitly on boot.
  3. Only then run your prompt refresh pass.

Pass: Cold boot on Deck moves character and prompts update without opening overlay.

Step 3 — Lookup by effectivePath, not action name alone

In Input System debugger, select Interact while pressing gamepad South on Deck:

<Gamepad>/buttonSouth

Your lookup must use that string:

void RefreshPrompt(PlayerInput pi, string actionName, Image img)
{
    var action = pi.actions[actionName];
    var control = pi.GetDeviceForPlayerIndex(0) is Gamepad
        ? pi.GetDeviceForPlayerIndex(0)
        : Keyboard.current;
    var binding = action.GetBindingIndexForControl(control);
    if (binding < 0) { ApplyFallback(img); return; }
    var path = action.bindings[binding].effectivePath;
    var entry = GlyphTable.Current.FindByPath(path);
    img.sprite = entry != null
        ? LoadSprite(entry.sprite_address)
        : LoadSprite(GlyphTable.Current.fallback_glyph_id);
}

Subscribe to PlayerInput.onControlsChanged and InputSystem.onDeviceChange—re-run RefreshPrompt for visible HUD.

Beginner mistake: Hardcoding "<Keyboard>/e" in UI because that is what you typed in JSON during Editor tests.

Step 4 — Add Deck-friendly rows in glyph_table_v1.json

For each prompted action, include both paths when PC keyboard is supported:

{
  "action": "Player/Interact",
  "binding_path": "<Gamepad>/buttonSouth",
  "glyph_id": "deck_a",
  "sprite_address": "Glyphs/deck_a"
},
{
  "action": "Player/Interact",
  "binding_path": "<Keyboard>/e",
  "glyph_id": "key_e",
  "sprite_address": "Glyphs/key_e"
}

Use Deck-labeled art for deck_* sprites (South = confirm, East = cancel in Nintendo layout). Do not reuse Xbox B/Y art for Deck rows if reviewers flag swaps.

Step 5 — Control schemes in Input Actions asset

  1. Open Input ActionsControl Schemes.
  2. Add SteamDeck (or map under Gamepad with Deck-specific bindings if you split schemes).
  3. Ensure PlayerInput default map switches to Gamepad when Gamepad.current != null.
  4. Optional: use Device requirements on scheme for Deck product strings from layout-detection help.

Pass: Switching keyboard ↔ controller in Editor updates prompts without scene reload.

Step 6 — 1280×800 proof session (Gate U3)

  1. Player resolution 1280×800 borderless.
  2. Photograph or screenshot prompt row: Move, Confirm, Pause, Menu.
  3. Compare to proof table in glyph tutorial.
  4. Repeat on physical Deck after Steam install of fest demo branch.

Store PNGs in release-evidence/unity/input/screenshots/.

Step 7 — unity_glyph_table_receipt_v1.json

{
  "schema": "unity_glyph_table_receipt_v1",
  "build_label": "unity-fest-2026-05-24-rc1",
  "glyph_table_path": "StreamingAssets/glyph_table_v1.json",
  "deck_proof_resolution": "1280x800",
  "steam_input_gameplay_set_active_on_boot": true,
  "glyph_lookup_mode": "effectivePath",
  "gates": {
    "U2_table_complete": true,
    "U3_deck_proof": true,
    "U5_receipt_filed": true
  },
  "pass": true
}

Pair with Wednesday demo smoke — add BUILD_RECEIPT column glyph_table_pass=Y.

Verification checklist

  • [ ] Cold-boot Deck: gameplay + prompts work without overlay visit.
  • [ ] effectivePath log on Deck shows <Gamepad>/buttonSouth for Confirm.
  • [ ] No keyboard sprites while gamepad active.
  • [ ] 1280×800 screenshots match proof table.
  • [ ] unity_glyph_table_receipt_v1.json filed under release-evidence/unity/input/.
  • [ ] October fest metadata upload completed (Next Fest Input checklist).

Prevention

  1. Run U1–U5 gates from tutorial on every build_label.
  2. CI screenshot diff at 1280×800 (even one HUD row).
  3. Never promote fest branch until glyph_table_pass=Y in BUILD_RECEIPT.
  4. Pin Input System package version in receipt.
  5. Cross-link QA with 16 Deck glyph tools listicle.

Troubleshooting

Symptom Fix
Correct in Editor, wrong on Deck Test Linux/Deck build; fix effectivePath
Swapped B/Y only Separate deck_* sprites; do not reuse Xbox B/Y
Generic Xbox icon Steam PNG path vs atlas—pick one; fix elite VDF if Steam path
Fixed after overlay First-launch Steam Input activation (Step 2)
Table parse error Validate JSON; BOM-free UTF-8

FAQ

Should I use Steam PNG glyphs or custom sprites?
Custom glyph_table is fine for fest demos if Deck proof passes. Native Steam PNG path is alternate—see elite glyph help if mixing APIs.

Does this replace the layout-detection article?
No—that article helps without JSON tables. Use both if you ship glyph_table_v1.json.

Keyboard prompts on Deck desktop mode?
Valid—keep keyboard rows; gamepad rows must win when Gamepad.current is active.

Unity 6 only?
Written for Unity 6 Input System lockfiles in 2026; verify package version in manifest.

Related links

Log effectivePath on Deck before you re-export another glyph_table_v1.json—most swaps are a wrong string, not wrong art.