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!

more ▼

asked Apr 25, 2011 at 05:00 PM

Alienjesus gravatar image

119 83 66 71

(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first


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);
more ▼

answered Apr 25, 2011 at 05:15 PM

Uzquiano gravatar image

530 50 48 60

Cheers, that sorted it.

Apr 25, 2011 at 05:52 PM Alienjesus

Great, another learnt thing ;)

Apr 25, 2011 at 06:56 PM Uzquiano
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here



Answers and Comments



asked: Apr 25, 2011 at 05:00 PM

Seen: 1158 times

Last Updated: Apr 25, 2011 at 05:00 PM