Unity3D使用DOTween的DOLocalRotate和DORotateQuaternion 旋转X轴的问题

Unity3D使用DOTween的DOLocalRotate 和DORotateQuaternion 旋转X轴的问题

使用DOLocalRotate实现

代码如下:

using UnityEngine;
using DG.Tweening;
public class rotetest : MonoBehaviour
{
    
    
    bool isRotAble = true;
    void Update()
    {
    
    
        if (Input.GetKeyUp(KeyCode.W) && isRotAble) {
    
    
            isRotAble = false;
            Vector3 endv = transform.localEulerAngles + new Vector3(90, 0, 0);
            Debug.Log("transform.localEulerAngles:" + transform.localEulerAngles);
            transform.DOLocalRotate(endv, 1).OnComplete(() => {
    
    
                    isRotAble = true;
                Debug.Log("endv:"+ endv + "   done:" + transform.localEulerAngles);
            });
        }
    }
}

旋转x轴时,会来回旋转:
在这里插入图片描述

查看日志可以看出,transform.localEulerAngles(180,0,0)被转换为:(0.0, 180.0, 180.0),之后就是来回旋转
在这里插入图片描述

设置RotateMode

RotateMode的坑点常用DOTween插件的应该都知道,旋转不正常很多时候都是未设置RotateMode,默认Fast,尝试设置一下试试。

DOLocalRotate(endv, 1, RotateMode.FastBeyond360)//DOLocalRotate(endv, 1);新增RotateMode参数

效果同上

使用DORotateQuaternion 旋转X轴

using UnityEngine;
using DG.Tweening;
public class rotetest : MonoBehaviour
{
    
    
    bool isRotAble = true;
    void Update()
    {
    
    
        if (Input.GetKeyUp(KeyCode.W) && isRotAble) {
    
    
            isRotAble = false;
            Quaternion endv = Quaternion.Euler(transform.localEulerAngles + new Vector3(90, 0, 0));
            Debug.Log("transform.localEulerAngles:" + transform.localEulerAngles);
            transform.DOLocalRotateQuaternion(endv, 1).OnComplete(() => {
    
    
                isRotAble = true;
                Debug.Log("endv:"+ endv + "   done:" + transform.localEulerAngles);
            });
        }
    }
}

效果也一样

尝试旋转Y|Z轴

旋转Y轴:

 Quaternion endv = Quaternion.Euler(transform.localEulerAngles + new Vector3(0, 90, 0));

可以正常旋转:
在这里插入图片描述

结论

不管是DORotateQuaternion 方法还是DOLocalRotate都无法正常持续旋转X轴,而YZ轴的旋转都正常。

感觉是DOTween插件的bug?具体原因不得而知。。。。。

望知道的大佬指点!!!

旋转X轴的方法

在旋转对象的外层新增个节点,将旋转对象通过设置rotation进行旋转,将旋转的对象的X轴对准外层节点的YZ轴,然后旋转外层节点的YZ轴即可。

有更多好的方法欢迎大家分享!

猜你喜欢

转载自blog.csdn.net/qq_33789001/article/details/112605212