Hi Everyone!
I’m currently trying to write a script to rotate an object relative to the camera’s reference axis.
As of now in the script below, objects are rotated relative to themselves. I would like to change this, see below (this is a script attached to the gameobject to be rotated which references a control script and the camera transform).
void Rotate(float deg)
{
// Make sure the camera exists
var camera = GetCamera(Camera, gameObject);
if (camera != null)
{
int rotMode =obj.GetComponent<AssetControl>().RotationMode;
var axis = new Vector3(0, 0, 0);
if (rotMode == YAW) {
axis = new Vector3(0, 1, 0); //rotate about the y axis
} else if (rotMode == ROLL) {
axis = new Vector3(1, 0, 0); //rotate about the x axis
} else if (rotMode == PITCH) {
axis = new Vector3(0, 0, 1); //rotate about the z axis
}
transform.rotation *= Quaternion.AngleAxis(deg, axis); //do rotation
}
}
Ideally I would like to rotate the object relative to the camera orientation, i.e. if rotating by ROLL, rotate the the object about the axis pointing the the camera.x direction, rather than the x axis of the global world. In a nut shell, I’m trying to replace the game objects coordinate frame (x,y,z arrows), with the cameras coordinate frame, and rotate the about about itself. Basically there’s no translation, and I’m not trying to rotate the object around the camera. I’m trying to rotate the object in place around the x,y, or z axis individual but with the reference of the camera’s orientation (sorry for being redundant, I’m just trying to specify my problem in more detail).
Does anyone know how to do this? I tried to use the code below, but it did not work…
//get direction vector of camera to object and treat it as global axis of rotation
Vector3 dirVect = this.transform.position - camera.transform.position;
dirVect = Vector3.Scale(dirVect, new Vector3(1, 0, 1));
dirVect = dirVect.normalized; //dirVect now becomes direction of camera x axis?
I’d appreciate any help! Thank you for your time!!!