使用光线投射检测障碍物并阻止玩家移动

Detect obstacle and block players movement with raycast

我是 Unity3D 新手,遇到碰撞检测问题。如果我通过光线投射击中障碍物并阻止朝这个方向移动,我想 return 为真。当我面对面地面对障碍物时,效果很好。当我改变方向并且我在障碍物前面时(但面对另一个方向)然后它 returns false 我仍然可以向所有方向移动(它应该阻止 "up" 移动就像你在第一张图片上看到)。 任何提示将不胜感激!

Returns 当障碍物在我们面前并且我们无法移动时为真 "up"

Returns false 当障碍物在我们的左边或右边时

玩家走错后被封锁

这是我的代码示例:

void Update()
{

    Ray myRay = new Ray(transform.position, Vector3.right);
    Debug.DrawRay(transform.position, Vector3.right, Color.red);

    if (Physics.Raycast(myRay, out hit, 1.5f))
    {
        if (hit.collider.gameObject.tag == "TerrainObject")
        {
            Debug.DrawRay(transform.position, Vector3.right, Color.blue);
            upHit = true;
        }
    }
    else
        upHit = false;
    ...
}

正如评论中所讨论的,您需要增加光线投射的起始高度。

使用 Ray myRay = new Ray(transform.position+new Vector3(0f,0.15f,0f), Vector3.right); 从地面上方一点点进行光线投射。