减速并停在特定点的物体

Posted

技术标签:

【中文标题】减速并停在特定点的物体【英文标题】:Object that slows down and stops at a specific point 【发布时间】:2018-08-01 06:53:59 【问题描述】:

在我的项目中,我有一辆汽车,上面附有一个用于驾驶的脚本。在我的世界里是红绿灯,如果它是红色的,就会产生一个物体(不可见,命名为 stop),如果它在那里,它会使汽车停下来,如果它不在,它会以特定的变量(速度)继续行驶。如何编写减速和加速脚本? 尝试使用 Wait for 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);
    

谢谢!

【问题讨论】:

您可能需要更改变量speed... 谢谢,但是怎么做?如果我让速度=速度/2;那么它会停止即时性,但我想要一个放慢速度的过程...... 可能与 Time.deltaTime (speed = speed - X*Time.deltaTime) 成正比减速,直到它达到 0。或者 speed = speed * (1-f(Time.deltaTime))f(x) 返回介于 0 和 1 之间的值 【参考方案1】:

您可能需要通过以下方式减少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

话虽如此,您希望汽车越用力制动,则应将此值设置得越小。

【讨论】:

以上是关于减速并停在特定点的物体的主要内容,如果未能解决你的问题,请参考以下文章

如何使物体在指定位置寻找并减速停止?

unity 如何让物体匀加速和匀减速运动,求代码

物体旋转后缓慢停在指定角度的实现

Android listView查找滚动的像素量

为啥用unity 3d做的物体添加Rigidbody属性,并设置重力运行后直接穿过地面,而不是停在地面上?

如何在停止标签处获取字符串?