DOTween的学习

什么是DOTween?

用于实现物体的补间动画。DOTween可以很容易的制作出如位移,旋转,缩放等动画效果。它可以给UI以及其他的一些游戏物体加入动画效果。

通用的方式

对变量进行动画

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class GetStart : MonoBehaviour {

    public Vector3 myVector = new Vector3(0, 0, 0);

    // Start is called before the first frame update
    void Start() {
        //对变量做一个动画(通过插值的方式去修改一个值的改变)
        DOTween.To(() => myVector, x => myVector = x, new Vector3(10, 10, 10), 2);
    }

}

在这里插入图片描述

控制Cube动画

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class GetStart : MonoBehaviour {

    public Vector3 myVector = new Vector3(0, 0, 0);

    public Transform cubeTransform;

    // Start is called before the first frame update
    void Start() {
        //对变量做一个动画(通过插值的方式去修改一个值的改变)
        DOTween.To(() => myVector, x => myVector = x, new Vector3(10, 10, 10), 2);
    }

    void Update() {
        //同步值的修改
        cubeTransform.position = myVector;
    }

}

在这里插入图片描述

对UI进行动画

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class GetStart : MonoBehaviour {

    public Vector3 myVector = new Vector3(0, 0, 0);

    public RectTransform imageRectTransform;

    // Start is called before the first frame update
    void Start() {
        //对变量做一个动画(通过插值的方式去修改一个值的改变)
        DOTween.To(() => myVector, x => myVector = x, new Vector3(0, 0, 0), 2);
    }

    void Update() {
        //同步值的修改
        imageRectTransform.localPosition = myVector;
    }

}

在这里插入图片描述

上面的使用动画的方式比较麻烦,需要要定义值,对值进行变化,还要同步值的修改。

快捷方式

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class ButtonController : MonoBehaviour {
    public RectTransform imageRectTransform;


    public void OnButtonClick() {
        //imageRectTransform.DOMove(new Vector3(0, 0, 0), 1); //让imageRectTransform从当前位置动画到(0,0,0)的位置 时间为1s(修改的是世界坐标)

        //因为UI上是局部坐标,所以使用DOLocalMove
        imageRectTransform.DOLocalMove(new Vector3(0, 0, 0), 1);
    }
}

在这里插入图片描述

前放和倒放:DOPlayForward( )和DOPlayBackwards( )

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class ButtonController : MonoBehaviour {
    public RectTransform imageRectTransform;

    //标志位,用来判断是进入还是出去
    public bool isIn=false;


    //放在这,只执行一次,只会出现一个Tweener
    void Start() {
        //因为UI上是局部坐标,所以使用DOLocalMove
        Tweener tweener = imageRectTransform.DOLocalMove(new Vector3(0, 0, 0), 1);//默认动画播放完成会销毁
        //Tweener对象保存这个动画的信息,每次调用do类型的方法都会创建Tweener对象,这个对象是由dotween来管理
        tweener.SetAutoKill(false);//把自动销毁设置为false
        tweener.Pause();//暂停
    }

    public void OnButtonClick() {

        if (!isIn) {
            //进入屏幕
            imageRectTransform.DOPlayForward();//前放
            isIn = true;
        } else {
            //离开屏幕
            imageRectTransform.DOPlayBackwards();//倒放
            isIn = false;
        }
        

    }
}

在这里插入图片描述

From( )

transform.DOMoveX(5, 3).From();:从目标坐标,移动到当前坐标。例如当前坐标(1,0,0),目标坐标(5,0,0),那么就是从(5,0,0)移动到(1,0,0)。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class MyCube : MonoBehaviour {
    
    void Start() {
        //从当前位置移动到目标位置(5,0,0)
        //transform.DOMoveX(5,3);

        //加了From后,从目标位置移动到当前位置
        transform.DOMoveX(5, 3).From();
    }

}

在这里插入图片描述

transform.DOMoveX(5, 3).From(true);:从当前坐标+目标坐标,移动到当前坐标。例如当前坐标(1,0,0),目标坐标(5,0,0),那么就是从(6,0,0)移动到(1,0,0)。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class MyCube : MonoBehaviour {
    
    void Start() {
        

        //从当前坐标+目标坐标,移动到当前坐标。
        transform.DOMoveX(5, 3).From(true);
    }

}

在这里插入图片描述

动画属性设置(动画曲线和事件函数)

在这里插入图片描述

DOTween的动画曲线默认是一个抛物线,效果如上图所示。我们可以使用SetEase( )设置不同的动画曲线。

SetEase( ):动画曲线设置(缓动曲线图

Ease.InBack :函数图可参考链接

效果如图:
在这里插入图片描述

代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class ImageController : MonoBehaviour {

    void Start() {
        Tweener tweener = transform.DOLocalMoveX(0, 5);
        tweener.SetEase(Ease.InBack);
    }

}

Ease.InBounce:函数图链接

效果如图所示:
在这里插入图片描述

Ease.InCirc:函数图链接

效果如图所示。

在这里插入图片描述

其他的可自行测试。

OnComplete():事件函数,动画播放完调用另一个方法。

效果:
在这里插入图片描述

代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class ImageController : MonoBehaviour {

    void Start() {
        Tweener tweener = transform.DOLocalMoveX(0, 5);
        tweener.SetEase(Ease.InBounce);//动画曲线
        tweener.OnComplete(OnTweenComplete);//动画结束事件
    }

    void OnTweenComplete() {
        print("OnComplete");
    }

}

SetLoops():设置动画循环次数

效果:
在这里插入图片描述

代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class ImageController : MonoBehaviour {

    void Start() {
        Tweener tweener = transform.DOLocalMoveX(0, 5);
        tweener.SetEase(Ease.InBounce);//动画曲线
        tweener.SetLoops(2);//循环2次
    }

}

对话框文字动画:DOText( )

效果:
在这里插入图片描述
代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

public class MyText : MonoBehaviour {

    private Text text;

    void Start() {
        text = GetComponent<Text>();

        text.DOText("北冥有鱼,其名为鲲,鲲之大,一锅炖不下,化而为鸟,其名为鹏," +
            "鹏之大,需要两个烧烤架,一个密制一个微辣,来瓶雪花我们勇闯天涯。", 10);//10秒显示文字动画
    }

}

Text字体颜色渐变:DOColor()

效果:
在这里插入图片描述
代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

public class MyText : MonoBehaviour {

    private Text text;

    void Start() {
        text = GetComponent<Text>();

        text.DOColor(Color.red, 2); //2秒内颜色渐变动画
    }

}

Text透明度渐变:DOFade()

效果:
在这里插入图片描述

代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

public class MyText : MonoBehaviour {

    private Text text;

    void Start() {
        text = GetComponent<Text>();

        text.DOFade(1, 10);//第一个参数为透明度,0为不透明,1为完全透明,第二个参数为渐变时间
    }

}

屏幕震动效果:DOShakePosition()

使摄像机发生随机方向上的位移,以此来实现屏幕震动效果。

效果:
在这里插入图片描述

代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class MyShakeCamera : MonoBehaviour {
    // Start is called before the first frame update
    void Start() {
        //transform.DOShakePosition(1);//震动时间1秒,默认方向随机,震动强度为1

        //震动时间1秒,方向为x,y方向,震动强度为3
        transform.DOShakePosition(1, new Vector3(3, 3, 0)); 

    }

}

更多的API可以参考DOTween官方文档

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值