"Input.config and AnalogMove for a new game"
▸ SYMPTOM
Input.AnalogMovestays zero despite WASD.- New action in
Input.confignever firesInput.Pressed("MyAction")even thoughdotnet buildis green. - Gamepad bumpers don't bind with
LeftShoulder/RightShouldernames.
▸ CAUSE
ProjectSettings/Input.config is a JSON list of actions. WASD only feeds Input.AnalogMove when actions are named Forward / Backward / Left / Right.
New actions do not register until the editor restarts (or at least a full Play restart that reloads the action list): headless compile success does not reload bindings.
▸ FIX
Schema
Each entry: { Name, GroupName, Title, KeyboardCode, GamepadCode }.
Input.Pressed/Down/Released("name"): case-insensitive; underscores must match.Input.MouseWheelis aVector2;Mouse.Positionis pixels; useScreen.Width/Heightfor math.
Project-standard set
Movement (Forward/Backward/Left/Right) + Run + Jump, Interact (F), Attack1/2 (mouse), Slot1–9, plus game-specific (Build, Admin, …).
Gamepad codes that work
Verified strings include: "A", "B", "X", "Y", "LeftTrigger", "RightTrigger", "LeftJoystickButton", "RightJoystickButton", "DpadNorth" / South / East / West, "None".
Bumpers: "SwitchLeftBumper" / "SwitchRightBumper", not LeftShoulder / RightShoulder. Menu: "SwitchLeftMenu" / "SwitchRightMenu".
Optional: Input.UsingController exists for pad-only feel gates. Prefer engine ConVars for user look sensitivity. Don't override ControllerLookPitchSpeed / ControllerLookYawSpeed from game code.
After editing Input.config
Restart the editor (or fully reload so the action list refreshes). Then Play-test the new binds.
Wish-dir pattern once AnalogMove works:
var wish = Rotation.FromYaw(cameraYaw)
* new Vector3(Input.AnalogMove.x, Input.AnalogMove.y, 0);▸ WHY IT WORKS
AnalogMove is a derived stick built from specifically named digital actions: rename them and the vector dies. The input action table is loaded with the editor session, not with every hotload, so new names need a restart to appear.