Unity DOTween库中旋转动画为何有的用角度有的用弧度?
Unity中DOTween旋转动画的角度与弧度使用疑问
在Unity中使用DOTween制作物体旋转动画时,对以下代码中角度与弧度的使用存在困惑:
public void ProcessRotationAnimation(bool isActivated) { if (isActivated) { animObject.DOLocalRotateQuaternion(rotationData.Euler(0, 0, angleFactor * -controller.instance.GetMovementInput().x * Mathf.Deg2Rad), rotationDuration).SetEase(Ease.InOutSine); } else { animObject.DOLocalRotateQuaternion(rotationData.identity, rotationDuration).SetEase(Ease.InOutSine); } } public Tween PerformVaultRotation(float duration) { Quaternion vaultRotation = rotationData.Euler(0, 0, vaultAngle); return animObject.DOLocalRotateQuaternion(vaultRotation, duration).SetLoops(2, LoopType.Yoyo).SetEase(Ease.OutSine); }
两个方法的差异:
ProcessRotationAnimation方法使用Mathf.Deg2Rad将计算值转换为弧度后传入rotationData.EulerPerformVaultRotation方法直接传入度数给rotationData.Euler
两者运行均正常,但不确定其中是否存在错误,疑问是:DOTween会自动处理角度与弧度的转换,还是当前正常运行只是巧合?
解答
核心问题不在DOTween,而在于Quaternion.Euler(这里rotationData应为Quaternion类的引用)的参数要求:它接收的是度数,而非弧度。
第二个方法的用法是正确的:直接传入
vaultAngle(度数)生成目标四元数,符合Quaternion.Euler的参数规范,DOTween仅负责将物体旋转插值到该四元数状态,不涉及角度/弧度转换。第一个方法的
Mathf.Deg2Rad是多余的,当前能运行属于巧合:controller.instance.GetMovementInput().x返回的是-1到1的归一化输入值,乘以angleFactor(应为你定义的最大旋转度数)后,再乘以Mathf.Deg2Rad会把度数转成弧度,但Quaternion.Euler会把这个弧度值当成度数处理。- 能正常运行的原因是你设置的
angleFactor数值刚好抵消了转换误差(比如angleFactor被设为目标度数 * 180 / Mathf.PI),导致最终传入Quaternion.Euler的数值刚好是预期的度数。
正确的写法:
去掉ProcessRotationAnimation中的Mathf.Deg2Rad,直接使用:rotationData.Euler(0, 0, angleFactor * -controller.instance.GetMovementInput().x)这样输入x从-1到1时,物体旋转角度对应
-angleFactor到angleFactor度,逻辑清晰且符合API规范。
内容的提问来源于stack exchange,提问作者Ayush Sharma
相关产品推荐
相关产品推荐

