c# - 物体仍然与光线投射发生碰撞,不明白为什么
问题描述
在我的场景中有几辆汽车,都标有汽车。他们有一个名为“驾驶”的脚本,我不明白为什么他们有时仍然会在前面有车的情况下撞车。这些汽车只附有脚本和一个盒子对撞机。我究竟做错了什么?
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);
}
解决方案
我建议您引入本地速度变量并根据您的条件对其进行初始化,然后在所有条件检查后仅调用一次翻译。尝试这个:
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);
推荐阅读
- javascript - “@”之后的正则表达式电子邮件验证
- go - 上下文包与完成通道以避免 goroutine 泄漏
- java - iterator = null 和 haveext = false 有什么区别?
- powershell - 如何调用 powershell 脚本来定义一个函数,以便可以在调用 powershell 脚本中使用它?
- javascript - 如何确定操作员的位置
- c# - 从 Excel 中读取 Day > 12 的日期时,DateTime 转换不起作用
- elasticsearch - Elasticsearch 6.5 查询评分发生了变化,我们如何获得 ES 5 类型的结果?
- php - PHP 使用 bind_param 插入
- redirect - 自定义站点地图处理程序导致站点无法加载(Sitecore)
- c - 两个数组给出具有最大值的第三个数组