【发布时间】:2021-05-20 10:45:38
【问题描述】:
我已经实现了 Unity API 提供的以下非常基本的 Quaternion Lerp 方法,其中 time 包含一个从 0.0 到 1.0 的 float 值。虽然期望在 from 和 to 值之间进行转换,但 Lerp 方法只返回 to 值。只有当time为0时,Lerp方法才会返回from的值。
我错过了什么吗?控制台清楚地表明一切都应该正常工作。您的 sn-p 是直接从我的项目中复制的,不会因问题而更改。
在 Unity 2020.1.17 和 Unity 2021.1.7 中测试
我也尝试过 Quaternion 的 Slerp 和 RotateTowards 方法,结果完全相同
var lerped = Quaternion.Lerp (from, to, time);
Debug.Log ($"Time: {time}\t From: {from}\t To: {to}\t Lerped: {lerped}");
【问题讨论】:
-
@nka_Zz 不,我不会更改这些值,如控制台屏幕截图所示。
-
是的,忘记我说了什么,你需要将你的时间除以一些价值来降低整体 lerp 进展,因为它似乎已经过冲,第一次更新
-
如果我理解正确的话,那也行不通,因为
Lerp方法会立即返回to值,因此将其用作from值是没有意义的。这不是 Lerp 方法应该如何工作的。它应该采用from和to值,并根据给定时间在这些值之间进行插值。 -
虽然文档使用 Time.time,但这并不是真的适用于几乎所有情况,因为这意味着 lerp 速度取决于您开始计算的时间。因此,如果此计算将在应用程序开始时进行,它将起作用,但如果在以后计算,它将计算到 To 值,因为 Time.time 值已经非常大。因此,最好使用 Time.deltaTime 并将每次更新的 deltatime 添加到您使用的时间值中,如果 lerp 是要减慢或快速将时间值乘以某个数字。
标签: unity3d animation math quaternions