從歪果仁的腳本里看到了這個方法,查腳本,看腳本說明也沒看懂,官方的說明是,變換位置從世界坐標到自身坐標,Transform.TransformPoint相反。
試驗了一下得出這個結(jié)論,如果某一個物體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),執(zhí)行一下代碼
Vector3 inverseTrasnVec = A.InverseTransformPoint(targetTransform.position); //將target的世界坐標轉(zhuǎn)換為相對于A的相對坐標
Vector3 trasnVec = A.TransformPoint(inverseTrasnVec);//將target相對于A的相對坐標轉(zhuǎn)換為世界坐標
Debug.Log(inverseTrasnVec );
Debug.Log(trasnVec);
輸出為
(2,-1,1) ,即tartget相對于a的相對坐標
(3,1,2)