出于视觉目的,我在给定位置有一个GameObject.Plane。 鉴于此,鉴于飞机在世界空间中的旋转和位置,我必须制作一个数学飞机以用于下一次计算,但是有些不对劲。
我尝试做
new Plane(go.transform.InverseTransformDirection(-go.transform.right), go.transform.InverseTransformPoint(go.transform.position));
其中 go 是原始平面对象。 从后来的结果来看,它在世界空间中的位置看起来不错,但是旋转不是。
原始平面(go)旋转了90度,因此它不是面向上而是面向侧面。
这是怎么了?
编辑:当前设置为
go.transform.InverseTransformDirection(-go.transform.right);
return new Plane(go.transform.up, go.transform.position);
void OnDrawGizmos()
{
Gizmos.color = Color.magenta;
Gizmos.DrawLine(planePrimitive.transform.position, planePrimitive.transform.position + plane.normal * 3f);
}
答案 0 :(得分:0)
此
go.transform.InverseTransformDirection(-go.transform.right)
返回面向侧面的矢量,并且您将其用作Plane
的{{1}}。
原始normal
对象的法线就是它的局部Plane
向量。
然后请注意,transform.up
获取世界空间坐标,因此使用Plane
和InverseTransformDirection
毫无意义,因为InverseTransformPoint
和transform.up
已经存在空间。
transform.position
如果您要谈论的是原始new Plane(go.transform.up, go.transform.position);
对象,那么您想要的向量就是Quad
。
-transform.forward
到您的Gizmos:
您正在使用new Plane(-go.transform.forward, go.transform.position);
,就像它是职位一样。它不是!法线是方向,不会告诉您任何有关位置的信息。
您想做的是(不使用本地空间小物件)
testPlane.normal
或者如果您只能依靠飞机本身使用
Gizmos.DrawLine(go.transform.position, go.transform.position + testPlane.normal * 3f);
在第二个平面中,Gizmos.DrawLine(plane.distance, plane.distance + testPlane.normal * 3f);
是从plane.distance
到该平面上最近点的向量。因此,它将仍然不完全位于给定平面对象的位置。