- Home /
Why is my character rotating without input?
For some reason my character, when I press A or D (turn left or right controls) it will rotate as intended. However when I let go of A or D the rotation is continued to be applied (IE the character keeps turning).
As far as I'm aware there are no functions being called that touch the player's rotation outside of the Input functions. On A or D input, rotation is applied to the character in that direction (accessing the value of the GetAxis to get the direction). However when input is released (IE keys are no longer being pressed, and GetAxis returns '0') rotation SHOULD stop, as the function that causes the rotation is no longer called. Yet the character still turns?
I'm at a loss as to why this is happening so any help is greatly appreciated!
Below is snippets of the code I am using;
public class PlayerController : MonoBehaviour
{
.
.
.
private bool yaw = false;
private float yawDir = 0.0f;
.
.
.
private void GetInput()
{
if (Input.GetButtonDown("Fwd"))
{
}
else if (Input.GetButtonDown("Back"))
{
}
if ((Input.GetAxis("Yaw") > 0 || Input.GetAxis("Yaw") < 0) && Input.GetAxis("Yaw") != 0)
{
yawDir = Input.GetAxis("Yaw");
yaw = true;
ApplyNewHeading(newHeading);
}
else if (Input.GetAxis("Yaw") == 0)
{
//ApplyNewHeading(0);
yaw = false;
yawDir = 0.0f;
}
}
.
.
.
private void ApplyNewHeading(float newHeading)
{
if (yaw)
{
transform.Rotate(0, yawDir * shipClassHandler.GetMaxTurnRate() * Time.deltaTime, 0);
}
}
Answer by NeoKuro · Jan 24, 2016 at 09:55 PM
The cause of the issue is something to do with my input being detected in an Update() function, whereas the actions were being performed in a FixedUpdate() function, the values I assume were not being properly returned in the
if(Input.GetAxis("Yaw")){}
statements, something to do with checking floating point values equal to 0 in c#. A work around that seems to work just as fine (if not better as there are fewer things to type) is
if(Input.GetButton("Yaw"))
{
}
this will perform the actions every frame whilst the button is pressed (much like GetKey() but without the need to specifically define the key) leaving the fixedUpdate() function to do its business!
Your answer
Follow this Question
Related Questions
Making a bubble level (not a game but work tool) 1 Answer
Multiple Cars not working 1 Answer
Why the player is not rotating and moving at the same time ? 0 Answers
Distribute terrain in zones 3 Answers
How to create 2D random movement? 1 Answer