- 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);
}