事件
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());
评论区