- Home /
Moving an object on z-axis, considering it´s rotation (without transform.forward)
Hi, first of all I know that transform.forward is literally the solution for my question, but: I´m going to write a test on linear algebra and want to get an in-depth understanding who to calculate it on my own. So I want to move an object constantly on it´s local z-axis forward and rotate it, to steer its direction of movement. Who would I calculate the z-axis movement?
Thanks in advance!
Answer by unity_ek98vnTRplGj8Q · Feb 25, 2020 at 04:49 PM
Given an objects rotation, you can calculate the forward vector like so:
Vx = 2 * (x*z + w*y)
Vy = 2 * (y*z - w*x)
Vz = 1 - 2 * (x*x + y*y)
With Vx, Vy, and Vz being the components of the forward direction along each of the cardinal axis and w, x, y, z being the Quaternion's internal values - so in code
Quaternion r = transform.rotation;
float xComp = 2*(r.x*r.z + r.w*r.y);
float yComp = 2*(r.y*r.z + r.w*r.x);
float zComp = 2*(r.x*r.x + r.y*r.y);
Vector3 forward = new Vector3(xComp,yComp,zComp);
However this is maybe not what you are looking for. If you want to instead use the euler angles, you could take the x and y rotations and apply it to a forward vector:
Take global z axis vector and the global y axis vector
Rotate both about the global x axis by rotation.eulerAngles.x
Rotate the new z vector about the new y vector by rotation.eulerAngles.y
Resulting z vector is your forward vector
Then if you want to move the object along this vector, you would do something like
transform.position += forwardVector * moveDistance
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Moving by rotation of objects 0 Answers
Get the Vector position of the player object when clicking another object C# 1 Answer
Moving a Platform 1 Answer
Code working on wrong axis. 1 Answer