【问题标题】:Slow an object relative to the speed and distance of another object相对于另一个物体的速度和距离减慢一个物体
【发布时间】:2017-07-11 05:35:28
【问题描述】:

我在车辆移动、加速和减速方面遇到问题,希望有人能提供帮助。

我有一个移动的物体/车辆,我正在努力实现以下目标:

  1. 在一段时间内加速到最大速度
  2. 遇到静止物体时减速停止
  3. 减速以匹配移动物体的速度
  4. 在另一个物体减速时减速,直到两者都停止

我的 #1#3 工作正常,但 #4 有问题。

我知道另一个物体的速度,RaycastHit 物体给了我距离,但我正在努力让物体及时可靠地停止。

对于静止的物体,减速很容易,因为距离保持不变,但如果另一个物体不断加速/减速,那么保持恒定的距离并停下来会有点困难。

任何关于如何使这项工作的建议或指导将不胜感激?

编辑#1:

抱歉,忘记添加代码了。我在物体前面投射一条射线,当它击中某物时,我计算减速:

float deceleration = (_currentSpeed - targetSpeed) / brakeDistance;

_currentSpeed 是这个物体的速度。 targetSpeed 是我想匹配的另一个物体的速度,brakeDistance 是这个物体和另一个物体之间的距离。

brakeDistance 计算为:

float gapBetweenObjects = 0.5f;
float brakeDistance = raycastHit.distance - gapBetweenObjects

当另一个物体变慢时,我希望这个物体也变慢,直到两者都停止,同时保持gapBetweenObjects

【问题讨论】:

  • 添加一些代码会很有帮助
  • 这还不清楚。在您的第一个对象 (A) 与第二个对象 (B) 匹配速度后,您希望 A 保持恒定距离B,对吗?您希望 A 通过计算自己的减速率作为测量距离和所需距离的函数来做到这一点,对吗?

标签: unity3d physics game-physics


【解决方案1】:

我的想法是创建一个 bool,在光线投射检测到障碍物后触发,然后在您的 Update 函数中运行代码,让您的汽车减速。

关于如何使用剩余距离超过指定阈值时如何使移动对象减速,有一个很好的解释: http://answers.unity3d.com/questions/631915/accelleration-and-stopping.html

这应该足以为您的需要创建一个基础。然后您需要确定检测到的障碍物是否在移动并根据它调整代码。

【讨论】:

    猜你喜欢
    • 2019-07-12
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多