Ali Şahan Yalçın
DocsSteam Input

More features

Steam Input

Action sets, button prompts, controller effects and Enhanced Input.

Steam Input works in actions, not buttons. You ask for "jump" and Steam resolves whatever the player bound it to on whatever device they are holding. Remapping, radial menus, gyro and community configs then come for free, because they happen on Steam's side.

You need an action manifest first

WARNING: Steam Input needs a game_actions_<appid>.vdf file describing every action set and action before a single handle resolves. Without one, every action handle comes back as 0 and nothing responds, which looks exactly like the plugin being broken. This is the most common Steam Input question there is.

SteamForge gives you a SteamForge Action Manifest data asset so you do not have to hand write that file:

  • Create the asset in the Content Browser.
  • Add your action sets, and the digital and analog actions inside them.
  • Generate the file from the asset.
  • Use Validate Manifest before generating. It catches the mistakes that fail silently at runtime, like a space in an API name, which the file format accepts and your lookups will never match.

    Shipping still means uploading the manifest through the partner site, because a published app's manifest is read from Valve's servers rather than the player's disk.

    Run Get Setup Diagnostics on the SteamForge Input subsystem at any time to see what Steam can and cannot see.

    Reading input

    NodeWhat it does
    Get Connected ControllersEvery pad Steam can see
    Get Action Set / Activate Action SetSwitch the whole active set
    Get Digital Action / Get Digital Action StateA press or not
    Get Analog Action / Get Analog Action StateA continuous value
    Get Device TypeWhich kind of pad, for prompts

    Look handles up once and keep them. The lookups are string keyed and doing them every frame for every action shows up in a profile.

    Button prompts

    Get Digital Action Origins and Get Analog Action Origins tell you what an action is currently bound to, ready to draw:

    FieldMeaning
    Display NameThe control's name, already translated to the player's Steam language
    Glyph Svg PathAn SVG glyph on disk
    Glyph Png PathA PNG glyph at the size you asked for

    Add Get Digital Action Display Name for the action's own name, and you have everything a rebinding screen needs.

    Refresh prompts when On Configuration Loaded fires. Origins resolve against whatever layout was current when you asked, so anything cached before that event is showing the wrong buttons.

    Events

    EventWhen
    On Controller ConnectedA pad appeared
    On Controller DisconnectedA pad went away
    On Configuration LoadedThe player's bindings changed
    On Gamepad Slot ChangedSteam moved a pad to a different slot
    INFO: Drop cached handles on disconnect rather than testing them. Steam reuses handle values for later devices, so a stale handle does not read as invalid, it quietly starts referring to somebody else's pad.

    Rumble and lights

    Trigger Vibration, Trigger Vibration Extended, Set LED Color and Reset LED Color, plus Get Motion State for gyro.

    DualSense adaptive triggers

    Five effects, all taking a controller and which trigger to affect:

    NodeFeels like
    Clear Trigger EffectOff
    Set Trigger FeedbackConstant resistance from a point onward: a heavy lever
    Set Trigger WeaponResistance that gives way: a gun trigger breaking
    Set Trigger VibrationVibration around a point: an engine, automatic fire
    Set Trigger SlopeResistance ramping between two points: a bow drawing

    Call Clear Trigger Effect when leaving the state that set one. Effects persist on the pad until replaced, so a bow draw effect left running follows the player into the menu.

    Enhanced Input

    You do not have to choose between Steam's binding UI and Unreal's Enhanced Input.

    Add a SteamForge Enhanced Input Bridge component to your PlayerController and fill in the bindings, pairing a Steam action name with an Enhanced Input action. Steam resolves the hardware, Enhanced Input receives the result as if it came from a regular device, and your triggers, modifiers and the input debugger all work unchanged.