- Home /
 
 
               Question by 
               William_Goodspeed · Feb 14, 2015 at 11:03 PM · 
                c#rotationrotateangle  
              
 
              Rotating without gimbal lock
Hey folks,
So I've taken a look around at a lot of the unity answers regarding this issue, but I can't seem to get my head round it.
I've got a directional light in the center of my scene (my sun) and I'm attempting to have it Rotate 360 degrees on the x axis, while also rising and falling in the sky on the y axis. However, part the way through the rotation I'm losing control of the rotate. Perhaps someone could enlighten me?
This is the 24 hour rotation I am attempting to mimic: http://www.gdargaud.net/Antarctica/DC2005/Pano/SunRun_.jpg
     if (SunUp == true) 
     {
         sun.transform.RotateAround(sun.position, Vector3.right, 10 * Time.deltaTime);
         sun.transform.RotateAround(sun.position, Vector3.up, 10 * Time.deltaTime);
     }
     if (SunUp == false) 
     {
         sun.transform.RotateAround(sun.position, Vector3.left, 10 * Time.deltaTime);
         sun.transform.RotateAround(sun.position, Vector3.up, 10 * Time.deltaTime);
     }
 
              
               Comment
              
 
               
              Answer by William_Goodspeed · Feb 16, 2015 at 11:25 PM
Managed to solve it in the end! For those interested below is the answer:
 public Transform sun;
 public float yrot = 0;
 public float xrot = 0;
 
 private bool SunUp;
 // Use this for initialization
 void Start () {
     SunUp = true;
 }
 
 // Update is called once per frame
 void Update () {
     if (sun.transform.rotation.eulerAngles.x >= 30)
     {
         SunUp = false;
     }
     if (sun.transform.rotation.eulerAngles.x <= 10)
     {
         SunUp = true;
     }
 
     if (SunUp == true) 
     {
         xrot = xrot + 10 * Time.deltaTime;
     }
     if (SunUp == false) 
     {
         xrot = xrot - 10 * Time.deltaTime;
     }
     yrot = yrot + 10 * Time.deltaTime;
     sun.transform.eulerAngles = new Vector3(xrot, yrot, 0);
     Debug.Log ("Sun Up: " + SunUp);
     Debug.Log ("ypos: " + yrot + "xrot: " + xrot);
 }
 
              Your answer