我要在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);
但是给出相同的结果。
谢谢您的帮助。
答案 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);