Hello,
I've been working on a rebind system for my game's input system. I'm only allowing the player to rebind "action" controls (jump, melee, shoot, etc), but not the movement. I have both the WASD and the Arrow Key options enabled for movement, so the player can use whichever they prefer. I also want to prevent the player from rebinding Escape (pause button).
So, my problem is that I don't know how to prevent the player from rebinding a movement key when rebinding a new input. To my rebinding code, I added:
.WithControlsExcluding("Mouse")
.WithControlsExcluding("Gamepad")
.WithControlsExcluding("Joystick")
.WithControlsExcluding("/escape")
.WithControlsExcluding("/w")
.WithControlsExcluding("/a")
.WithControlsExcluding("/s")
.WithControlsExcluding("/d")
.WithControlsExcluding("/upArrow")
.WithControlsExcluding("/downArrow")
.WithControlsExcluding("/leftArrow")
.WithControlsExcluding("/rightArrow")
Now, this does prevent other devices from being rebinded (mouse, gamepads and joysticks). However, when I try to rebind one of the excluded keyboard keys, instead of doing nothing, the game will rebind the selected control to "Any Key".
Is there a way I can prevent this? For it to not rebind the key at all if one of these keys is pressed, and instead switch on a condition?
For example:
If the player tries to rebind a movement key, it won't rebind at all, but makes the player rebind again, but also sets a boolean to true.
(I wouldn't mind being able to do this for the excluded devices too)
Here's my rebinding code in full:
if (changing) //If a button is being rebinded
{
rebindingOperation = playerControls.GetComponent().actions["Shoot"].PerformInteractiveRebinding(0)
.WithControlsExcluding("Mouse")
.WithControlsExcluding("Gamepad")
.WithControlsExcluding("Joystick")
.WithControlsExcluding("/escape")
.WithControlsExcluding("/w")
.WithControlsExcluding("/a")
.WithControlsExcluding("/s")
.WithControlsExcluding("/d")
.WithControlsExcluding("/upArrow")
.WithControlsExcluding("/downArrow")
.WithControlsExcluding("/leftArrow")
.WithControlsExcluding("/rightArrow")
.OnMatchWaitForAnother(0.1f)
.OnComplete(operation => RebindComplete()).Start();
changing = false; //Ensure the rebinding process doesn't repeat
}
Is there also a way to rebind certain actions manually through script, without the player pressing something? When I create a way to rebind gamepads inputs, I plan to link gamepad and joystick inputs together (i.e. if one action is rebinded to Button South on a Gamepad, it'll automatically rebind the Joystick binding of that same action to button3 as well.
Thanks in advance.
↧