>假设我在位置 x = 0 处有一个对象 A,在位置 x = 16 处有一个对象 B。
假设 A 有以下代码:
public class Move : MonoBehaviour
{
float speed = 0.04f;
Update()
{
transform.Translate(speed, 0, 0);
}
}
我的问题是:如何评估 A 与 B 碰撞需要多少秒(精确(?
如果我应用公式 S = S0 + vt,它将无法正常工作,因为我不知道如何测量它在一秒钟内会经过多少帧来准确测量速度是多少。
首先,你不应该这样做。您的代码目前依赖于帧速率,因此如果您的帧速率较高,则对象移动得更快!
而是使用Time.deltaTime
此属性提供当前帧和上一帧之间的时间。
将速度从Unity Units / frame
转换为Unity Units / second
transform.Translate(speed * Time.deltaTime, 0, 0);
这意味着对象现在随0.04 Unity Units / second
移动(与帧速率无关(。
然后我会说所需的时间(以秒为单位(只是
var distance = Mathf.Abs(transform.position.x - objectB.transform.position.x);
var timeInSeconds = distance / speed;
虽然......这显然仍然假设"碰撞"是指在同一位置(至少在X轴上(......你也可以考虑它们的宽度,因为它们的表面会比这个;)更早碰撞
var distance = Mathf.Abs(transform.position.x - objectB.transform.position.x) - (objectAWidth + objectBWidth);
var timeInSeconds = distance / speed;