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

我正在开发一个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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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