# 6. Prompt and Onboarding Pitfalls Part of [[Context-Sensitive Prompts and Onboarding]]. Prev: [[5. Worked Example Door Prompt]]. ## Hard-coded "Press E" If the string lives in a texture, a Timeline card, or a `const`, rebinding cannot reach it. Always go through `GetBindingDisplayString` (or a sprite chosen from `controlPath`). World decals of a keyboard key are the same bug in 3D. ## Stale glyphs after a rebind If you do not refresh on override save, device change, and scheme change, the prompt lies. Hook `PromptBindingWatcher.RaiseRefreshed` from the rebind UI in [[3. Runtime Rebinding]]. Do not poll every frame as a substitute for missing a hook. ## `PanelRenderer` has no `rootVisualElement` Query elements inside `RegisterUIReloadCallback`, and guard on the `version` parameter as the official sample does. Unregister on destroy. `UIDocument.rootVisualElement` is the older hook; do not assume both components exist on the same object in 6000.5. ## Missing default sprite asset Rich-text `<sprite>` tags render as empty or as raw markup if the Panel Text Settings sprite-asset path is wrong. Prefer a separate `Image` until that pipeline is proven. ## Overlapping Interact listeners Two use volumes both calling `TryUse` on the same button will double-fire. Either the broker's current source is the only listener, or the volumes do not overlap. ## Tutorial first A training room built before the jump, the door, and the rebind UI will be rewritten. Leave it last (Level 9). If a prompt is the first time a verb exists, you have no verb - you have a tooltip. ## Prompt on a VR visor A screen-space "Press A" in the headset is often unreadable or nauseating. Use a world-space panel or a diegetic label ([[8.UI Toolkit for VR]], [[6.Diegetic Terminal and Wrist Display]]). Do not Impulse or parent a flashing HUD chip to the HMD. ## Localization vs glyphs Localize "Open" / "Locked" / "Pick up". Do not localize "buttonSouth". The icon set is art, not a string table. See [[Localization]]. ## Always-on HUD hints If every interactable in a dense room shows a chip, you have a Christmas tree. Context-sensitive means *in range*, and usually *one*. ## Sources - Display bindings (1.20): https://docs.unity3d.com/Packages/[email protected]/manual/display-bindings.html - `PanelRenderer` (6000.5): https://docs.unity.com/en-us/engine/6000.5/script-reference/unityengine/uielements/panelrenderer - [[Level Up! (Review)]] Level 9