【问题标题】:Unity Quaternion Lerp method always returns the to valueUnity Quaternion Lerp 方法总是返回 to 值
【发布时间】:2021-05-20 10:45:38
【问题描述】:

我已经实现了 Unity API 提供的以下非常基本的 Quaternion Lerp 方法,其中 time 包含一个从 0.0 到 1.0 的 float 值。虽然期望在 fromto 值之间进行转换,但 Lerp 方法只返回 to 值。只有当time0时,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 方法应该如何工作的。它应该采用 fromto 值,并根据给定时间在这些值之间进行插值。
  • 虽然文档使用 Time.time,但这并不是真的适用于几乎所有情况,因为这意味着 lerp 速度取决于您开始计算的时间。因此,如果此计算将在应用程序开始时进行,它将起作用,但如果在以后计算,它将计算到 To 值,因为 Time.time 值已经非常大。因此,最好使用 Time.deltaTime 并将每次更新的 deltatime 添加到您使用的时间值中,如果 lerp 是要减慢或快速将时间值乘以某个数字。

标签: unity3d animation math quaternions


【解决方案1】:

我发现问题在于from 值是使用new Quaternion (); 实例化的。我希望这与Quaternion.identity 相同。即使控制台显示了一个四元数 (0, 0, 0, 0),Lerp 也无法像处理 Quaternion.identity 值那样处理它(控制台记录完全相同)。

LT;D'R;使用Quaternion.identity 而不是new Quaternion ();

【讨论】:

    猜你喜欢
    • 2021-09-15
    • 1970-01-01
    • 2016-10-22
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 2016-10-27
    相关资源
    最近更新 更多