事件

OnComplete

动画完成后执行某些事件

transform.DOMove(目标点, 持续时间).SetEase(缓动类型).OnComplete(() =>
{
    // 动画完成后执行的逻辑

});

WaitForCompletion

在协程中等待动画触发,调用该事件

using UnityEngine;
using DG.Tweening;

public class Example : MonoBehaviour
{
    void Start()
    {
        // 启动协程
        StartCoroutine(PlayAnimation());
    }

    IEnumerator PlayAnimation()
    {
        // 创建一个简单的Tween动画
        transform.DOMove(new Vector3(5, 0, 0), 2); // 移动到 (5, 0, 0),持续时间为2秒

        // 等待动画完成
        yield return transform.DOTweenAnimation().WaitForCompletion();

        // 动画完成后执行的代码
        Debug.Log("动画已完成!");
    }
}

动画缓动Ease

基本语法

public Tweener SetEase(Ease easeType); 

transform.DOMove(new Vector3(5, 0, 0), 2).SetEase(Ease.Linear);

Ease.OutBack:动画结束后,有轻微的回弹效果

Ease.Linear:匀速的效果

Ease.OutQuad:先快后慢的效果

类似橡皮筋的弹性效果

// 第二个参数:物体超过目标点的最大距离,默认为1,超过1,回弹幅度会变大,小于1,回弹弧度会变小
// 第三个参数:每次震荡的时间长度,值越小,震荡的频率越快
transform.DOMove(目标点, 持续时间).SetEase(Ease.OutElastic, 控制弹性动画的振幅, 控制弹性动画的周期);

动画片段

移动

沿着指定的方向移动一段距离

transform.DOBlendableMoveBy(方向, 持续的时间);

沿着目标点移动

transform.DOMove(目标点, 持续的时间)

旋转

让一个物体进行缩放

transform.DOScale(最终大小, 缩放时间)

缩放

// 从小变大的效果
// 1. 让transform.localScale = Vector3.zero;
// 2. 进行缩放

transform.DOScale(目标缩放,持续时间);

跳跃

让一个物体从一个位置跳跃到另外一个物品中

target.DOJump(目标点, 跳跃的高度, 跳跃的次数, 每次回弹的持续时间, 结束后是否需要平滑过渡)

插值

从一个值到达另外一个值的过程

DOTween.To(getter:获得当前值的方法,setter: 设置一个新的值的方法,目标值,持续时间).OnUpdate(()=> 每帧都会在这里执行);

案例驱动:金币从0~100动态变化

// 示例:从数字0到数字100,显示变化的过程
public class Example : MonoBehaviour
{
    public TextMeshProUGUIText numberText;
    private int _currentValue = 0;
    private int _targetValue = 100;

    void Start()
    {
        // 创建一个从 0 到 100 的动画,持续时间为 2 秒
        DOTween.To(
            getter: () => _currentValue,         // 获取当前值
            setter: (value) => _currentValue = value, // 设置新值
            _targetValue,                       // 目标值
            2                       // 持续时间
        )
        .SetEase(Ease.Linear)                    // 设置缓动类型为线性
        .OnUpdate(() => {  numberText.text = _currentValue.ToString();  });// 在动画更新时打印当前值
        .OnComplete(() => Debug.Log("Animation Complete!")); // 动画完成时的回调
    }
}

序列

将多个动画片段组成一个整体

  • 创建一个序列

Sequence sequence = DOTween.Sequence();
  • 将一个动画片段添加到一个序列中

Sequence sequence = DOTween.Sequence();
sequence.Append(transform.DOMove(new Vector3(0, 5, 0), 2)); // 第一步:向上移动
sequence.Append(transform.DOMove(new Vector3(0, 0, 0), 2)); // 第二步:向下移动
  • 将一个自定义的逻辑添加到一个序列中

// 将一段音频添加到序列中
sequence.AppendCallback(() => AudioSource.Play());