Raycast 仅在特定高度有效

Raycast only works at a specific height

我想为学校项目制作 3D 平台游戏。 由于我在游戏开发方面经验不足,所以我遵循了 Plai 的教程。我最大的问题是我一直在滑下斜坡和斜坡检测。它仅在斜坡下方有表面时检测斜坡,玩家 has some distance from the ground 但离地面不太远。

这是检测斜率的方法。 尝试对其进行编辑,但似乎没有任何效果。

    if (Physics.Raycast(transform.position, Vector3.down, out slopeHit, playerHeight / 2 * 5f))
    {
        if (slopeHit.normal != Vector3.up) return true;
    }

    Color rayColor;
    if (slopeHit.collider != null) rayColor = Color.green;
    else rayColor = Color.red;

    Debug.DrawRay(transform.position, Vector3.down, rayColor);

    return slopeHit.collider != null;

第一部分不错

if (Physics.Raycast(transform.position, Vector3.down, out slopeHit, playerHeight / 2 * 5f))
{
    if (slopeHit.normal != Vector3.up) return true;
}

如果你撞到某物并且它是一个斜坡你已经 return

否则你执行剩下的,即使你可能根本不会击中任何东西。

您可能更愿意这样做

if (Physics.Raycast(transform.position, Vector3.down, out var slopeHit, playerHeight / 2f * 5f))
{
    var isSlope = slopeHit.normal != Vector3.up;

    Debug.DrawLine(transform.position, slopeHit.point, isSlope ? Color.yellow : Color.green);

    return isSlope;
}

//meaning you don't hit anything at all
Debug.DrawRay(transform.position, Vector3.down, Color.red);
return false;