在我的项目中,我有一辆汽车,上面贴有脚本,用于驾驶。在我的世界里是交通信号灯,如果它是红色的,那么会产生一个物体(不可见,称为停止),使该物体停在那里,如果它不在,它将以特定的变量(速度)继续行驶。如何编写减速度和加速度指令? 试图通过Waits Seconds和外部协程进行管理,但没有任何效果。在更新中无效:
Ray disray = new Ray(transform.position, transform.forward);
RaycastHit dishit;
if (Physics.Raycast(disray, out dishit, 8) && dishit.transform.tag == "stop")
{
if (dishit.distance < carrange)
{
transform.Translate(0, 0, 0);
}
}
else
{
transform.Translate(0, 0, speed * Time.deltaTime);
}
谢谢!
答案 0 :(得分:2)
您可能需要采用以下方式减少speed
:
speed = speed * (1 - f(Time.deltaTime));
f
如下:
private float f(int ms)
{
float amountOfMsUntilStop = 2000.0;
if(ms > amountOfMsUntilStop)
return 1
if(ms < 0)
return 0
return ms / amountOfMsUntilStop;
}
当然,这不是绝对的答案,但我认为您可以发挥价值来实现自己想要的。
这可能会使速度加快:
如果我很了解您的代码,可以通过以下方法进行更改:
// Here we either have to brake, or to stop
if (Physics.Raycast(disray, out dishit, 8) && dishit.transform.tag == "stop")
{
// Here we have to stop
if (dishit.distance < carrange)
{
transform.Translate(0, 0, 0);
}
// Here we have to brake
else
{
speed = speed * (1 - f(Time.deltaTime));
transform.Translate(0, 0, speed * Time.deltaTime);
}
}
// Here we can keep on driving
else
{
transform.Translate(0, 0, speed * Time.deltaTime);
}
虽然我将其命名为amountOfMsUntilStop
,但这并不意味着它将在2秒钟后停止使用此值。这意味着如果由于某种原因Time.deltaTime
恰好是2000毫秒,那么汽车将从speed
到0
。
话虽这么说,您想让汽车制动得越厉害,您应该设置的值就越小。