旋转Y更改X值

时间:2019-02-08 00:51:06

标签: c# unity3d

我要在LateUpdate中夹紧动画:

    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 个答案:

答案 0 :(得分:4)

transform.Rotate(x,y,z)或接受Vector3的等效项将很好地将转换围绕x轴旋转x度,围绕y轴旋转y度,依此类推。因此,您的原始代码为:

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

将使胸部沿x轴旋转Chest.localRotation.x度,这足以使其回到0。

更深入地讲,软件约定指出功能/方法通常表示“执行 的动作”。名为SetRotation的方法通常等于rotation =

在这种情况下,方法名称为Rotate,因此根据相同的约定,我们可以推断出它的意思是“旋转变换依据”。 Unity的API很好地遵守了这个约定。

您的第二次尝试:

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

也无效,因为您正在将Chest.localRotation的值(为Quaternion)分配给Chest.localEulerAngles(为Vector3)。四元数是Vector4,是表示3D旋转状态的另一种方法(更可靠)。它与EulerAngles不同,因此值的含义不同。

您似乎已经解决了该问题,我只是在解释为什么会发生这种情况。

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

答案 1 :(得分:-1)

我明白了!!! :-)

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