- Home /
Question by
AceOfSpades4654 · Jun 17, 2021 at 09:06 PM ·
inputjoystickkeyboardconversionaction
How to detect value changes in new input system
I am converting a joystick into key values. Best way I can think to do this is using the new input system on a joystick such that while moving it you press the according keys wasd
So I have my listeners in the Awake
method:
private void Awake() {
leftHand = allControls.FindActionMap("XRI LeftHand");
rightHand = allControls.FindActionMap("XRI RightHand");
head = allControls.FindActionMap("XRI HMD");
leftHand.actions[13].started += context => IS.Keyboard.KeyDown(WindowsInput.Native.VirtualKeyCode.SHIFT);
leftHand.actions[13].canceled += context => IS.Keyboard.KeyUp(WindowsInput.Native.VirtualKeyCode.SHIFT);
leftHand.actions[3].started += context => IS.Mouse.RightButtonDown();
leftHand.actions[3].canceled += context => IS.Mouse.RightButtonUp();
leftHand.actions[10].started += context => ConvertStickToKey();
leftHand.actions[10].canceled += context => ReleaseKey();
}
So I am using a function called ConvertStickToKey()
which grabs the value of the stick and converts it to the appropriate key. The int
inside of it just releases the key in a switch statement within ReleaseKey()
public void ConvertStickToKey(){
Vector2 stick = leftHand.actions[10].ReadValue<Vector2>();
if(stick.x == 0 && stick.y == 0){
Debug.Log("NA");
return;
}
if((stick.x >= .25 && stick.x <= .75) && (stick.y <= .75 && stick.y >= .25)){
Debug.Log("UR");
lastKeyCase = 1;
IS.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.VK_W);
IS.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.VK_D);
}
else if(stick.x >= .75 && (stick.y <= .25 && stick.y >= -.25)){
Debug.Log("R");
lastKeyCase = 2;
IS.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.VK_D);
//press d
}
else if((stick.x <= .75 && stick.x >= .25) && (stick.y <= -.25 && stick.y >= -.75)){
Debug.Log("DR");
lastKeyCase = 3;
IS.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.VK_S);
IS.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.VK_D);
//press sd
}
else if((stick.x <= .25 && stick.x >= -.25) && stick.y <= .75){
Debug.Log("D");
lastKeyCase = 4;
IS.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.VK_S);
//press s
}
else if((stick.x <= .25 && stick.x >= -.75) && (stick.y <= -.25 && stick.y >= -.75)){
Debug.Log("DL");
lastKeyCase = 5;
IS.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.VK_A);
IS.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.VK_S);
//press as
}
else if(stick.x <= -.75 && (stick.y <= .25 && stick.y >= -.25)){
Debug.Log("L");
lastKeyCase = 6;
IS.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.VK_A);
//press a
}
else if((stick.x <= -.25 && stick.x >= -.75) && (stick.y >= .25 && stick.y <= .75)){
Debug.Log("UL");
lastKeyCase = 7;
IS.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.VK_W);
IS.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.VK_A);
//press wa
}
else if((stick.x <= .25 && stick.x >= -.25) && stick.y >= .75){
Debug.Log("U");
lastKeyCase = 8;
IS.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.VK_W);
//press w
}
return;
}
This... technically works but only triggers when I move the thumbstick. I really want to run this method when the threshold is crossed into the other button variant. Any ideas? I would love some input, if I'm even doing this right.
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220613035131im_/https://answers.unity.com/themes/thub/images/avi.jpg)