首页 > 解决方案 > 物体仍然与光线投射发生碰撞,不明白为什么

问题描述

在我的场景中有几辆汽车,都标有汽车。他们有一个名为“驾驶”的脚本,我不明白为什么他们有时仍然会在前面有车的情况下撞车。这些汽车只附有脚本和一个盒子对撞机。我究竟做错了什么?

    Ray stopray = new Ray(transform.position, transform.forward);
    RaycastHit stophit;

    Ray carray = new Ray(transform.position, transform.forward);
    RaycastHit carhit;

    //here we have to slow down
    if (Physics.Raycast(carray, out carhit, 50) && carhit.transform.gameObject.tag == "car")
    {
        if (carhit.distance < 50 && carhit.distance> 12)
        {
            transform.Translate(0, 0, speed / 6 * Time.deltaTime);
        }
    }

    if (Physics.Raycast(carray, out carhit, 12) && carhit.transform.gameObject.tag == "car" || Physics.Raycast(stopray, out stophit, 8) && stophit.transform.gameObject.tag == "stop")
    {
        // Here we have to stop
        if (carhit.distance < 12)
        {
            transform.Translate(0, 0, 0);
        }

    }
    else
    {
        transform.Translate(0, 0, speed * Time.deltaTime);
    }

(地图上还有不可见的停止立方体)它以这样的方式结束,这不应该发生: 在此处输入图像描述

标签: c#unity3draycasting

解决方案


我建议您引入本地速度变量并根据您的条件对其进行初始化,然后在所有条件检查后仅调用一次翻译。尝试这个:

Ray stopray = new Ray(transform.position, transform.forward);
RaycastHit stophit;

Ray carray = new Ray(transform.position, transform.forward);
RaycastHit carhit;

// speed for the current frame
var currentSpeed = speed;

//here we have to slow down
if (Physics.Raycast(carray, out carhit, 50) && carhit.transform.gameObject.tag == "car")
{
    if (carhit.distance < 50 && carhit.distance> 12)
    {
        currentSpeed = speed / 6;
    }
}

if (Physics.Raycast(carray, out carhit, 12) && carhit.transform.gameObject.tag == "car" || Physics.Raycast(stopray, out stophit, 8) && stophit.transform.gameObject.tag == "stop")
{
    // Here we have to stop
    if (carhit.distance < 12)
    {
        currentSpeed = 0f;
    }
}

// move the car with right speed
transform.Translate(0, 0, currentSpeed * Time.deltaTime);

推荐阅读