C# 旋转Y改变X值

C# 旋转Y改变X值,c#,unity3d,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.loc

我正在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;
但这也给出了同样的结果

谢谢你的帮助。

我知道了!!!:-)

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的值(即a)指定给Chest.LocalEuleRanges(即矢量3)。四元数是矢量4,是表示三维旋转状态的另一种方法(更可靠)。它与EulerAngles不同,因此这些值的含义不同

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

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

你应该解释你所做的改变,而不是说“我明白了”,这样其他人就可以理解你在做什么!为了完整起见,你能把我的解决方案包括在你的答案中吗?我想其他读者可能会搞不清楚什么是真正有效的。再次感谢你!
Chest.localEulerAngles = new Vector3(Chest.localRotation.x, fMinRotationLR, Chest.localRotation.z);
Chest.localEulerAngles = new Vector3(Chest.localRotation.eulerAngles.x, fMinRotationLR, Chest.localRotation.eulerAngles.z);