Quick answer: Unity Input System rebind persistence missing the actual control after restart? Save format must include both action ID and binding path - use SaveBindingOverridesAsJson.

Player rebinds Jump. Restart; binding shows the action but no input.

Use built-in save

string json = playerInput.actions.SaveBindingOverridesAsJson();
PlayerPrefs.SetString("binds", json);

Library-provided; correct format.

Restore on launch

LoadBindingOverridesFromJson at startup. Bindings restored before first input.

Avoid manual binding paths

Don't construct binding paths yourself. The library's format is forward-compatible.

“Rebind state has structure. Use the library's serializer.”

If you rolled your own rebind save, replace with the built-in serializer. Forward-compatibility is the gain.

Related reading