- Home /
Rotating cube with quaternion angles
Ive wrote this code to move and rotate a cube. It moves fine, but the rotation is inconsistent. I can press down twice and it will rotate in different directions. I imagine its something to do with quaternions and euler angles. Can anyone help?
And yeah, rotating a cube has been asked 1000 times, this is even my second time. But most answers are to use physics, and this way seems far easier than learning torque, friction, and how to stop it bouncing when it lands.
function move()
{
if (!moving)
{
if (Input.GetKeyDown("w"))
{
targetPos = Vector3(c.transform.position.x,c.transform.position.y,c.transform.position.z + 1);
targetRot = angle + (Vector3.right * 90);
moving = true;
}
if (Input.GetKeyDown("s"))
{
targetPos = Vector3(c.transform.position.x,c.transform.position.y,c.transform.position.z - 1);
targetRot = angle + (Vector3.left * 90);
moving = true;
}
if (Input.GetKeyDown("a"))
{
targetPos = Vector3(c.transform.position.x - 1,c.transform.position.y,c.transform.position.z);
targetRot = angle + (Vector3.forward * 90);
moving = true;
}
if (Input.GetKeyDown("d"))
{
targetPos = Vector3(c.transform.position.x + 1,c.transform.position.y,c.transform.position.z);
targetRot = angle + (Vector3.back * 90);
moving = true;
}
}
}
function movement()
{
var equalA = 100;
var portionP : float;
var portionR : float;
var anglex : float;
var angley : float;
var anglez : float;
if (moving)
{
portionP = 1 * .01;
portionR = 90 * .01;
anglex = Mathf.MoveTowardsAngle(angle.x, targetRot.x, portionR * equalA * Time.deltaTime);
angley = Mathf.MoveTowardsAngle(angle.y, targetRot.y, portionR * equalA * Time.deltaTime);
anglez = Mathf.MoveTowardsAngle(angle.z, targetRot.z, portionR * equalA * Time.deltaTime);
angle = Vector3(anglex,angley,anglez);
c.transform.eulerAngles.x = angle.x;
c.transform.eulerAngles.y = angle.y;
c.transform.eulerAngles.z = angle.z;
c.transform.position = Vector3.MoveTowards(c.transform.position, targetPos, portionP * equalA * Time.deltaTime);
if (c.transform.position == targetPos)// && c.transform.eulerAngles == Vector3(anglex,angley,anglez))
{
moving = false;
}
}
}
go to unityGE$$anonymous$$S.com and read the utterly complete and full explanations there
Your answer
Follow this Question
Related Questions
Gun not rotating with the camera? 1 Answer
Quaternion snaps to a rotation when moving (and with input)? 1 Answer
Eulers from normal into rotation sometimes wrong. 3 Answers
Quaternion LookRotation issue 0 Answers
Weird rotation behaviour 1 Answer