unity3d - Vector3.Lerp 错误?
问题描述
我知道如何随着时间的推移移动游戏对象,但我有一个奇怪的错误。
我正在尝试创建漂亮的动画,其中相机在按钮单击时向前移动,在第二次按钮单击时向后移动。
我正在使用此处的代码来制作动画并且遇到了一个奇怪的问题。
这是我的代码:
private float time = 5, current;
public void MoveBackward()
{
StartCotoutine(MoveTo(Vector3.zero));
}
public void MoveForward()
{
StartCotoutine(MoveTo(new Vector3(0,0,15)));
}
private IEnumerator MoveTo(Vector3 target)
{
current=0;
while(transform.position!=target)
{
transform.position = Vector3.Lerp(transform.position, target, current/time);
current = Mathf.Clamp(current+Time.deltaTime,0,time);
yield return null;
}
}
向前运动效果很好,但由于某种原因,当我尝试向后移动时,它移动得太快了。我试图打印结果(当前/时间),并且在向后移动中,当变换到达目的地时,它是 0.1(大约)。
PS - 我Cotoutine
在后台运行另一个(如果重要的话)
你知道为什么会这样吗?
提前致谢
解决方案
问题在于你如何在这里调用 lerp:
transform.position = Vector3.Lerp(transform.position, target, current/time);
这将告诉它根据时间从当前位置到结束,这不是线性的。您需要存储起始位置并在所有 lerping 中使用它,以便获得正确的插值。
还取决于 lerp 是如何比较浮点值的,这可能意味着这永远不会结束。最好通过比较 lerping 量来检查 lerping 是否完成。
推荐阅读
- nlp - 我可以使用 spacy 进行标记,然后使用 fastext 的预训练词嵌入提取这些标记的向量吗
- animation - 仅使用(触摸)它们的角 swift 3 或 4 来旋转图像视图
- azure-devops - 在 VSTS 中设置用户组变量?
- c++ - 如何将 libjvm.so 的路径传递给 bazel 构建?
- xml - 从一个 XSLT 输出两个不同的 XML 根元素/结构
- android - 将图像添加到 PDF、Android Studio
- format - MigraDoc 格式化
- angular - 直接在浏览器中将 URL 写入定义的路由器路由时出现 404
- python - Kivy 修复“片段着色器未读取顶点着色器‘frag_color’的输出”消息
- mysql - 基于值的数据透视表和聚合