代码如下:
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);
});
}
}
}
查看日志可以看出,transform.localEulerAngles(180,0,0)被转换为:(0.0, 180.0, 180.0),之后就是来回旋转
RotateMode的坑点常用DOTween插件的应该都知道,旋转不正常很多时候都是未设置RotateMode,默认Fast,尝试设置一下试试。
DOLocalRotate(endv, 1, RotateMode.FastBeyond360)//DOLocalRotate(endv, 1);新增RotateMode参数
效果同上
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轴:
Quaternion endv = Quaternion.Euler(transform.localEulerAngles + new Vector3(0, 90, 0));
不管是DORotateQuaternion 方法还是DOLocalRotate都无法正常持续旋转X轴,而YZ轴的旋转都正常。
感觉是DOTween插件的bug?具体原因不得而知。。。。。
望知道的大佬指点!!!
在旋转对象的外层新增个节点,将旋转对象通过设置rotation进行旋转,将旋转的对象的X轴对准外层节点的YZ轴,然后旋转外层节点的YZ轴即可。
有更多好的方法欢迎大家分享!