- Home /
Having trouble trying to get rotation to work
Hi,
I am trying to get this quad to rotate around on the y-axis but I am having a difficult time trying to figure out how to do this. The way I have it at the moment is that if you want to flip the object around you have to turn the flip boolean to true and then in the update method it calls the Flip method but this is not desirable for me. I would like to be able to call a flip method that will flip the object without me having to call a variable and switch it on and off.
Here is the code that I have that I mentioned before.
void Update()
{
if (beenFlipped)
{
timer += Time.deltaTime;
if (timer >= flipTimer)
{
flip = true;
}
}
if (!gsc.gameOver)
{
if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.OSXEditor)
{
Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (Input.GetMouseButtonDown(0))
{
if (collider2D.OverlapPoint(mousePos) && canBegin)
{
if (renderer.material.color != initialColor && beenFlipped)
{
gsc.score++;
flip = true;
}
else
{
gsc.gameOver = true;
}
}
}
}
else
{
for (int i = 0; i < Input.touchCount; i++)
{
Touch t = Input.GetTouch(i);
Vector2 tPos = Camera.main.ScreenToWorldPoint(t.position);
if (t.phase == TouchPhase.Began)
{
if (collider2D.OverlapPoint(tPos) && canBegin)
{
if (renderer.material.color != initialColor && beenFlipped)
{
gsc.score++;
flip = true;
}
else
{
gsc.gameOver = true;
}
}
}
}
}
}
if (flip)
{
Flip(flipColor);
}
//Super Jank Startup
if (gsc.gameStart)
{
canBegin = true;
}
}
public void Flip(Color c)
{
float rot = transform.localEulerAngles.y;
rot += flipSpeed * Time.deltaTime;
if (rot >= 90)
{
if (renderer.material.color == c)
{
renderer.material.color = initialColor;
beenFlipped = false;
}
else
{
renderer.material.color = c;
beenFlipped = true;
}
timer = 0;
flipSpeed = -flipSpeed;
rot = 90;
}
if (rot <= 0)
{
rot = 0;
flipSpeed = -flipSpeed;
flip = false;
}
transform.localEulerAngles = new Vector3(0, rot, 0);
}
Any ideas would be greatly appreciated!
Thanks in advance!
Answer by gamlin777 · Aug 13, 2014 at 10:15 PM
Don't rotate via euler rotations (x,y,z) as you will more then likely run into gimbal lock if you rotate more than one axis. try using:
transform.rotation = quaternion.AngleAxis(rot, vector3.up);
Your answer
Follow this Question
Related Questions
Flip over an object (smooth transition) 3 Answers
How to lock z axis rotation 2 Answers
How can I have 2 transforms have the same position and rotation 0 Answers
Distribute terrain in zones 3 Answers
Problems with code to tilt an object left and right 0 Answers