- Home /
Rotate object on Y Axis when changing transform.up
In simple terms I am doing the following.
I have a cylinder, the cylinder has the following script
gameObject.transform.up = Camera.main.transform.forward;
transform.position = Camera.main.transform.position + Camera.main.transform.forward;
This places the cylinder in front of the camera and orients it in the direction the player is looking.
Now I want to angle the cylinder slightly so that it's at about a 15 degree angle on the y axis (world space y).
However, because of the way I'm re-assigning transform.up to camera.forward the rotation of the cylinder is always changing. So sometimes to tilt it on Y in world space I need to adjust z, while other times I need to adjust X.
How can I go about resolving this issue?
Answer by andrew-lukasik · May 28, 2021 at 09:39 PM
[SerializeField] Vector3 _worldRotation = new Vector3( 0 , 90 , 0 );
[SerializeField] Vector3 _localRotation = new Vector3( 0 , 30 , 0 );
void Update ()
{
var cam = Camera.main.transform;
transform.position = cam.position + cam.forward;
Quaternion rot = Quaternion.LookRotation( forward:cam.up , upwards:cam.forward );
transform.rotation = Quaternion.Euler(_worldRotation) * rot * Quaternion.Euler(_localRotation);
}
Interesting didn't know you could get world/local space like this. Thanks for the info!
Hi. If you still need more control over resulting orientation, I updated my answer to show how to control rotation in both spaces at once.
Your answer
Follow this Question
Related Questions
How to ROTATE an object without slowing the ends (lerp) 3 Answers
Smooth transform position and rotation 1 Answer
Rotation not going past 180? 2 Answers
why update function doesn't work on the transform.Rotate function 0 Answers
Following another object's position/rotation like parent/child relationship? 4 Answers