DoTween 使用文档
DoTween 是 Unity 中非常流行的动画补间插件。它通过链式调用方式,让开发者可以快速创建平滑、自然的动画效果。本文将介绍 DoTween 的基础用法、缓动曲线原理(包含常见缓动曲线的数学公式与参数说明)、案例演示以及一些常见坑点的解决方案,帮助你在项目中高效实现动画效果。
目录
- DoTween 简介
- 安装与配置
- 基本用法
- 缓动曲线详解
- Linear 线性
- EaseInQuad / EaseOutQuad / EaseInOutQuad
- EaseInCubic / EaseOutCubic / EaseInOutCubic
- 其他常见缓动曲线
- 案例演示
- 常见坑点及解决方案
- 总结
DoTween 简介
DoTween 是一个轻量级、易用且高效的动画补间库。它支持对物体的位置、旋转、缩放以及颜色、透明度等属性进行动画补间,能够大大简化动画代码,并让动画效果更加流畅自然。
安装与配置
- 下载插件: 可通过 Unity Asset Store 下载 DoTween 免费版或 Pro 版。
- 导入项目: 将下载的
.unitypackage
导入 Unity 项目。 - 初始化: 在项目启动时调用
DOTween.Init();
初始化 DoTween(通常在启动脚本中调用)。
using DG.Tweening;
using UnityEngine;
public class DoTweenInit : MonoBehaviour
{
void Start()
{
DOTween.Init();
}
}
基本用法
DoTween 采用链式调用风格,使用非常直观。例如,下例将让一个物体在 2 秒内移动到目标位置,并使用缓动曲线控制运动效果:
using DG.Tweening;
using UnityEngine;
public class MoveExample : MonoBehaviour
{
void Start()
{
transform.DOMove(new Vector3(5, 0, 0), 2f)
.SetEase(Ease.OutBack)
.OnComplete(() => Debug.Log("移动完成!"));
}
}
缓动曲线详解
DoTween 内置了大量缓动曲线,能让动画效果更有层次感。常用的缓动曲线主要分为以下几类。
Linear 线性
- 公式:
f(t) = t
- 说明: 匀速运动,没有加速或减速效果,适合需要恒定速度的动画。
EaseInQuad / EaseOutQuad / EaseInOutQuad
EaseInQuad
- 公式:
f(t) = t²
- 说明: 开始时较慢,逐渐加速,适用于需要平滑启动的动画。
EaseOutQuad
- 公式:
f(t) = -t * (t - 2)
- 说明: 起始较快,末尾逐渐减速,适合自然结束的动画效果。
EaseInOutQuad
- 公式: 前半段加速,后半段减速,整体平滑过渡。
EaseInCubic / EaseOutCubic / EaseInOutCubic
EaseInCubic
- 公式:
f(t) = t³
- 说明: 比 Quad 更缓慢启动,启动阶段更柔和。
EaseOutCubic
- 公式:
f(t) = (t - 1)³ + 1
- 说明: 开始较快,后期快速减速,适合结束时需要平滑衔接的动画。
EaseInOutCubic
- 公式: 前后阶段平滑,中间加速,适合整体缓动效果的动画。
其他常见缓动曲线
- Sine 系列: 使用正弦函数实现平滑过渡。
- Expo 系列: 使用指数函数,变化较快。
- Back 系列: 超出目标值后回弹,适用于弹性动画。
案例演示
1. 组合动画 —— 平移、缩放和旋转
using DG.Tweening;
using UnityEngine;
public class TransformTweenExample : MonoBehaviour
{
void Start()
{
Sequence seq = DOTween.Sequence();
seq.Append(transform.DOMove(new Vector3(3, 2, 0), 1.5f).SetEase(Ease.OutQuad));
seq.Join(transform.DOScale(1.5f, 1.5f).SetEase(Ease.InOutSine));
seq.Join(transform.DORotate(new Vector3(0, 90, 0), 1.5f).SetEase(Ease.OutCubic));
seq.OnComplete(() => Debug.Log("组合动画完成!"));
}
}
2. UI 数字滚动动画
using DG.Tweening;
using UnityEngine;
using UnityEngine.UI;
public class NumberTweenExample : MonoBehaviour
{
public Text numberText;
void Start()
{
DOTween.To(() => 0, x => {
numberText.text = Mathf.FloorToInt(x).ToString();
}, 1000, 2f)
.SetEase(Ease.OutExpo)
.OnComplete(() => Debug.Log("数字动画完成!"));
}
}
常见坑点及解决方案
1. 动画冲突或重复播放
- 使用
SetId()
为动画设置唯一标识。 - 使用
DOTween.Kill(id)
清除旧动画。
2. 场景切换后动画失效
- 使用
SetAutoKill(false)
防止动画自动销毁。
3. 时间缩放问题
- 使用
SetUpdate(true)
使动画不受 Time.timeScale 影响。
4. 内存泄漏与性能问题
- 使用
SetRecyclable(true)
使动画在播放完后回收重用。
总结
DoTween 通过简单直观的链式调用,极大地简化了动画制作过程。无论是对 Transform、UI、材质等属性的动画控制,还是复杂的序列动画,DoTween 都能快速满足需求。在开发过程中,合理使用动画标识、管理生命周期以及设置更新模式,可以有效避免常见坑点,保证动画的稳定运行。