- Home /
Rotation Script bug - rapidly alternating between positive and negative rotation
I'm writing a script to rotate an object in my game. It takes the objects starting rotation and adds more rotation to it dependent on the object which is rotating it (so if the object thats rotating it turns 20 degrees, so does the object. The script works fine for rotations between 0-180, but at 181 to about 356 it goes crazy, rapidly flipping the object back and forth as if it was mirroring the object on and off rapidly.
Here's my code - I looked through, and I can't find a flaw with it. Some of the things which may seem unnecessary have probably been added in an attempt to fix this issue.
var turnRot: float; var beingTurned: boolean = false; var fiducial: Transform; var startingRot: float; var modifiedRot: float;
function Update () {
//if this object is selected, find the amount of rotation applied if (beingTurned) { turnRot = fiducial.GetComponent(Movementscript).currentRot;
if (turnRot < 0)
{
modifiedRot = (360 + turnRot);
} else
{ modifiedRot = turnRot;
}
Debug.Log (modifiedRot);
transform.localRotation.eulerAngles.x = (startingRot +modifiedRot);
}
}
function Turning () { beingTurned = true; startingRot = transform.localRotation.eulerAngles.x; Debug.Log ("I am being turned! :D"); }
function NotTurning () { beingTurned = false; Debug.Log ("I am not being turned :(" ); }
Basically, if the object is being turned, it gets the amount of rotation to add, and adds it to it's own starting rotation. The modifiedRot bit is just there to see if there was an issue with the rotation value switching between positive and negative, but it's not. the Debug.Log for modifiedRot outputs as always positive, so it's not that either.
All help is appreciated! Thanks!
Answer by Uzquiano · Apr 25, 2011 at 05:15 PM
Hi,
well, maybe it is because of this:
"Do not set one of the eulerAngles axis separately (eg. eulerAngles.x = 10; ) since this will lead to drift and undesired rotations. When setting them to a new value set them all at once as shown above. Unity will convert the angles to and from the rotation stored in Transform.rotation"
You should something like
transform.eulerAngles = Vector3(10, yRotation, 0);
Your answer
Follow this Question
Related Questions
Issue with OnTriggerEnter. 1 Answer
Player not taking any damage 2 Answers
How to rotate a 2D object on touch 1 Answer
Making a pick up item that is timed, that moves,scales and rotates 1 Answer
Click on collider to rotate camera 1 Answer