Search code examples
c#unity-game-engine

Unity calculate quaternion relative to main camera


I have world coordinates for GameObject object and for Camera.main and I would like to calculate position and rotation relative to Camera.main. Position is easy:

object.transform.position - Camera.main.transform.position

How to calculate Quaternion for given object relative to camera ?

I can set object.transform.parent = Camera.main.transform and read localRotation, but is there more elegant solution.


Solution

  • By definition:

    obj.transform.parent.rotation * obj.transform.localrotation = obj.transform.rotation
    

    So, another way of phrasing your question is that you want to find the quaternion q such that Camera.main.transform.rotation * q == object.transform.rotation. So, you can solve this algebraically:

                            cam_rotation * q = obj_rotation  
    inverse(cam_rotation) * cam_rotation * q = inverse(cam_rotation) * obj_rotation  
                                           q = inverse(cam_rotation) * obj_rotation
    

    And to calculate that in unity:

    Quaternion q = Quaternion.Inverse(Camera.main.transform.rotation) 
                   * object.transform.rotation;