资讯动态

Unity 动画利器:DOTween 从安装到进阶

发布时间:2026/8/22 10:42:34 来源:尧图企业网站定制
DOTween 是 Unity 生态中最受欢迎的补间动画插件没有之一。它用极简的 API 解决了 Unity 原生动画系统繁琐、不易脚本控制的问题。无论是 UI 弹窗、角色移动、摄像机漫游还是复杂的时序动画DOTween 都能让你几行代码搞定。一、安装与配置1.1 安装导入方式一通过 Package Manager打开Window→Package Manager点击左上角的号选择Add package by name...输入包名com.demigiant.dotween点击Add等待几秒即可自动下载并导入。方式二手动导入访问 DOTween 官网 下载.unitypackage文件双击该文件或将其拖入 Unity 的Project窗口在弹出的 Import 对话框中全选点击 Import。1.2 安装后的关键一步运行 Setup必须导入完成后并不会自动生效你需要运行一次Setup来激活 DOTween。这一步是编辑器环境配置不是代码初始化。具体操作导入后Unity 通常会自动弹出一个DOTween Setup Wizard窗口。打开菜单栏Tools→Demigiant→DOTween Utility Panel。在面板中点击Setup DOTween。会弹出一个新窗口里面列出了一些可选组件如DOTweenAnimation、DOTweenPro等。保持默认全选然后点击Apply即可。完成上述操作后DOTween 会自动创建一个全局管理对象运行时可见不需要你手动挂载任何脚本到场景中。1.3 关于“初始化”DOTween 会在你第一次调用任何动画方法如transform.DOMove时使用默认设置自动完成初始化。你唯一需要确保的是上面第 1.2 步的Setup 已经运行过否则动画将无法执行。如果你硬要在代码中调用DOTween.Init()它只会在自动初始化之前才有意义一旦补间已经创建再调用就不会生效。所以大多数情况下你完全不需要写这行代码。那么什么时候需要配置代码呢如果你想修改全局默认参数比如默认缓动类型、容量大小可以在任意脚本的Awake或Start中设置using DG.Tweening; void Awake() { // 设置全局默认缓动所有动画默认使用 OutQuad DOTween.defaultEaseType Ease.OutQuad; // 调整同时运行的补间数量上限避免频繁扩容推荐在项目启动时设置 DOTween.SetTweensCapacity(500, 100); // 可选关闭日志、开启安全模式等 // DOTween.Init(true, true, LogBehaviour.Default); }二、基础操作2.1 引入命名空间所有使用 DOTween 的脚本顶部都必须添加using DG.Tweening;2.2 最常用的变换动画public class BasicTween : MonoBehaviour { void Start() { // 2 秒内移动到 (5,0,0) transform.DOMove(new Vector3(5, 0, 0), 2f); // 1.5 秒内旋转到 (0,180,0) transform.DORotate(new Vector3(0, 180, 0), 1.5f); // 1 秒内放大到 2 倍 transform.DOScale(Vector3.one * 2, 1f); } }常用方法速查表方法作用DOMove/DOLocalMove世界/本地移动DORotate/DOLocalRotate世界/本地旋转DOScale缩放DOFade需配合CanvasGroup透明度渐变DOColor颜色变化DOJump跳跃弧线运动2.3 链式调用与缓动EasingDOTween 支持流畅的链式写法并内置数十种缓动函数void Start() { transform.DOMoveX(5, 1f) .SetEase(Ease.OutBounce) // 弹跳效果 .SetDelay(0.5f) // 延迟 0.5 秒 .SetLoops(2, LoopType.Yoyo) // 循环 2 次来回 .OnComplete(() Debug.Log(动画结束)); }常用缓动速记Ease.OutBack回弹适合 UI 弹出Ease.OutBounce弹跳Ease.InOutQuad平滑加速减速Ease.Linear匀速2.4 控制动画播放Tween myTween transform.DOMove(Vector3.one, 2f); myTween.Play(); // 播放 myTween.Pause(); // 暂停 myTween.Restart(); // 重新开始 myTween.Kill(); // 立即终止并释放2.5 DOTween.To 自定义值动画当你需要对任意变量做动画时DOTween.To是万能法宝public float myFloat 0; public Vector3 myVec Vector3.zero; void Start() { DOTween.To(() myFloat, x myFloat x, 10, 3f); DOTween.To(() myVec, v myVec v, new Vector3(5,5,5), 2f); }三、进阶操作3.1 Sequence 序列动画 – 编排复杂时序Sequence能让你像导演一样控制多个动画的顺序和并行关系。void Start() { Sequence seq DOTween.Sequence(); // 第一步移动 seq.Append(transform.DOMoveX(5, 1f)); // 移动的同时缩放并行 seq.Join(transform.DOScale(2f, 1f)); // 接着旋转 seq.Append(transform.DORotate(new Vector3(0, 180, 0), 0.5f)); // 插入一个颜色变化从第 0.5 秒开始 seq.Insert(0.5f, GetComponentRenderer().material.DOColor(Color.red, 0.3f)); seq.Play(); }Append顺序添加等上一个完成Join并行与上一个同时开始Insert在指定时间点插入实战弹窗入场动画public class Popup : MonoBehaviour { public RectTransform rect; public CanvasGroup group; public void Show() { // 重置初始状态 rect.localScale Vector3.one * 0.8f; group.alpha 0; rect.anchoredPosition new Vector2(0, 50); Sequence seq DOTween.Sequence(); seq.Join(rect.DOScale(1f, 0.3f).SetEase(Ease.OutBack)); seq.Join(group.DOFade(1f, 0.3f)); seq.Join(rect.DOAnchorPosY(0, 0.3f).SetEase(Ease.OutSine)); seq.Play(); } }3.2 回调系统 – 监听动画每个时刻transform.DOMove(Vector3.one, 2f) .OnStart(() Debug.Log(开始)) .OnUpdate(() Debug.Log(每帧更新)) .OnComplete(() { Debug.Log(完成销毁对象); Destroy(gameObject); }) .OnKill(() Debug.Log(被终止));3.3 From() 反向动画让动画从目标值“飞回”当前值常用于入场效果// 从 (5,0,0) 移动到初始位置即从右方飞入 transform.DOMove(new Vector3(5,0,0), 1f).From(); // 从透明变为不透明淡入 canvasGroup.DOFade(0, 1f).From();3.4 DOPath 路径动画让物体沿指定路径移动支持 Catmull-Rom 平滑曲线Vector3[] path new Vector3[] { new Vector3(0,0,0), new Vector3(5,2,0), new Vector3(10,0,0), new Vector3(5,-2,0) }; transform.DOPath(path, 3f, PathType.CatmullRom) .SetEase(Ease.Linear) .SetLoops(-1, LoopType.Yoyo); // 无限循环来回3.5 DOTweenAnimation 组件无代码动画DOTween 自带可视化组件可以直接挂在 GameObject 上在 Inspector 里配置目标值、时长、缓动等适合设计师或快速原型。添加组件Add Component→ 搜索DOTweenAnimation配置好后勾选AutoPlay即可在运行时自动播放。你也可以在代码中动态添加并配置DOTweenAnimation da gameObject.AddComponentDOTweenAnimation(); da.animationType DOTweenAnimationType.LocalMove; da.targetValue new Vector3(5,0,0); da.duration 1f; da.easeType Ease.OutQuad; da.autoPlay true;3.6 性能优化与资源清理设置容量在项目启动时调用DOTween.SetTweensCapacity(500, 100)防止动态扩容产生 GC。及时 Kill当对象被销毁时最好调用transform.DOKill()或DOTween.KillAll()避免残留补间报错。使用SetAutoKill(true)让补间完成后自动销毁无需手动管理。四、常见问题与排坑现象可能原因解决办法导入后报错CS0246未运行 Setup运行 Tools → DOTween Utility Panel → Setup动画不播放忘记加using DG.Tweening补上命名空间对象销毁后报错动画未 Kill在OnDestroy中调用DOKill()内存占用高未设置容量调用SetTweensCapacity并开启 AutoKill低版本 Unity 无法导入版本不兼容去官网下载对应版本的.unitypackage

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价