从歪果仁的脚本里看到了这个方法,查脚本,看脚本说明也没看懂,官方的说明是,变换位置从世界坐标到自身坐标,Transform.TransformPoint相反。
试验了一下得出这个结论,如果某一个物体A的坐标相对于世界坐标是(1,2,1), 物体target的坐标相对于世界坐标是(3,1,2)
Vector3 targetPos = target.transform.position;
Vector3 newPos = A.transfrom.InverseTransFormPoint(targetPos);
newPos 的值为(2,-1,1) :即将target置为A的子物体后的坐标
先说这个newPos是怎么计算的 , newPos的x方向的值我用, Xn表示, y, z,轴方向依次类推
Xn = - ( 1-3 ) = - (Xa - Xtarget) = 2
Yn = - ( 2-1 ) = - (Ya - Ytarget) = -1
Zn = - ( 1-2 ) = - (Za - Ztarget) = 1
这个值代表 物体target相对于物体A的位置, 换句话说, 就是把物体A当做了世界的中心,target相对于新的世界中心所返回的位置。
A的坐标相对于世界坐标是(1,2,1),target的坐标相对于世界坐标是(3,1,2),执行一下代码
Vector3 inverseTrasnVec = A.InverseTransformPoint(targetTransform.position); //将target的世界坐标转换为相对于A的相对坐标
Vector3 trasnVec = A.TransformPoint(inverseTrasnVec);//将target相对于A的相对坐标转换为世界坐标
Debug.Log(inverseTrasnVec );
Debug.Log(trasnVec);
输出为
(2,-1,1) ,即tartget相对于a的相对坐标
(3,1,2)