You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.Euler
  • PerformVaultRotation方法直接传入度数给rotationData.Euler

两者运行均正常,但不确定其中是否存在错误,疑问是:DOTween会自动处理角度与弧度的转换,还是当前正常运行只是巧合?


解答

核心问题不在DOTween,而在于Quaternion.Euler(这里rotationData应为Quaternion类的引用)的参数要求:它接收的是度数,而非弧度。

  1. 第二个方法的用法是正确的:直接传入vaultAngle(度数)生成目标四元数,符合Quaternion.Euler的参数规范,DOTween仅负责将物体旋转插值到该四元数状态,不涉及角度/弧度转换。

  2. 第一个方法的Mathf.Deg2Rad是多余的,当前能运行属于巧合:

    • controller.instance.GetMovementInput().x返回的是-1到1的归一化输入值,乘以angleFactor(应为你定义的最大旋转度数)后,再乘以Mathf.Deg2Rad会把度数转成弧度,但Quaternion.Euler会把这个弧度值当成度数处理。
    • 能正常运行的原因是你设置的angleFactor数值刚好抵消了转换误差(比如angleFactor被设为目标度数 * 180 / Mathf.PI),导致最终传入Quaternion.Euler的数值刚好是预期的度数。
  3. 正确的写法:
    去掉ProcessRotationAnimation中的Mathf.Deg2Rad,直接使用:

    rotationData.Euler(0, 0, angleFactor * -controller.instance.GetMovementInput().x)
    

    这样输入x从-1到1时,物体旋转角度对应-angleFactor到angleFactor度,逻辑清晰且符合API规范。


内容的提问来源于stack exchange,提问作者Ayush Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 05:38:18