如果你设置这样的东西:
Quaternion quaternion = Quaternion.Euler(0, 0, 360 * A);
无论在位置 A(从整数)发生什么,都永远不会发生反转,但如果数字是 A.5 类型(带逗号的数字,小数点后有一半),那么反转将恰好是 180 ,事实证明,以简单的方式将反转设置为 3600(t.e. 10 圈)是不可能的,我有一个平滑的圈转,这样我就不会通过阅读每个半圆的类型来写任何废话,我问了一个问题:如何大转一圈(即超过一整圈):我的旋转代码:
Quaternion quaternion = Quaternion.Euler(0, 0, 1800);
float t = 5f;
float tA = Time.time;
while (t > 0)
{
t -= Time.time - tA;
tA = Time.time;
Debug.Log(t);
transform.GetComponent<RectTransform>().rotation = Quaternion.Lerp(transform.rotation, quaternion, (5-t)/5f);
yield return 0;
}
顺便说一句,这里我也想正好转5秒,但出于某种原因(由于我的无知,它不能正常工作)。
主要问题是:如何为几个圆圈(例如 3600 度)进行转弯(在我的情况下是平滑的),即 10圈。
第二个问题是如何在特定的时间内准确地掉头
整个问题在于这样一个事实,即围绕任何轴的旋转在物理上是有限
[0;360)
的,并且在涉及度数的范围内。但不要混淆:我们甚至可以旋转一个物体十亿度——最终它仍然会在区间内旋转[0;360)
。是的,要在实践中检查这一点非常简单,让我们这样做:
让我们看看输出:
基于上述,以这种方式使用旋转的“参考”值是行不通的。
这可以通过固定旋转来实现:
然后是最简单的计算:
需要在 10 秒内将物体旋转 360 度?所以我们需要 360/10 = 36 度/秒的速度:
需要在 5 秒内将物体旋转 1800 度?重复上述步骤:1800/5 = 360:
一般来说,对于与手动动画相关的一切,最好使用LeanTween或任何其他补间引擎。但问题是这样的引擎使用“参考”值,从上面的推理来看,这并不是特别适合我们,但我会将其作为附加信息。
让我们进入文档: