I am having slight difficulty implementing a simple linear projectile like motion for a moving transform. During the time the transform is in the air I want to slowly adjust its rotation so it will gradually face the ground during the motion rather than flying up and falling backwards.
Here is what I have so far:
if (!rwc.isGrounded) {
currentAir += Time.deltaTime;
transform.Rotate (0.5f, 0, 0); //0.5 deg a frame
}
This works well for a jump where the transform rotation doesn’t change however if I jump at an angle the transform will rotate respective of its local “down” rotation and not the global down rotation I would like - this gives a curved jump motion.
Is there any way I can adjust the x rotation in this way?
You will never match the rotation to the movement using this method. It’s better to adjust the object orientation to direction it’s moving, like this:
Vector3 lastPos;
void Start(){
lastPos = transform.position;
}
void Update(){
Vector3 dir = transform.position - lastPos;
if (dir.magnitude > 0.2f){ // update direction/lastPos only after at least 0.2 distance
transform.forward = dir.normalized; // point the movement direction
lastPos = transform.position; // update lastPos
}
}
This will make the object set its forward direction always to where it’s moving. If you want to align other directions, change the transform vector (use transform.up, for instance).
NOTE: If you want to control the object rotation anyway, define the world space in Rotate, like this:
transform.Rotate (90 * Time.deltaTime, 0, 0, Space.World); // 90 degrees per second
and multiply the angle by Time.deltaTime, so the rotation speed will be constant and expressed in degrees per second, no matter which’s the framerate.