假设您具有Transform A
,并且您想要找到Transform B
,以使A
存在于B的本地,并且具有特定的位置和旋转值。 注意,我不是在问如何将B
定位在A
的本地位置,而是要找到B
的位置和旋转值,以便A
在B
的位置具有指定的位置位置和旋转。我不仅在寻求从本地到全球或从全球到本地的转换。
例如,假设变换A
具有位置Vector3APosition
和旋转Vector3AEulerRotation
。然后,我想为变换Vector3BPosition
找到QuaternionBRotation
和B
,以便A
局部存在于B
的位置Vector3ALocalToBPosition
和旋转Vector3ALocalToBRotation
。
团结一致,我尝试了以下方法,但您可能会猜想它似乎不太正确:
Quaternion QuaternionBRotation = Quaternion.Euler(Vector3AEulerRotation - Vector3ALocalToBRotation)
Vector3 Vector3BPosition =
Matrix4x4.TRS(Vector3APosition, QuaternionBRotation, Vector3.one).Multiply3x4(Vector3ALocalToBPosition * -1)
不确定我是否完全了解它,但听起来您正在搜索Transform.InverseTransformPoint
将位置从世界空间转换为局部空间。
和相反的Transform.InverseTransformPoint
将位置从本地空间转换为世界空间
例如
Transform.TransformPoint
为在Transform.TransformPoint
的局部空间中给定的var localPos = transformB.InverseTransformPoint(transformA.position);
的位置重新获得Vector3。
和
transformA
将transformB
设置为在transformA.position = transformB.TransformPoint(someLocalPosition);
局部空间内的transformA
处的世界位置。
与旋转相似,有someLocalPosition
,因此您可以使用
transformB
为了在Quaternion.Inverse
的局部空间中获得Quaternion.Inverse
的旋转。