Quantcast
Channel: Questions in topic: "keyboard"
Viewing all articles
Browse latest Browse all 605

How to detect value changes in new input system

$
0
0
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(); 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.

Viewing all articles
Browse latest Browse all 605

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>