在我的场景中,有几辆汽车都标有汽车。他们有一个叫做Driving的脚本,我不明白为什么他们有时仍然在前面撞车而撞车。这些汽车仅附有脚本和撞机盒。我在做什么错了?
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);
}
答案 0 :(得分:1)
我建议您引入局部速度变量并根据您的条件对其进行初始化,然后在所有条件检查之后仅调用一次translate。试试这个:
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);
答案 1 :(得分:0)
问题解决了:射线进入了车底,却没看见一个,解决方案:
Ray carray = new Ray(new Vector3 (transform.position.x, transform.position.y +1, transform.position.z), transform.forward);
RaycastHit carhit;
光线现在更高了一点,看到了汽车。
答案 2 :(得分:0)
检查以确保您的射线广播朝着您肯定认为的方向发展。只要您的射线投射碰到任何东西,您都可以简单地在其中插入“调试”行。我建议创建一个空白场景,然后仅导入两辆汽车以及它们要测试的任何“地面”。
有一些文档(我现在似乎找不到),可以使光线投射在编辑器中以红色线条实际绘制,以便您查看发生了什么。
此外,根据您想要的行为,您可能需要考虑制作触发对撞机,而不是进行光线投射,以检测汽车何时彼此之间过于接近。