SettingsNow: Settings Menu and Key Rebinding OFFICIAL SALE

A settings menu that is finished in ten minutes, not in an afternoon.


One line puts it on screen:


SettingsMenu.Show();


No prefab to drag in. No canvas to prepare. No manager component, no scene file, no wizard to click through. The menu builds itself at runtime and takes itself down when the player closes it.



YOUR OWN SETTINGS ARE ONE ATTRIBUTE


This is the part that sets SettingsNow apart. Mark the variable you already have:


[UserSetting("Gameplay", "Mouse Sensitivity", Min = 0.1f, Max = 5f)]

public static float Sensitivity = 1f;


That is the whole thing. The row appears under a Gameplay tab, the value is stored, it is applied again before the first scene of the next run, and your variable always holds what the player chose. Read it exactly the way you did before.


float and double become sliders. int becomes a whole number slider. bool becomes a switch. Any enum becomes a choice of its values, with readable names. The value you wrote in code is the default, so Reset restores exactly that.


Private fields work. Static properties work. There is no registration call anywhere.



WHAT YOU GET OUT OF THE BOX


Audio: master, music and effects. Drives an AudioMixer if you have one, or raises two events you hook up in a line each if you do not.


Display: resolution, window mode, refresh rate, monitor, VSync and a frame rate limit. Rows that mean nothing on the current platform are not drawn, so on WebGL and on phones only the frame rate limit remains.


Quality: the levels from your project settings.


Language: your list, connected to whatever localization you use through one event. No dependency on any localization package.


Controls: full key rebinding for the Input System.



KEY REBINDING THAT SURVIVES CONTACT WITH PLAYERS


Click a row, press a key, done. Escape cancels. What is underneath took longer than it looks:


- Composite parts get their own rows. A WASD stick is four lines, not one unusable entry. Where two rows would read the same, the composite is named: "Move Up (WASD)" against "Move Up (Arrow Keys)".

- Conflicts resolve instead of blocking. Pick an input that is in use and the older binding is cleared, with the footer naming the action that lost it. Refusing every clash sounds safer but is unusable on a gamepad, where every button is taken from the start.

- Unity's own UI action map is never offered. Rebinding Click leaves a player unable to click the button that would undo it, and the broken state would survive a restart. Its inputs still count as taken, so they cannot be stolen either.

- The action is switched off while a row listens, otherwise the very key press being captured also fires the action.

- Mouse position, mouse delta, scroll and anyKey are never captured.

- A rebind gives up after a few seconds and says why, instead of waiting forever for an input that cannot match the selected control scheme.

- Control schemes are rebound separately. Reset one row, one tab, or every binding.


Bindings are stored as the Input System's own override JSON, so a change your player made survives you editing the action asset.



BUILT FOR A GAMEPAD, NOT JUST CLAIMED


Navigation between controls is wired explicitly rather than left to Unity's geometric guessing, which skips a narrow arrow next to a wide label and leaves rows unreachable. Escape and the gamepad B button are routed through the EventSystem, so cancelling works under the old input manager and the Input System alike.



NOTHING TO BREAK


Not one image, material, shader or prefab ships with this package. Built-in, URP and HDRP behave identically because there is nothing pipeline specific in it. Full C# source, no DLLs, no dependencies beyond what Unity already gives you.


The Input System support sits in its own assembly behind a define constraint, so the package compiles and works with that package absent.



SHAPE IT


The setup window holds the heading text, full screen or a window of your size, maximum content width, control width, row, tab and footer heights, three type sizes and six colours. It writes a config asset the first time you change something, which is why the package works straight after import with nothing configured.


What it does not do is draw a menu in your own art direction. If you need that, use SettingsNow for the logic, the storage and the rebinding, and build your own front end on top of its catalogue.



STORAGE


PlayerPrefs by default, under prefixed keys so it cannot collide with your game. A JSON file backend is included, and the backend interface is public, so a cloud save is three methods away. Numbers are written with invariant culture, so a German locale does not turn 0.5 into 0,5 and break the file on someone else's machine.



THE MANUAL IS TEN SECTIONS


Not a hundred and eighty pages. If you find yourself needing more, that is a bug in the tool and I would like to hear about it.


Support: daniel.schnurbusch@web.de