Im not sure if this will work, I haven't actually tested it.
public abstract class InputControllerKeyInputController{ public char forward = 'w'; public char backward = 's'; public char left = 'a'; public char right = 'd'; //Add more public abstract void moveForward(); public abstract void moveBackward(); //Add functions for each input public void Update() { if(Input.inputString!="") { //only works for first input, //if you want keys within the frame update, //you need to iterate over it, char by char. char input =Input.inputString[0]; if(input == forward) moveForward(); else if(input == backward) moveBackward(); //Add checks for other inputs } } } Now you could write your keybindings to a simple text file. And just set those variables when you read them. ( havn't tried reading text/xml/json files in Unity but im sure it's possible )
The idea here is that the keys are stored in simple variables. Which you could easily change. It should be trivial then to read/write them away. So making an interface in game where you can set your keys shouldn't be a problem either.