如何仅从法线向量获得下降向量?

时间:2019-08-28 14:37:59

标签: c# unity3d vector

我正在运行3D游戏。红色矩形是我在某种坡道或房屋屋顶上的播放器。他没有旋转。现在,当他跌落在这样的坡道上时,我可以通过RaycastHit法线获得绿色矢量。 但是我想要得到的是紫色矢量,所以我可以给播放器以向下滑动的速度。如何获得该向量,或者使用给定的变量是不可能的?

紫色矢量是最接近Vector3.down且与屋顶相切的矢量。

enter image description here

编辑:我想我想出了如何获得该Vector的方法,但是我仍然不知道如何计算它。在第二张图片中,给出了向量a和b。现在,我需要获得向量c,它是从a到b的90度。

enter image description here

弄清楚了。如果有人想知道:我只是这样使用Vector3.RotateTowards:

rigid.velocity = Vector3.RotateTowards(hit.normal, -transform.up, Mathf.PI / 2, 0);

1 个答案:

答案 0 :(得分:2)

您要寻找的向量是正交于最接近重力方向的表面法线的向量(通常为Vector3.down)。您可以使用矢量叉积来找到它:

Vector3 surfaceNormal;
Vector3 directionOfGravity = Vector3.down;
Vector3 slopeSideways = Vector3.Cross(directionOfGravity, surfaceNormal);
if (slopeSideways != Vector3.zero)
{
    Vector3 slopeDown = Vector3.Cross(surfaceNormal, slopeSideways).normalized;
}
else
{
    // surface is normal to the direction of gravity, there is no downwards slope.
}