public struct Plane : IFormattable{}
Plane是存在于 3D 空间中,无限大的平坦表面,将空间划分为两半(称为半空间)。可方便地确定特定点处于两个半空间的哪一个中,以及确定该点与平面相距多远。
- 此对象在unity并不可见,只是假设存在一个表面。
- 法线矢量源自哪一侧十分重要,此表面会区分正面,法线指向方向和反面,法线反方向。
- 可以用于鼠标的射线定位点检测
构造函数
public Plane(Vector3 inNormal, Vector3 inPoint){}
public Plane(Vector3 inNormal, float d){}
public Plane(Vector3 a, Vector3 b, Vector3 c)
inNormal
生成平面的法线,必须是标准化矢量d
距离原点的距离inPoint
生成的位置a,b,c
生成的平面穿过给定的三个点。向下看着平面的上表面时,这些点呈顺时针顺序。
变量
distance
public float distance{get;set}
沿平面法线,从平面到原点的距离。
- 这里是平面沿法线到原点的距离,这里的原点是世界(0,0,0)
- 距离的正值是平面朝向原点。负距离值是平面背对原点。
flipped
public Plane flipped{get;}
返回朝向相反方向的平面
normal
public Vector3 normal{get;set;}
平面的法线向量
公共函数
ClosestPointOnPlane
public Vector3 ClosestPointOnPlane(Vector3 point){}
平面上最接近于point 的点
- 沿法线投影到平面上的最近点
Flip
public void Flip(){}
反转平面
GetDistanceToPoint
public float GetDistanceToPoint(Vector3 point)
返回从平面到点的带符号距离。
GetSide
public bool GetSide(Vector3 point){}
点是否处于平面的正向?
- 当与平面重合时返回
flase
Raycast
public bool Raycast(Ray ray, out float enter){}
使射线与平面相交
enter
为沿着射线,相对于射线与平面的相交处的距离。- 如果射线与平面平行,则函数返回 false 并将
enter
设置为零 - 如果射线指向相反方向也就是是平面背面,则函数返回
false
并将enter
设置为沿着射线的距离为负数。 - 可以通过
ray.GetPoint(enter)
获取相交于平面的点。
SameSide
public bool SameSide(Vector3 inPt0, Vector3 inPt1){}
两个点是否处于平面的相同侧?
Set3Points
public void Set3Points(Vector3 a, Vector3 b, Vector3 c){}
使用位于其中的三个点设置平面。向下看着平面的上表面时,这些点呈顺时针顺序。
SetNormalAndPosition
public void SetNormalAndPosition(Vector3 inNormal, Vector3 inPoint){}
使用位于其中的一个点设置平面,该点沿着法线以便确定其方向。
inNormal
必须是标准化矢量
Translate
public void Translate(Vector3 translation){}
在空间中移动平面
静态函数
Translate
public static Plane Translate(Plane plane, Vector3 translation)
在空间中移动平面并返回
- 会new一个新的Plane