代码之家  ›  专栏  ›  技术社区  ›  tmighty

旋转Y改变X值

  •  1
  • tmighty  · 技术社区  · 6 年前

        float fMinRotationLR = 320f;
    
        float fOldX = Chest.localEulerAngles.x;
    
        if (Chest.localRotation.eulerAngles.y < fMinRotationLR)
        {
             Chest.Rotate(new Vector3(Chest.localRotation.x, fMinRotationLR, Chest.localRotation.z));
        }
    
        float fNewX = Chest.localEulerAngles.x;
    

    在调用“Rotate”之前,fOldX是23,在调用“Rotate”之后,fNewX是0。

    这里发生了什么,我该如何预防?

    我已经试过使用

    Chest.localEulerAngles = new Vector3(Chest.localRotation.x, fMinRotationLR, Chest.localRotation.z);
    

    但这也给出了同样的结果。

    2 回复  |  直到 6 年前
        1
  •  4
  •   AVAVT    6 年前

    transform.Rotate(x,y,z) 或者它的等价物 Vector3 将围绕x轴旋转x度,围绕y轴旋转y度,等等。因此您的原始代码:

    Chest.Rotate(new Vector3(Chest.localRotation.x, fMinRotationLR, Chest.localRotation.z));
    

    Chest.localRotation.x 围绕x轴的度数,刚好足以使其返回到0。

    更深入地说,软件惯例指出,函数/方法通常意味着“一个 SetRotation rotation =

    在本例中,方法名为 Rotate

    您的第二次尝试:

    Chest.localEulerAngles = new Vector3(Chest.localRotation.x, fMinRotationLR, Chest.localRotation.z);
    

    Quaternion )到Chest.localEulerAngles(这是矢量3)。四元数是矢量4,是表示三维旋转状态的另一种方法(更可靠)。它与EulerAngles不同,因此这些值的含义不同。

    你似乎自己解决了这个问题,我只是解释为什么会发生。

    Chest.localEulerAngles = new Vector3(Chest.localRotation.eulerAngles.x, fMinRotationLR, Chest.localRotation.eulerAngles.z);
    
        2
  •  -1
  •   tmighty    6 年前

    我明白了!!!:-)

                Chest.localEulerAngles = new Vector3(Chest.localRotation.eulerAngles.x, fMinRotationLR, Chest.localRotation.eulerAngles.z);