假设我在位置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,它将无法正常工作,因为我不知道如何测量每秒将传递多少帧来精确测量速度。
首先,您不应该这样做。您的代码当前取决于帧速率,因此,如果帧速率较高,则对象移动得更快!
宁可使用 Time.deltaTime
此属性提供当前帧与上一帧之间的时间。
以你的速度转换从Unity Units / frame
成Unity 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)
归档时间: |
|
查看次数: |
37 次 |
最近记录: |