查找给定距离和速度的碰撞时间

Dan*_*iel 2 unity-game-engine

假设我在位置x = 0处有一个对象A,在位置x = 16处有一个对象B。

假设A具有以下代码:

public class Move : MonoBehaviour 
{
    float speed = 0.04f;

    Update()
    {
       transform.Translate(speed, 0, 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何评估A与B碰撞需要多少秒(准确)?


如果我应用公式S = S0 + vt,它将无法正常工作,因为我不知道如何测量每秒将传递多少帧来精确测量速度。

der*_*ugo 5

首先,您不应该这样做。您的代码当前取决于帧速率,因此,如果帧速率较高,则对象移动得更快!

宁可使用 Time.deltaTime

此属性提供当前帧与上一帧之间的时间。

以你的速度转换从Unity Units / frameUnity Units / second

transform.Translate(speed * Time.deltaTime, 0, 0);
Run Code Online (Sandbox Code Playgroud)

这意味着对象现在移动0.04 Unity Units / second(与帧速率无关)。


那我说所需的时间以秒为单位

var distance = Mathf.Abs(transform.position.x - objectB.transform.position.x);
var timeInSeconds = distance / speed;
Run Code Online (Sandbox Code Playgroud)

尽管..显然仍以“碰撞”为前提,即您是指在同一位置(至少在X轴上)..您也可以考虑它们的宽度,因为它们的表面会比此早碰撞;)

var distance = Mathf.Abs(transform.position.x - objectB.transform.position.x) - (objectAWidth + objectBWidth);
var timeInSeconds = distance / speed;
Run Code Online (Sandbox Code Playgroud)