- Home /
Is there a way to stop input.getaxis from returning to zero in script, without editing the controls ?
If I change something in Input manager I think it might effect the other scripts that use GetAxis, so is there another way to make it stop returning to center ? I'm trying to set up a basic third person controller and the script is for rotating the player in the movement direction. Currently player turns towards the movement direction but when getaxis returns to zero it goes back to its original rotation. Here is the script;
using UnityEngine;
using System.Collections;
public class CharacterMovement : MonoBehaviour {
Vector3 directionVector;
void Update () {
directionVector.x = Input.GetAxis ("Horizontal");
directionVector.z = Input.GetAxis ("Vertical");
transform.rotation = Quaternion.LookRotation(directionVector);
}
}
Or is there a better way to achieve what I'm trying to do ? Any help is appreciated.
Answer by nathanthesnooper · Aug 31, 2016 at 07:56 AM
if(Input.GetAxis("Horizontal") == 0 || Input.GetAxis("Vertical") == 0) {
return;
}
in beginning of update
Thanks! This works very well except one thing. If one of both inputs stays on 0 I can't control the other one, but I was able to fix this easily by changing || with &&.
Answer by CapitalLlama · Aug 30, 2016 at 06:29 PM
void Update () {
if( Input.GetAxis ("Horizontal") != 0)
directionVector.x = Input.GetAxis ("Horizontal");
if( Input.GetAxis ("Vertical") != 0)
directionVector.z = Input.GetAxis ("Vertical");
transform.rotation = Quaternion.LookRotation(directionVector);
}
You could just check if its not zero before assigning it, but then it will never stop turning until you make a key to stop it.
Your code was close but as you said it still tries to rotate before it reaches back to zero, so I made something like this
void Update () {
if( Input.GetAxis ("Horizontal") == 1.0F || Input.GetAxis ("Horizontal") == -1.0F)
directionVector.x = Input.GetAxis ("Horizontal");
if( Input.GetAxis ("Vertical") == 1.0F || Input.GetAxis ("Vertical") == -1.0F)
directionVector.z = Input.GetAxis ("Vertical");
transform.rotation = Quaternion.LookRotation(directionVector);
}
It rotates perfectly in the first input but then others get a little messed up because I think it stores the last input I did for the next input.
Your answer
Follow this Question
Related Questions
Unity 2D movement and rotate sprite to the direction it is moving in 1 Answer
Editing rotation of an Instantiated object 3 Answers
How to rotate with mouse scroll wheel and new input system? 1 Answer
Help with Quaternion.AngleAxis 1 Answer
Using GetAxis("...") for making 180 degree controls 2 Answers