【问题标题】:Change transform rotation from X to Z axis将变换旋转从 X 轴更改为 Z 轴
【发布时间】:2014-11-26 01:08:18
【问题描述】:

我有一个围绕 X 轴旋转的变换。但是在将此旋转转移到另一个变换时,我希望它进行完全相同的旋转。但随后围绕 Z 轴。

但是,这种旋转不是“旋转”,它只是从外部编辑旋转的变换。所以我必须旋转原始变换以匹配第二个变换,但要考虑旋转。

下图中的轴:RED = X,GREEN = Y,BLUE = Z

旋转原稿:

之后应该有的旋转:

逐帧处理的正确方法是什么?

提前致谢,

笑脸

【问题讨论】:

    标签: unity3d rotation quaternions


    【解决方案1】:

    我可以给你一个答案,解决将旋转从一个轴更改为另一个轴的一般问题。

    每个变换对象都有一个transform.localRotation 属性,表示变换的方向,相对于父对象的方向。如果变换没有父级,则此方向是相对于世界空间的。

    Quaternion是用来表示旋转的数据类型,它有一个有用的方法叫做ToAngleAxis

    float angle;
    Vector3 axis;
    transform.localRotation.ToAngleAxis(out angle, out axis);
    

    将变量angleaxis 设置为localRotation 的角度和轴。 out 部分表示您正在传递一个旨在由函数设置的变量,而不是用作输入。

    在这种情况下,angle 变量是您要实际使用的部分。如果您使用 Quaternion.AngleAxis,提供此 angle 值和所需的轴,您将获得与所需参数匹配的新旋转。

    例如:要将transform1 的任何旋转更改为transform2 上的 Z 轴旋转,您可以使用

    float angle;
    float axis;
    transform1.localRotation.ToAngleAxis(out angle, out axis);
    transform2.localRotation = Quaternion.AngleAxis(angle, Vector3.forward);
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2021-07-12
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 2011-03-14
      • 2012-01-06
      • 2019-01-10
      相关资源
      最近更新 更多