开始之前
什么是Tween(补间)
补间,一般指补间动画,例如unity的Animation窗口,插入两个图片或者对一个物体做变换时,unity会根据两个状态之间的帧,创建相应的动画,这就是补间。
1.在资源商店下载并安装DOTween:DOTween
在packageManager导入到要使用的项目中。
安装完成后点击 Setup DOTween 会自动根据unity的版本导入/重新导入内部的一些文件,激活或者停用一些模块。
如果不小心关闭或者关闭了想再次打开,你可以在unity的工具栏的Tools/Demigiant/DOTween Utility Panel 打开该面板。
2、在使用DOTween需引入对应的命名空间:
using DG.Tweening;//DoTween 名称空间
3、初始化DOTween,设置一些全局设置。
如果在每次创建DOTween脚本时不调用该方法进行初始化,DOTween也会根据默认的设置自动进行初始化设置 ,如果进行初始化必须在每次使用前调用该方法,否则不会有任何、效果。默认的设定可以在初始面板中的首选项(Preferences)中更改。
DOTween.Init();
参数说明
recycleAllByDefault
(默认值: false
)
- 功能:
- 如果设置为
true
,所有的 tweens(动画)在完成后将自动回收(即进入对象池),以减少内存分配的压力。这对于需要频繁创建和销毁 tweens 的项目非常有用,可以显著减少垃圾回收的次数。 - 注意:当一个 tween 被回收时,如果需要再次使用它,必须通过
DOTween.Restart
或类似的方法来复用。
- 如果设置为
useSafeMode
(默认值: true
)
- 功能:
- 如果设置为
true
,DOTween 会在执行 tweens 时检查并处理异常(例如,目标对象被销毁时),从而避免因为异常导致游戏崩溃。虽然Safe Mode
会略微影响性能,但它确保了游戏的稳定性。 - 如果项目对性能有极高要求,并且开发者能确保不会发生潜在的异常(例如,目标对象在 tween 运行时被销毁),可以将此参数设置为
false
以提高性能。
- 如果设置为
logBehaviour
(默认值: LogBehaviour.ErrorsOnly
)
- 功能:
- 这个参数控制 DOTween 的日志记录行为,主要用于调试和错误排查。
- 可选值:
LogBehaviour.None
:不记录任何日志信息。LogBehaviour.ErrorsOnly
:仅记录错误信息。LogBehaviour.Verbose
:记录所有详细信息,包括警告和调试信息
命名法
这些术语是 DOTween 中常用的概念,以下是这些术语的详细解释:
1. Tweener
- 定义:
Tweener
是 DOTween 中最基础的补间动画类型。它用于控制一个值(通常是对象的属性,比如位置、颜色、缩放等)并为其生成动画效果。 - 用途: 当你想要一个简单的、单独的动画效果(比如一个对象在屏幕上移动),你通常会使用
Tweener
。 - 示例:
Tweener moveTweener = transform.DOMove(new Vector3(10, 0, 0), 2);
这里,moveTweener
是一个 Tweener
,它将控制对象的 transform
在 2 秒内移动到指定位置。
2. Sequence
- 定义:
Sequence
是一种用于控制多个Tweener
或Sequence
的高级动画类型。它可以将多个动画按顺序或同时运行,并提供更复杂的动画控制。 - 用途: 当你需要一组连续的或组合的动画(如对象先移动,然后旋转),你可以使用
Sequence
来组织这些动画。 - 示例:
Sequence mySequence = DOTween.Sequence();
mySequence.Append(transform.DOMove(new Vector3(10, 0, 0), 2));
mySequence.Append(transform.DORotate(new Vector3(0, 180, 0), 1));
这里,mySequence
是一个 Sequence
,它首先移动对象,然后在移动完成后旋转对象。
3. Tween
- 定义:
Tween
是一个通用术语,用于表示任何类型的补间动画,包含了Tweener
和Sequence
。在编写代码时,如果某个 API 需要一个Tween
对象,你可以传入一个Tweener
或Sequence
对象。 - 用途:
Tween
作为基类用于处理所有类型的补间动画,无论是简单的补间动画还是复杂的序列动画。 - 示例:
Tween myTween = transform.DOMove(new Vector3(10, 0, 0), 2);
这里,myTween
是一个 Tween
,它可以是任何类型的动画(在这个例子中是一个 Tweener
)。
4. Nested Tween
- 定义:
Nested Tween
是指嵌套在Sequence
中的Tweener
或其他Sequence
。它们作为序列的一部分被控制,可以按顺序执行或与其他补间动画同时执行。 - 用途: 当你在一个
Sequence
中添加多个Tweener
或Sequence
时,这些子动画就成为了Nested Tween
。 - 示例:
Sequence mySequence = DOTween.Sequence();
Tweener moveTweener = transform.DOMove(new Vector3(10, 0, 0), 2);
mySequence.Append(moveTweener); // moveTweener 是一个嵌套补间
在这个示例中,moveTweener
是一个嵌套在 mySequence
中的补间。
总结
- Tweener: 用于生成和控制单一动画效果的补间。
- Sequence: 用于组织和控制多个动画效果的序列,可以顺序或并行运行多个动画。
- Tween: 一个通用术语,表示所有的补间动画和序列动画。
- Nested Tween: 嵌套在
Sequence
中的补间动画或序列动画。
前缀
- DO:所有快速实现一些补间效果的前缀(如变换Transform)的前缀。
- Set:对当前效果进行设置。
- On:一系列的回调。
基本方法
DO:前缀
在使用 DOTween 时,DO
前缀代表了 DOTween 提供的动画方法,这些方法用于处理各种类型的动画效果。以下是带有 DO
前缀的常见方法列表及其功能说明:
1. DOFade
- 功能: 渐变改变目标对象的透明度(Alpha 值)。
- 适用对象:
CanvasGroup
,Image
,Text
,SpriteRenderer
,Material
- 示例:
csharp image.DOFade(0.5f, 2); // 2秒内将Image的透明度变为0.5
2. DOColor
- 功能: 渐变改变目标对象的颜色。
- 适用对象:
Image
,Text
,SpriteRenderer
,Material
- 示例:
csharp text.DOColor(Color.red, 3); // 3秒内将Text的颜色变为红色
3. DOMove
- 功能: 平滑地将目标对象移动到指定的位置(世界坐标)。
- 适用对象:
Transform
- 示例:
csharp transform.DOMove(new Vector3(0, 5, 0), 2); // 2秒内将物体移动到(0, 5, 0)
4. DOLocalMove
- 功能: 平滑地将目标对象移动到指定的位置(本地坐标)。
- 适用对象:
Transform
- 示例:
csharp transform.DOLocalMove(new Vector3(0, 5, 0), 2); // 2秒内将物体移动到(0, 5, 0)相对于父对象的位置
5. DORotate
- 功能: 平滑地将目标对象旋转到指定的角度(世界坐标)。
- 适用对象:
Transform
- 示例:
csharp transform.DORotate(new Vector3(0, 180, 0), 2); // 2秒内将物体旋转到(0, 180, 0)
6. DOLocalRotate
- 功能: 平滑地将目标对象旋转到指定的角度(本地坐标)。
- 适用对象:
Transform
- 示例:
csharp transform.DOLocalRotate(new Vector3(0, 180, 0), 2); // 2秒内将物体相对于父对象旋转到(0, 180, 0)
7. DOScale
- 功能: 平滑地将目标对象缩放到指定的大小。
- 适用对象:
Transform
- 示例:
csharp transform.DOScale(new Vector3(2, 2, 2), 2); // 2秒内将物体缩放到2倍大小
8. DOPath
- 功能: 让目标对象沿指定路径移动。
- 适用对象:
Transform
- 示例:
csharp Vector3[] path = { new Vector3(0, 0, 0), new Vector3(3, 0, 0), new Vector3(3, 3, 0) }; transform.DOPath(path, 5, PathType.CatmullRom); // 5秒内沿路径移动
9. DOLocalPath
- 功能: 让目标对象沿指定路径(本地坐标)移动。
- 适用对象:
Transform
- 示例:
csharp Vector3[] path = { new Vector3(0, 0, 0), new Vector3(3, 0, 0), new Vector3(3, 3, 0) }; transform.DOLocalPath(path, 5, PathType.CatmullRom); // 5秒内沿本地路径移动
10. DOJump
- 功能: 让目标对象做出跳跃动作,沿曲线运动到指定位置。
- 适用对象:
Transform
- 示例:
csharp transform.DOJump(new Vector3(2, 2, 0), 2, 1, 1); // 跳跃到(2, 2, 0),跳跃高度为2,持续1秒
11. DOShakePosition
- 功能: 让目标对象的位置在一段时间内进行抖动效果。
- 适用对象:
Transform
- 示例:
csharp transform.DOShakePosition(2, new Vector3(1, 1, 0)); // 2秒内位置进行抖动
12. DOShakeRotation
- 功能: 让目标对象的旋转在一段时间内进行抖动效果。
- 适用对象:
Transform
- 示例:
csharp transform.DOShakeRotation(2, new Vector3(0, 0, 30)); // 2秒内旋转进行抖动
13. DOShakeScale
- 功能: 让目标对象的缩放在一段时间内进行抖动效果。
- 适用对象:
Transform
- 示例:
csharp transform.DOShakeScale(2, new Vector3(1, 1, 0)); // 2秒内缩放进行抖动
14. DOPunchPosition
- 功能: 让目标对象的位置产生类似“拳击”的效果,即瞬时偏移然后回到原位。
- 适用对象:
Transform
- 示例:
csharp transform.DOPunchPosition(new Vector3(1, 1, 0), 1, 10, 1); // 瞬时偏移然后回到原位,持续1秒
15. DOPunchRotation
- 功能: 让目标对象的旋转产生类似“拳击”的效果。
- 适用对象:
Transform
- 示例:
csharp transform.DOPunchRotation(new Vector3(0, 0, 30), 1, 10, 1); // 瞬时旋转然后回到原位,持续1秒
16. DOPunchScale
- 功能: 让目标对象的缩放产生类似“拳击”的效果。
- 适用对象:
Transform
- 示例:
csharp transform.DOPunchScale(new Vector3(1, 1, 0), 1, 10, 1); // 瞬时缩放然后回到原位,持续1秒
17. DOBlendableColor
- 功能: 对目标对象的颜色进行渐变,同时能够与当前颜色叠加(混合)。
- 适用对象:
Image
,Text
,SpriteRenderer
,Material
- 示例:
csharp text.DOBlendableColor(Color.red, 3); // 3秒内将Text颜色变为红色,叠加效果
18. DOBlendableMoveBy
- 功能: 平滑地移动目标对象,同时能够与当前的移动叠加(即累积效果)。
- 适用对象:
Transform
- 示例:
csharp transform.DOBlendableMoveBy(new Vector3(1, 0, 0), 1); // 移动1个单位,并叠加当前的位置
19. DOBlendableRotateBy
- 功能: 平滑地旋转目标对象,同时能够与当前的旋转叠加(即累积效果)。
- 适用对象:
Transform
- 示例:
csharp transform.DOBlendableRotateBy(new Vector3(0, 180, 0), 1); // 旋转180度,并叠加当前的旋转
20. DOBlendableScaleBy
- 功能: 平滑地缩放目标对象,同时能够与当前的缩放叠加(即累积效果)。
- 适用对象:
Transform
- 示例:
“`csharp
transform.DOBlendableScaleBy(new Vector3(1, 1, 1), 1
); // 缩放1倍,并叠加当前的缩放
“`
21. DOTimeScale
- 功能: 动态改变目标对象的时间缩放。
- 适用对象:
Tween
- 示例:
csharp myTween.DOTimeScale(0.5f, 2); // 在2秒内将Tween的时间缩放改变为0.5倍
22. DOComplete
- 功能: 立即完成目标对象的补间动画。
- 适用对象:
Tween
- 示例:
csharp myTween.DOComplete(); // 立即完成当前Tween
23. DOKill
- 功能: 立即杀死目标对象的补间动画,并可选地触发完成回调。
- 适用对象:
Tween
- 示例:
csharp myTween.DOKill(); // 立即终止当前Tween
24. DOPause
- 功能: 暂停目标对象的补间动画。
- 适用对象:
Tween
- 示例:
csharp myTween.DOPause(); // 暂停当前Tween
25. DOPlay
- 功能: 播放或恢复目标对象的补间动画。
- 适用对象:
Tween
- 示例:
csharp myTween.DOPlay(); // 播放或恢复当前Tween
26. DORewind
- 功能: 倒回并重置目标对象的补间动画。
- 适用对象:
Tween
- 示例:
csharp myTween.DORewind(); // 倒回并重置当前Tween
27. DOSmoothRewind
- 功能: 平滑倒回目标对象的补间动画。
- 适用对象:
Tween
- 示例:
csharp myTween.DOSmoothRewind(); // 平滑倒回当前Tween
28. DOFlip
- 功能: 翻转目标对象的补间动画方向(正向变为反向,反之亦然)。
- 适用对象:
Tween
- 示例:
csharp myTween.DOFlip(); // 翻转当前Tween的方向
29. DOGoto
- 功能: 立即跳转到目标对象补间动画的指定时间点。
- 适用对象:
Tween
- 示例:
csharp myTween.DOGoto(2f); // 跳转到Tween的2秒位置
30. DOPlayBackwards
- 功能: 反向播放目标对象的补间动画。
- 适用对象:
Tween
- 示例:
csharp myTween.DOPlayBackwards(); // 反向播放当前Tween
31. DOPlayForward
- 功能: 正向播放目标对象的补间动画。
- 适用对象:
Tween
- 示例:
csharp myTween.DOPlayForward(); // 正向播放当前Tween
32. DORestart
- 功能: 重新开始播放目标对象的补间动画。
- 适用对象:
Tween
- 示例:
csharp myTween.DORestart(); // 重新开始当前Tween
33. DOComplete
- 功能: 立即完成目标对象的补间动画并可选择是否触发 OnComplete 回调。
- 适用对象:
Tween
- 示例:
csharp myTween.DOComplete(); // 立即完成当前Tween并触发完成回调
34. DOFlip
- 功能: 反转当前补间动画的方向(正向变为反向,反之亦然)。
- 适用对象:
Tween
- 示例:
csharp myTween.DOFlip(); // 反转当前Tween的方向
这些 DO
前缀的方法提供了丰富的动画控制功能,能够处理对象的移动、缩放、旋转、颜色变化、透明度变化等各种动画需求,并可以精细控制动画的播放、暂停、倒回等行为。
Set前缀
在 DOTween 中,Set
前缀的方法用于配置补间动画的各种属性。这些方法让你可以进一步控制动画的行为,如设置动画的循环、时间缩放、回调函数等。以下是带有 Set
前缀的常见方法及其功能说明:
1. SetEase
- 功能: 设置补间动画的缓动类型(Easing),控制动画的加速和减速方式。
- 示例:
csharp myTween.SetEase(Ease.InOutQuad); // 设置动画为缓入缓出效果
2. SetLoops
- 功能: 设置补间动画的循环次数和循环类型(如往返循环)。
- 示例:
csharp myTween.SetLoops(2, LoopType.Yoyo); // 设置动画循环2次,并使用Yoyo(往返)效果
3. SetDelay
- 功能: 设置补间动画开始前的延迟时间。
- 示例:
csharp myTween.SetDelay(1f); // 设置动画延迟1秒开始
4. SetRelative
- 功能: 将补间动画设置为相对变化(即基于当前值进行动画,而非绝对目标值)。
- 示例:
csharp myTween.SetRelative(); // 将动画设置为相对变化
5. SetSpeedBased
- 功能: 设置补间动画为基于速度的动画,而非基于时间的动画。这意味着动画持续时间取决于目标值和速度。
- 示例:
csharp myTween.SetSpeedBased(); // 设置动画为基于速度的动画
6. SetAutoKill
- 功能: 设置补间动画在完成后是否自动销毁。如果设置为
false
,动画完成后将保持在内存中,可重新播放。 - 示例:
csharp myTween.SetAutoKill(false); // 设置动画完成后不自动销毁
7. SetId
- 功能: 为补间动画设置一个标识符(ID),用于后续管理,如暂停、杀死特定 ID 的所有动画。
- 示例:
csharp myTween.SetId("moveTween"); // 设置动画的ID为"moveTween"
8. SetTarget
- 功能: 设置补间动画的目标对象,用于更好地管理动画,如通过
target
查找和控制动画。 - 示例:
csharp myTween.SetTarget(myObject); // 设置动画的目标对象为myObject
9. SetUpdate
- 功能: 设置补间动画的更新类型,可以指定在
Update
、LateUpdate
或FixedUpdate
中更新动画,还可以指定是否忽略 Unity 的Time.timeScale
。 - 示例:
csharp myTween.SetUpdate(UpdateType.Fixed, true); // 设置动画在FixedUpdate中更新,并忽略timeScale
10. SetRecyclable
- 功能: 设置补间动画为可回收利用,这样可以减少内存分配,提升性能。
- 示例:
csharp myTween.SetRecyclable(true); // 设置动画为可回收利用
11. SetLink
- 功能: 将补间动画与某个
GameObject
关联,这样在GameObject
被销毁时自动杀死动画。 - 示例:
csharp myTween.SetLink(gameObject); // 将动画与gameObject关联
12. SetAs
- 功能: 从另一个补间动画或预设中复制设置(如
Ease
、Loops
等),快速应用一组常用的设置。 - 示例:
csharp myTween.SetAs(anotherTween); // 从anotherTween中复制设置
13. SetOptions
- 功能: 设置补间动画的特定选项,通常用于处理一些特定类型的动画(如路径动画、颜色动画)。
- 示例:
csharp myTween.SetOptions(true); // 设置特定的补间选项,例如设置路径动画是否关闭时使用局部路径
14. SetFrom
- 功能: 设置补间动画的初始值,即动画将从该值开始过渡到当前设置的目标值。
- 示例:
csharp myTween.SetFrom(new Vector3(0, 0, 0)); // 设置动画从(0, 0, 0)开始
15. SetEase (另一个重载)
- 功能: 使用自定义动画曲线设置补间动画的缓动效果。
- 示例:
csharp myTween.SetEase(AnimationCurve.EaseInOut(0, 0, 1, 1)); // 使用自定义曲线设置缓动效果
总结
Set
前缀的方法在 DOTween 中主要用于配置补间动画的各种行为和属性,提供了高度的定制化能力。这些方法让你可以精细控制动画的表现形式,优化动画的性能,并与项目中的其他系统进行更好的集成。
On前缀
在 DOTween 中,On
前缀的方法用于设置动画过程中的各种回调函数。这些回调函数允许你在动画的不同阶段(如开始、更新、完成等)执行特定的代码逻辑,提供了强大的控制能力。以下是带有 On
前缀的常见方法及其功能说明:
1. OnStart
- 功能: 当动画开始时触发回调。
- 示例:
csharp myTween.OnStart(() => Debug.Log("Animation started"));
2. OnPlay
- 功能: 当动画播放时触发回调,包括重新播放和从暂停状态恢复播放。
- 示例:
csharp myTween.OnPlay(() => Debug.Log("Animation is playing"));
3. OnPause
- 功能: 当动画暂停时触发回调。
- 示例:
csharp myTween.OnPause(() => Debug.Log("Animation paused"));
4. OnUpdate
- 功能: 每帧动画更新时触发回调。
- 示例:
csharp myTween.OnUpdate(() => Debug.Log("Animation updated"));
5. OnComplete
- 功能: 当动画完成时触发回调。
- 示例:
csharp myTween.OnComplete(() => Debug.Log("Animation completed"));
6. OnRewind
- 功能: 当动画倒放时触发回调(即动画通过
Rewind
或者SmoothRewind
回到起始状态时)。 - 示例:
csharp myTween.OnRewind(() => Debug.Log("Animation rewinded"));
7. OnKill
- 功能: 当动画被手动或自动杀死时触发回调。
- 示例:
csharp myTween.OnKill(() => Debug.Log("Animation killed"));
8. OnStepComplete
- 功能: 当动画循环(Loop)时,每个循环完成时触发回调。
- 示例:
csharp myTween.OnStepComplete(() => Debug.Log("Animation loop step completed"));
9. OnWaypointChange
- 功能: 当路径动画(Path Animation)到达一个新的路径点时触发回调。
- 示例:
csharp myTween.OnWaypointChange(waypointIndex => Debug.Log("Reached waypoint: " + waypointIndex));
10. OnTweenCreated
- 功能: 当 tween 动画创建时触发回调。通常用于监听 tween 的生成过程。
- 示例:
csharp myTween.OnTweenCreated(() => Debug.Log("Tween created"));
11. OnTweenCallback
- 功能: 这个是一个更通用的回调方法,允许你在 tween 的某个特定时间点触发回调。
- 示例:
csharp myTween.OnTweenCallback(() => Debug.Log("Custom tween callback triggered"));
12. OnTweenCallbackWithParam
- 功能: 允许你在特定时间点触发带参数的回调。
- 示例:
csharp myTween.OnTweenCallbackWithParam(param => Debug.Log("Callback with param: " + param));
总结
On
前缀的方法在 DOTween 中用于设置动画的各种回调,以便在动画生命周期的不同阶段执行自定义逻辑。这些回调让你可以高度定制动画的行为,确保在适当的时刻进行所需的操作,例如播放音效、触发特效、改变状态等。这使得 DOTween 不仅是一个动画工具,同时也是一个强大的流程控制工具。
总结
DOTween 是一个快速、高效、完全类型安全的面向对象的动画引擎。
Tweener
是一种具体的动画类型。
Sequence
是一种组合动画的类型。
Tween
是一个通用术语,用来表示 DOTween 中的所有动画对象,包括 Tweener
和 Sequence
。
Nested tween
(嵌套补间)是指一个 Tween
被包含在一个 Sequence
中作为其子动画。
共有三种类型的前缀方法,其中DO
前缀用来实现是哪种补间效果,Set
前缀用来对补间效果的修改,On
前缀用来完成补间效果结束之后的事件。