通过光线投射检测障碍并阻止玩家移动

时间:2018-11-28 20:14:37

标签: c# unity3d raycasting

我是Unity3D的新手,碰撞检测有问题。如果我通过射线投射撞到障碍物并阻止该方向的移动,我想返回true。当我在障碍物前面面对面时,效果很好。当我改变方向并且我在障碍物的前面(但是具有另一个面部方向)时,它返回false并且我仍然可以在所有方向上移动(它应该像在第一张图片上看到的那样阻止“向上”移动)。 任何提示将不胜感激!

当障碍物在我们前面并且我们不能“向上”移动时返回true

当障碍物位于我们的左侧或右侧时,返回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;
    ...
}

1 个答案:

答案 0 :(得分:2)

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

使用Ray myRay = new Ray(transform.position+new Vector3(0f,0.15f,0f), Vector3.right);从地面上方一点点广播。