Im not sure if this will work, I haven't actually tested it.
public abstract class KeyInputController{
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.