Unity3D-从处于相同世界位置的原始平面获取数学平面

时间:2019-08-30 05:22:40

标签: unity3d primitive plane

出于视觉目的,我在给定位置有一个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);      
}

1 个答案:

答案 0 :(得分:0)

go.transform.InverseTransformDirection(-go.transform.right)

返回面向侧面的矢量,并且您将其用作Plane的{​​{1}}。


原始normal对象的法线就是它的局部Plane向量。

然后请注意,transform.up获取世界空间坐标,因此使用PlaneInverseTransformDirection毫无意义,因为InverseTransformPointtransform.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到该平面上最近点的向量。因此,它将仍然不完全位于给定平面对象的位置。