我最近刚刚被介绍给Time.deltaTime
并受其困扰,在过去的几天里一直处于困境。
因此,当我在最后一个Time.deltaTime
插入float
并乘以另一个称为speed
的float变量时,究竟是什么情况? Time.deltaTime
对speed
给出最终结果的每一帧都做了什么?
谢谢!
public class CameraMovement : MonoBehaviour
{
public GameObject followTarget;
public float moveSpeed;
void Update()
{
if (followTarget != null)
{
transform.position = Vector3.Lerp(transform.position, followTarget.transform.position, moveSpeed * Time.deltaTime);
}
}
}
答案 0 :(得分:2)
Vector3.Lerp
期望一个介于0
和1
之间的因数,然后对这两个位置进行插值
0
的意思是transform.position
1
的意思是followTarget.transform.position
在它们之间的插值之间的任何其他值意味着类似
transform.position + (followTarget.transform.position - transform.position) * factor;
Time.deltaTime
= time past since last frame rendered
,因此最有可能接近0.017
的值(对于60FPS)。您可以自己计算moveSpeed * 0.017
的平均价值。
您实际上正在寻找的是Vector3.MoveTowards
void Update()
{
if (followTarget != null)
{
transform.position = Vector3.MoveTowards(transform.position, followTarget.transform.position, moveSpeed * Time.deltaTime);
}
}
答案 1 :(得分:0)
在Lerp中使用Time.deltaTime * scalar
很好,但这不是使用它的“预期”方式。
LERP的意思是“线性intERPolation”。使用此数学工具,您可以使用线性函数(y = ax + b)和0至1之间的系数t在两个其他值之间内插。
假设您试图在两个其他位置(A和B)之间找到位置(C)(例如您的问题),则您具有以下图形:
1°),如果初始位置和目标位置没有变化,并且参数t在0和1之间变化,则运动曲线将是完全笔直的:速度将随时间变化。
transform.position = Vector2.Lerp(InitialPosition, DestinationPosition, t ); // t from 0 to 1
2°)但是,由于t(几乎)不随时间变化(使用Time.deltaTime
),而是改变A的位置,因此运动会随着时间而减速,因为您采用固定的百分比每次剩余的距离。由于距离会随着时间的推移而减小,因此您也会随着时间的推移而减少行程
transform.position = Vector2.Lerp(transform.position, DestinationPosition, 0.017 ); // 0.017, approx of Time.deltaTime at 60FPS