Alternatives for Input.GetButton?
if (Input.GetButton("Horizontal") || Input.GetButton("Vertical"))
{
float moveHorizontal = Input.GetAxisRaw ("Horizontal");
float moveVertical = Input.GetAxisRaw ("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(movement), 0.15F);
//transform.rotation = Quaternion.LookRotation(movement);
transform.Translate (movement * moveSpeed * Time.deltaTime, Space.World);
}
With the code inside the if statement, I'm trying to make the game object move around with movement keys and analog stick on the gamepad, and it will always face the direction it is moving. This part of the code works fine.
The problem is the if statement. From what I've discovered, you can't use the analog sticks on a gamepad as input for Input.GetButton. This code only works if you press down a button or key for movement, like WASD or the arrow keys. Probably something to do with the fact that the analog stick is an axis, not a button. (Side note, GetAxis doesn't work in this format because it's a float, not a boolean)
But I can't take away the if statement, because I want the object to keep the direction it is facing after it stops moving. Without the if statement, the Y rotation just resets back to 0.
Is there a way to fix this if statement so that it works with analog sticks, or is there a different way I can go about fixing this?
Answer by M4koren · Mar 14, 2017 at 09:46 PM
Finally figured it out myself. I ended up grabbing input from the gamepad from outside the if statement, then used the variables it was stored in as boolean arguments for the if statement.
Here's my solution:
float moveHorizontal = Input.GetAxisRaw ("Horizontal");
float moveVertical = Input.GetAxisRaw ("Vertical");
if (moveHorizontal > 0 || moveHorizontal < 0 || moveVertical > 0 || moveVertical < 0)
{
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(movement), 0.15F);
//transform.rotation = Quaternion.LookRotation(movement);
transform.Translate (movement * moveSpeed * Time.deltaTime, Space.World);
}
Your answer
Follow this Question
Related Questions
3D Top Down shooter mouse follow inaccurate at some angles 0 Answers
Have 3 raycast rays on a capsule and rotate them correspondingly 0 Answers
Trying to make my camera rotate using gamepad 0 Answers
How to set up the right controller stick 0 Answers
Right thumbstick (Rz) drift - camera moves on its own 3 Answers