一、什么是 DOTween?
DOTween 是一个高效、轻量级的 Unity 动画引擎,专门用于简化补间动画的创建和管理。它支持各种动画效果,如移动、旋转、缩放、渐变和数值变化等。
二、DOTween 安装
-
Unity Package Manager 安装
-
在 Unity 中,打开
Window
>Package Manager
-
选择“Add package from git URL”,输入以下 URL:
https://github.com/Demigiant/dotween
-
-
直接导入 .unitypackage 文件
-
前往 DOTween 官网 下载最新的 .unitypackage 文件。
-
在 Unity 中,
Assets
>Import Package
>Custom Package
,选择 .unitypackage 文件导入。
-
1. 基本动画类型
方法 | 说明 | 示例 |
---|---|---|
DOMove |
将物体移动到目标位置 | transform.DOMove(new Vector3(0, 5, 0), 2f); |
DORotate |
旋转物体 | transform.DORotate(new Vector3(0, 180, 0), 1f); |
DOScale |
缩放物体 | transform.DOScale(new Vector3(2, 2, 2), 1f); |
DOColor |
更改颜色(适用于 SpriteRenderer、Image) | spriteRenderer.DOColor(Color.red, 1f); |
DOFade |
修改透明度 | image.DOFade(0, 2f); |
DOText |
修改 Text 组件的文本 | text.DOText("新文本内容", 2f); |
DOPath |
沿路径移动物体 | transform.DOPath(new Vector3[]{point1, point2}, 2f); |
DOJump |
模拟跳跃运动 | transform.DOJump(new Vector3(2, 3, 0), 2, 2, 1f); |
四、补间动画的控制
1. 动画的链式调用
-
描述:链式调用可以将多个动画效果连接起来。
-
示例:
transform.DOMove(new Vector3(0, 3, 0), 1f)
.SetEase(Ease.InOutQuad)
.SetLoops(2, LoopType.Yoyo)
.OnComplete(() => Debug.Log("动画完成"));
2. 动画的控制方法
方法 | 说明 |
---|---|
Play() |
播放补间动画 |
Pause() |
暂停补间动画 |
Restart() |
重新开始补间动画 |
Kill() |
停止并销毁补间动画 |
Rewind() |
倒带补间动画 |
Complete() |
立即完成补间动画 |
TogglePause() |
切换暂停和播放状态 |
五、动画的高级配置
1. Ease 曲线
-
描述:决定动画的变化曲线。
-
常见类型:
类型 说明 Ease.Linear
线性运动 Ease.InOutQuad
平滑的加速和减速 Ease.InBounce
反弹进入 Ease.OutBounce
反弹退出 -
示例:
transform.DOMove(new Vector3(0, 5, 0), 2f).SetEase(Ease.InOutBack);
2. Loop 循环
-
循环类型:
类型 说明 LoopType.Restart
重头开始动画 LoopType.Yoyo
往返运动 LoopType.Incremental
递增运动 -
示例:
transform.DOMove(new Vector3(0, 5, 0), 2f).SetLoops(3, LoopType.Yoyo);
六、动画事件
方法 | 说明 |
---|---|
OnComplete() |
动画完成时调用 |
OnKill() |
动画被销毁时调用 |
OnPause() |
动画暂停时调用 |
OnPlay() |
动画播放时调用 |
OnUpdate() |
每帧调用 |
-
示例:
transform.DOMove(new Vector3(0, 3, 0), 2f)
.OnStart(() => Debug.Log("动画开始"))
.OnComplete(() => Debug.Log("动画完成"));
七、DOTween Pro 专属功能
1. DOTween Pro 的额外功能
-
Visual Path Editor:可视化路径编辑器。
-
Unity Timeline 支持:在 Unity 的 Timeline 中使用 DOTween。
-
TextMesh Pro 支持:为 TextMesh Pro 组件添加动画支持。
八、常见用法示例
1. 物体循环移动
transform.DOMove(new Vector3(3, 0, 0), 2f)
.SetLoops(-1, LoopType.Yoyo);
2. 透明度渐变
image.DOFade(0, 2f)
.SetEase(Ease.InOutSine);
3. 连续的补间动画
transform.DOMove(new Vector3(0, 3, 0), 1f)
.OnComplete(() =>
{
transform.DORotate(new Vector3(0, 180, 0), 1f);
});
4. 基于路径的动画
Vector3[] path = new Vector3[] { new Vector3(0, 1, 0), new Vector3(1, 2, 0), new Vector3(2, 1, 0) };
transform.DOPath(path, 2f, PathType.CatmullRom);
九、实用技巧
1. 动画的全局时间缩放
-
作用:控制所有补间动画的时间流速。
-
示例:
DOTween.timeScale = 0.5f; // 使所有动画变慢
2. 动画分组控制
-
作用:对一组补间动画的统一控制。
-
示例:
Sequence sequence = DOTween.Sequence();
sequence.Append(transform.DOMove(new Vector3(0, 3, 0), 1f));
sequence.Join(transform.DOScale(new Vector3(2, 2, 2), 1f));
sequence.Play();
十、常见问题和解决方法
问题 | 可能原因 | 解决方法 |
---|---|---|
动画没有播放 | 未调用 Play() | 确保链式调用了 Play() |
动画太快或太慢 | TimeScale 值被修改 | 检查 Time.timeScale 值 |
动画不流畅 | 帧率较低或性能瓶颈 | 使用“Ease”控制曲线流畅度 |
动画被意外停止 | 其他脚本调用 Kill | 检查是否调用了 Kill() |