Rebind - Excluding Certain Keys
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("<keyboard>/escape")
.WithControlsExcluding("<keyboard>/w")
.WithControlsExcluding("<keyboard>/a")
.WithControlsExcluding("<keyboard>/s")
.WithControlsExcluding("<keyboard>/d")
.WithControlsExcluding("<keyboard>/upArrow")
.WithControlsExcluding("<keyboard>/downArrow")
.WithControlsExcluding("<keyboard>/leftArrow")
.WithControlsExcluding("<keyboard>/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<PlayerInput>().actions["Shoot"].PerformInteractiveRebinding(0)
.WithControlsExcluding("Mouse")
.WithControlsExcluding("Gamepad")
.WithControlsExcluding("Joystick")
.WithControlsExcluding("<keyboard>/escape")
.WithControlsExcluding("<keyboard>/w")
.WithControlsExcluding("<keyboard>/a")
.WithControlsExcluding("<keyboard>/s")
.WithControlsExcluding("<keyboard>/d")
.WithControlsExcluding("<keyboard>/upArrow")
.WithControlsExcluding("<keyboard>/downArrow")
.WithControlsExcluding("<keyboard>/leftArrow")
.WithControlsExcluding("<keyboard>/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.
Your answer
Follow this Question
Related Questions
Input keys not working ! please help me,Can't use input keys ! please help me ! 0 Answers
How to get the keyboard to work with Voice Over on iOS? 0 Answers
Custom keyboard layout for mobile game. 1 Answer
How does Input.anyKey work? 0 Answers
Is it possible to get input from bluetooth keyboard on iOS? 0 Answers