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?

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);
		}