多重射线检测但只有两个有效

我正在开发一个AI,希望它能测量玩家(一辆车)与游戏中其他几乎所有物体(墙壁、街道中间、其他车辆)之间的距离。我使用的是Physics.Raycast来实现这个功能。问题是只有DistanceToRightSideOfMOTS(MOTS:街道中间)和DistanceToBackWall能够正常工作。这是我的代码:

private void FixedUpdate(){    RequestDecision();    RequestAction();     // 获取到墙壁的距离    // 获取到左侧墙壁的距离    RaycastHit hit;    if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.left), out hit, 25, 1 << 11))    {        DistanceToLeftWall = hit.distance / 25;        Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.left) * hit.distance, Color.red);    }    else    {        DistanceToLeftWall = 1;    }    // 获取到右侧墙壁的距离    if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.right), out hit, 25, 1 << 12))    {        DistanceToRightWall = hit.distance / 25;        Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.right) * hit.distance, Color.red);    }    else    {        DistanceToRightWall = 1;    }    // 获取到前方墙壁的距离(因为在拐角处转向困难,所以检测距离是两倍)    if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, 50, (1 << 11) | (1 << 12)))    {        DistanceToFrontWall = hit.distance / 50;        Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * hit.distance, Color.red);    }    else    {        DistanceToFrontWall = 1;    }    // 获取到后方墙壁的距离    if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.back), out hit, 50, (1 << 11) | (1 << 12)))    {        DistanceToBackWall = hit.distance / 50;        Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.back) * hit.distance, Color.red);    }    else    {        DistanceToBackWall = 1;    }    //////////////////    // 获取到其他车辆的距离    /////////////////    // 获取到左侧车辆的距离    if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.left), out hit, 25, 1 << 13))    {        DistanceToLeftCar = hit.distance / 25;        Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.left) * hit.distance, Color.green);    }    else    {        DistanceToLeftCar = 1;    }    // 获取到右侧车辆的距离    if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.right), out hit, 25, 1 << 13))    {        DistanceToRightCar = hit.distance / 25;        Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.right) * hit.distance, Color.green);    }    else    {        DistanceToRightCar = 1;    }    // 获取到前方车辆的距离    if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, 50, 1 << 13))    {        DistanceToFrontCar = hit.distance / 50; // 我们将距离除以最大距离以标准化输入        Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * hit.distance, Color.green);    }    else    {        DistanceToFrontCar = 1;    }    // 获取到后方车辆的距离    if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.back), out hit, 50, 1 << 13))    {        DistanceToBackCar = hit.distance / 50;        Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.back) * hit.distance, Color.green);    }    else    {        DistanceToBackCar = 1;    }    //获取到街道中间的距离    //获取到左侧的距离    if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.left), out hit, 10, 1 << 14))    {        DistanceToLeftSideOfMOTS = hit.distance / 10;        Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.left) * hit.distance, Color.blue);    }    else    {        DistanceToLeftSideOfMOTS = 1;    }    //获取到右侧的距离    if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.right), out hit, 10, 1 << 14))    {        DistanceToRightSideOfMOTS = hit.distance / 10;        Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.right) * hit.distance, Color.blue);    }    else    {        DistanceToRightSideOfMOTS = 1;    }}

其他距离总是返回1,即使不应该这样。为什么不工作,我该如何解决这个问题?

编辑1:我不知道为什么,当我把车非常靠近右侧墙壁时,DistanceToRightWall开始工作,而DistanceToBackCar只有在我距离车至少15米时才工作。有没有其他替代方案?

编辑2:我用平面来表示墙壁和街道中间。当我在物理调试可视化中查看时,我看到平面碰撞体从一侧可见,但从另一侧不可见。我是Unity的新手,所以这可能是问题所在。

编辑3:我在街道中间添加了一个盒形碰撞体,DistanceToLeftSideOfMOTS开始工作,但我尝试在墙壁上使用同样的方法却没有成功。

编辑4:我把盒形碰撞体做大了,问题解决了。现在唯一的问题是车辆。


回答:

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注