我正在运行3D游戏。红色矩形是我在某种坡道或房屋屋顶上的播放器。他没有旋转。现在,当他跌落在这样的坡道上时,我可以通过RaycastHit法线获得绿色矢量。 但是我想要得到的是紫色矢量,所以我可以给播放器以向下滑动的速度。如何获得该向量,或者使用给定的变量是不可能的?
紫色矢量是最接近Vector3.down
且与屋顶相切的矢量。
编辑:我想我想出了如何获得该Vector的方法,但是我仍然不知道如何计算它。在第二张图片中,给出了向量a和b。现在,我需要获得向量c,它是从a到b的90度。
弄清楚了。如果有人想知道:我只是这样使用Vector3.RotateTowards:
rigid.velocity = Vector3.RotateTowards(hit.normal, -transform.up, Mathf.PI / 2, 0);
答案 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.
}