unity3d - 在给定距离和速度的情况下查找碰撞时间
问题描述
假设我在位置 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;
推荐阅读
- macos - Flutter MacOS:使用 google 登录的附加实现
- java - 如何在 FloatingActionButton 上方制作这个 TextView?
- javascript - Cloud Firestore 查询和限制不会查询所有数据
- scala - Scala:长度为k的所有子串
- django - Django 模板中的 Django 富文本编辑器不适用于管理员
- java - JAVAFX 折线图与 XYChart
- kotlin - Kotlin 泛型类型不匹配
- jquery - 没有可用的数据数据表
- c# - 如何在双引号内转义引号?
- python - 如何在 Python 中将日期字符串转换为字符串格式