为什么我不能旋转任何“超过360度或小于0度”?

我一直试图在Unity中制作一个animation,但是大多数资产已经捆绑了所有面向0度的东西,并不是说这是一件坏事。

但是,我面临的问题是animation关键帧没有正确播放。
当原始测量完成时(简单地拖动XYZ旋转),将考虑负角度和大于360度的角度。 但是,再一次 – 统一可以简单地重新映射他们,但情况并非如此。

例如,在Unity的Robot Factory资产包中find的prop_robotArm预制具有一个旋转脚本,它可以沿着Y轴旋转整个事物。

 void OnFixedUpdate() { transform.Rotate (new Vector3(0, rotateSpeed*Time.deltaTime,0)); } 

这意味着稍微超过一整圈后,Y旋转值应该大于360度,最终会变成……最终。


考虑到这是可能的,我尝试通过在animation文件rotator.csarm旋转720度(两次)来模仿这种行为(这不是使用上面示例中附加到body的rotator.cs脚本)。
相反,我所有的结果都是胳膊的身体保持不变,因为720度的旋转变化是相同的。

所以,我尝试了第二个实验。 试图从359度旋转到1度(或-1度到1度)。
就像上面那样,它没有去计划。 当animation运行时,它仅仅从359开始,通过中间的每个角度达到1,而不是359,360(0)和361(1)。
如果你没有明白我的意思,请看下面的图表。

该图

所以,我想知道,是否有一种方法可以在animation曲线中定义这种旋转?

每次我尝试这样做,任何大于360(或小于0)的值都会被0到359.999999 … 999之间的对应terminalreplace。

Unity支持两种animation插值方法:

  • 四元数插值(默认)
  • 欧拉角插值(你所期望的)

四元数插值更加平滑,但是对于旋转超过180度的单个关键帧没有反应,正如你所看到的,无论你的意图如何,它都会select更短的path。

引用Unity手册 :

四元数插值法不能表示大于180度的旋转,因为四边形插值法反过来要短一些。

如果希望旋转大于180度,则必须在其间放置额外的键。

您可以添加更多关键帧,也可以将每个AnimationCurve设置为使用欧拉角插值。 这两个选项听起来有点乏味,所以取决于您的工作stream程。

除了@rutter所提到的之外,您可以将animation视图更改为“曲线”并相应地调整曲线以实现平滑的旋转

也许我有点晚,但我有这个解决scheme:

为每个欧拉角增加一个360度的偏移,现在你不想每次都应用它,所以检查所需角度的旋转是否小于180,即不增加360的偏移,如果不是, ,添加一个360的抵消。@aytimothy