unity常用的坐标系转换
当调用别人的接口时,经常会有获取位置或向量的接口。遇到这些数据时,先要弄清楚现在获取的数据在哪个坐标系下的。
是否需要进行坐标系变换,一般提供的位置和向量都是在世界坐标系的,此时需要注意:
①对方的坐标系是左手坐标系还是右手坐标系
因为Unity是左手坐标系,如果接口提供的数据是基于右手坐标系的话,我们需要把z值取反后,看起来的效果才是正常的。
②如果我们通过接口拿到的数据,我们想把它跟随场景中“Camera Rig”物体移动和旋转
为了实现“Camera Rig”物体移动我们拿到的位置也跟着移动,“Camera Rig”物体旋转时我们拿到的位置和向量也跟着旋转。我们
需要用“Camera Rig”物体的移动和旋转创建一个变换矩阵,把拿到的数据乘这个矩阵即可实现。
Vector3 point = GetPoint(); Vector3 dir = GetDir(); //创建矩阵 Transform target = CameraRig.transform; Matrix4x4 mat = Matrix4x4.TRS(target.position, target.rotation, Vector3.one); //变换位置点 point = mat.MultiplyPoint(point); //变换向量 dir = mat.MultiplyVector(dir);