DOTween
Table of Contents
- DOTween
- 名称术语
- Tweener
- Seqence
- 创建一个 Sequence
- 向 Sequence 中添加 tween、intervals 以及 callbacks
- Append(Tween tween)
- AppendCallback(TweenCallback callback)
- AppendInterval(float interval)
- Insert(float atPosition, Tween tween)
- InsertCallback(float atPosition, TweenCallback callback)
- Join(Tween tween)
- Prepend(Tween tween)
- PrependCallback(TweenCallback callback)
- PrependInterval(float interval)
- EXAMPLE
- 设置,选项和回调函数
- 全局的设置
- 一般设置
- 新创建 tween 都会应用的设置
- static bool DOTween.defaultAutoKill
- static AutoPlay DOTween.defaultAutoPlay
- static float DOTween.defaultEaseOvershootOrAmplitude
- static float DOTween.defaultEasePeriod
- static Ease DOTween.defaultEaseType
- static LoopType DOTween.defaultLoopType
- static bool DOTween.defaultRecyclable
- static bool DOTween.defaultTimeScaleIndependent
- static UpdateType DOTween.defaultUpdateType
- Tweener 和 Seqence 共用的设置
- 实例属性
- 级联设置
- SetAs(Tween tween \ TweenParams tweenParams)
- SetAutoKill(bool autoKillOnCompletion=true)
- SetEase(Ease easeType\AnimationCurve animCurve\ EaseFunction customEase)
- SetId(object id)
- SetLoops(int loops, LoopType loopType = LoopType.Restart)
- SetRecyclable(bool recyclable)
- SetRelative(bool isRelative = true)
- SetUpdate(UpdateType updateType,bool isIndependentUpdate = false)
- 级联回调
- OnComplete(TweenCallback callback)
- OnKill(TweenCallback callback)
- OnPlay(TweenCallback callback)
- OnPause(TweenCallback callback)
- OnRewind(TweenCallback callback)
- OnStart(TweenCallback callback)
- OnStepComplete(TweenCallback callback)
- OnUpdate(TweenCallback callback)
- OnWaypointChange(TweenCallback<int> callback)
- Tweener 特定的设置和选项
- TweenParams
- 全局的设置
- tween 的控制
- 第一种方式是通过静态函数
- 第二种方式是直接通过 tween
- 第三种方式是通过快捷增强的引用
- tween 的控制函数
- CompleteAll/Complete(bool withCallbacks = false)
- FlipAll/Flip()
- GotoAll/Goto(float to,bool andPlay = false)
- KillAll/Kill(bool complete = true, params object[] idsOrTargetsToExclude)
- PauseAll/Pause()
- PlayAll/Play()
- PlayBackwardsAll/PlayBackwards()
- PlayForwardAll/PlayForward()
- RestartAll/Restart(bool includeDelay = true, float changeDelayTo = -1)
- RewindAll/Rewind(bool includeDelay)
- SmoothRewindAll/SmoothRewind
- TogglePauseAll/TogglePause()
- ForceInit()
- GotoWaypoint(int waypointIdx,bool andPlay=false)
- 参考资料
翻译一下官方文档。熟悉以下 DOTween 的用法。
<!– more –>
DOTween
名称术语
Tweener | 用来对一个值做动画 |
Sequence | 特殊的 tween,它控制一组 tween,并对他们做动画 |
Tween | 一个抽象的单词,它可以表示 Tweener 和 Sequence |
Nested tween | Sequence 中的 tween |
Tweener
通用方式创建 Tweener
static DOTween.To(getter, setter, to, float duration)
- getter
代理返回做动画的属性 - setter
通过该代理来设置做动画的属性 - to
要到达的终点值 - duration
动画持续时间
// Tween a Vector3 called myVector to 3,4,8 in 1 second DOTween.To(()=> myVector, x=> myVector = x, new Vector3(3,4,8), 1); // Tween a float called myFloat to 52 in 1 second DOTween.To(()=> myFloat, x=> myFloat = x, 52, 1);
快捷方式创建 Tweener
每种快捷方式创建的 tween 都有一个可选的 FROM 版本(除去那些明显指出不存在的)。只要在 tween 后面链接一二个 From,就可以将 tween 的行为从 TO 变为 FROM.
transform.DOMove(new Vector3(2,3,4), 1); rigidbody.DOMove(new Vector3(2,3,4), 1); material.DOColor(Color.green, 1); transform.DOMove(new Vector3(2,3,4), 1).From(); rigidbody.DOMove(new Vector3(2,3,4), 1).From(); material.DOColor(Color.green, 1).From();
对物体坐标系属性做动作
DOXXXLocal
在原始属性上叠加变化值
类似于 cocos 中的 By
DOBlendableXXXBy
等待一定时间
SetDelay(delayTime)
Seqence
一个 tween 只能嵌套在一个 sequence 中,不能在不同的 sequence 中使用同一个 tween。
不能使用空的 Sequence.
创建一个 Sequence
Sequence mySequence = DOTween.Sequence();
向 Sequence 中添加 tween、intervals 以及 callbacks
Append(Tween tween)
将 tween 添加到 sequence 的末尾
mySequence.Append(transform.DOMoveX(45, 1));
AppendCallback(TweenCallback callback)
将 callback 添加到 sequence 的末尾
AppendInterval(float interval)
将 时间间隔 interval 添加到 sequence 的末尾
Insert(float atPosition, Tween tween)
将给定的 tween 插入到特定的时间位置,这样就可以将多个 tween 重叠在一起。
InsertCallback(float atPosition, TweenCallback callback)
将给定的 callback 插入到特定的时间位置。
Join(Tween tween)
将给定的 tween 插入到 sequence 中最后一个 tween 或 callback 的时间位置。
该方法相当于 cocos2d-x 中的 spawn
Prepend(Tween tween)
将 tween 添加到 sequence 的开始
PrependCallback(TweenCallback callback)
将 callback 添加到 sequence 的开始
PrependInterval(float interval)
将 时间间隔 interval 添加到 sequence 的开始
EXAMPLE
// Grab a free Sequence to use Sequence mySequence = DOTween.Sequence(); // Add a movement tween at the beginning mySequence.Append(transform.DOMoveX(45, 1)); // Add a rotation tween as soon as the previous one is finished mySequence.Append(transform.DORotate(new Vector3(0,180,0), 1)); // Delay the whole Sequence by 1 second mySequence.PrependInterval(1); // Insert a scale tween for the whole duration of the Sequence mySequence.Insert(0, transform.DOScale(new Vector3(3,3,3), mySequence.Duration())); Sequence mySequence = DOTween.Sequence(); mySequence.Append(transform.DOMoveX(45, 1)) .Append(transform.DORotate(new Vector3(0,180,0), 1)) .PrependInterval(1) .Insert(0, transform.DOScale(new Vector3(3,3,3), mySequence.Duration()));
设置,选项和回调函数
全局的设置
一般设置
static LogBehaviour DOTween.logBehaviour
默认值为 LogBehaviour.ErrorsOnly
LogBehaviour.ErrorsOnly - 只打印错误日志
LogBehaviour.Default - 打印错误和警告日志
LogBehaviour.Verbose - 打印错误,警告以及额外的信息
static bool DOTween.maxSmoothUnscaledTime
默认值为 0.15f
如果 useSmoothDeltaTime 为 true,该值就表示时间独立的 tween 在时间补间时所经过的最大时间间隔
static bool DOTween.showUnityEditorReport
默认值为 false
如果设置为 true,则在 Editor 下退出 Play 模式时,会打印 DOTween 报告,里面包含运行期间 Tweener 和 Sequences 的最大数目,可以依据这些信息来优化项目。
需要注意的是,这会轻微减低 Unity 编辑器的性能。
static float DOTween.timeScale
默认值为 1
全局的 timeScale 值,会应用到所有的 tween。
static bool DOTween.useSafeMode
默认值为 true
如果设置为 true,会轻微减慢 tween,但是运行会更安全。这样 DOTween 会自动处理 tween 在运行期间,目标被删除掉的情况。
设置为 false,意味着你必须自己保证在销毁目标之前,杀死 tween。
警告:
在 iOS 模式下,safeMode 只在 stripping level 被设置为 “Strip Assemblies”或者 Script Call Optimization 被设置为“Slow and Safe”时才可用。
static bool DOTween.useSmoothDeltaTime
默认值为 false
如果为 true,则 对于 UpdateType.Normal 和 UpdateType.Late 类型的 tween,DOTween 将会使用 Time.smoothDeltaTime 代替 Time.deltaTime.对于设置了 timeScaleIndependent=true 的 tween,DOTween 会使用前一次 timestep 和 maxSmoothUnscaledTime 之间的一个值。
设置该选项为 True,将会让动画更加流畅。
static DOTween.SetTweensCapacity(int maxTweeners, int maxSequences)
为了让 DOTween 执行效率更高,你可以限制激活的 tween 的最大数目。如果在执行过程中超过这个值,界限会自动增大。如果你已经知道最大界限,那么就可以手动设置默认值为最大界限,从而避免界限增大时造成卡动。
新创建 tween 都会应用的设置
static bool DOTween.defaultAutoKill
默认值:true
默认情况下,tween 会自动释放
static AutoPlay DOTween.defaultAutoPlay
默认值:AutoPlay.All
默认情况下,创建的 tween 会自动播放
static float DOTween.defaultEaseOvershootOrAmplitude
默认值:1.70158f
- TODO
static float DOTween.defaultEasePeriod
默认值:0
- TODO
static Ease DOTween.defaultEaseType
默认值:Ease.OutQuad
默认情况下,创建的 tween 缓动类型为 Ease.OutQuad
static LoopType DOTween.defaultLoopType
默认值:LoopType.Restart
默认情况下,创建的 tween 每次循环播放时会重新开始播放
static bool DOTween.defaultRecyclable
默认值:false
默认情况下,创建的 tween 不可以循环利用
static bool DOTween.defaultTimeScaleIndependent
默认值:false
是否 Unity 的 timeScale 会被计算在内。
static UpdateType DOTween.defaultUpdateType
默认值:UpdateType.Normal
默认情况下,创建的 tween 其更新类型为 UpdateType.Normal
关于 UpdateType 的解释可以查看右边链接: 1
Tweener 和 Seqence 共用的设置
实例属性
timeScale
默认值:1
设置 tween 内部的时间缩放值
这个值可以被其他的 tween 来修改,从而实现流畅的慢动作效果。
myTween.timeScale = 0.5f;
级联设置
SetAs(Tween tween \ TweenParams tweenParams)
通过给定的另一个 tween 的设置来设置当前 tween 的参数,或者通过 tweenParams 来设置 当前 tween 的参数。(可以设置的参数有 id,ease,loops,delay,timeScale,callbacks 等等)。
如果,当前的 tween 已经开始,则该设置将不会生效。
transform.DoMoveX(4,1).SetAs(myOtherTween);
SetAutoKill(bool autoKillOnCompletion=true)
默认情况下,tween 在执行完后会被自动删除,可以通过该设置来禁止默认操作。
transform.DoMoveX(4,1).SetAutoKill(false);
SetEase(Ease easeType\AnimationCurve animCurve\ EaseFunction customEase)
如果应用于 Sequence,这种缓动将会作用于整个 Sequence,就好比他是单个动画时间线。默认情况下 Sequence 的缓动类型为 Ease.Linear,它独立于全局的缓动设置
另外,也可以设置下面的参数。他们只能和 Back 和 Elastic 类型的缓动一起使用:
- overshoot
超过返回缓动类型 所使用的 超过参数(默认值为 1.70158)。
闪烁缓动类型 所使用的闪烁次数参数。 - amplitude
来回弹缓动类型 所使用的 振幅参数 - period
TODO
EaseFactory.StopMotion 是可以加到缓动外面的额外一层,它可以作为任何一种缓动的包装。
transform.DOMoveX(4, 1).SetEase(Ease.InOutQuint); transform.DOMoveX(4, 1).SetEase(myAnimationCurve); transform.DOMoveX(4, 1).SetEase(MyEaseFunction); transform.DOMoveX(4, 1).SetEase(EaseFactory.StopMotion(5, Ease.InOutQuint));
SetId(object id)
为 tween 设置一个 id,该值可以是 int,string,object 或其他类型。
transform.DOMoveX(4, 1).SetId("supertween");
SetLoops(int loops, LoopType loopType = LoopType.Restart)
设置 tween 的循环选项。
如果 tween 已经开始,则该设置无效。如果一个 tween 在 Sequence 内,则无限循环将不会被应用。
- loops
设置循环次数。-1 表示无限循环 - loopType
LoopType.Restart - 当一次循环结束时,下次循环会从头开始播放.
LoopType.Yoyo - 当一次循环结束时,会倒序播放回开始。
LoopType.Incremental - 每次循环结束后,endValue 和 startValue 之间的差值会被加到 endValue 上。(这种类型只能在 Tweener 上使用)
transform.DOMoveX(4, 1).SetLoops(3, LoopType.Yoyo);
SetRecyclable(bool recyclable)
- recyclable
如果为 true,杀死这个 tween 后,就会重复利用它。
transform.DOMoveX(4, 1).SetRecyclable(true);
SetRelative(bool isRelative = true)
如果 isRelative 为 true。endValue 将通过 startValue+endValue 计算得出,而不是直接使用 endValue。
对于 Sequence,会设置其中所有嵌套的 tween 为 relative。
注意:对于已经开始的 tween 没有效果。
transform.DOMoveX(4, 1).SetRelative();
SetUpdate(UpdateType updateType,bool isIndependentUpdate = false)
- updateType
UpdateType.Normal - 在每一帧的 Update 函数中更新
UpdateType.Late - 在每一帧的 LateUpdate 函数中更新
UpdateType.Fixed - 使用 FixedUpdate 函数来更新
UpdateType.Manual - 使用 DOTween.ManualUpdate 函数来更新 - isIndependentUpdate
如果为 true,tween 就会忽略 unity 的 Time.timeScale
注意:UpdateType.Fixed 更新类型时,也可以使用 isIndependentUpdate。但是最好不要这样做,因为 timeScale=0 时,FixedUpdate 是不执行的。
transform.DOMoveX(4, 1).SetUpdate(UpdateType.Late, true);
级联回调
OnComplete(TweenCallback callback)
OnKill(TweenCallback callback)
OnPlay(TweenCallback callback)
OnPause(TweenCallback callback)
OnRewind(TweenCallback callback)
OnStart(TweenCallback callback)
OnStepComplete(TweenCallback callback)
OnUpdate(TweenCallback callback)
OnWaypointChange(TweenCallback<int> callback)
Tweener 特定的设置和选项
TweenParams
tween 的控制
有三种方式可以控制一个 tween。这三种方式都有相同的函数名,除了快捷增强方式,这种方式使用的函数名都有 DO 前缀.
第一种方式是通过静态函数
// Pauses all tweens DOTween.PauseAll(); // Pauses all tweens that have "badoom" as an id DOTween.Pause("badoom"); // Pauses all tweens that have someTransform as a target DOTween.Pause(someTransform);
第二种方式是直接通过 tween
myTween.Pause();
第三种方式是通过快捷增强的引用
transform.DOPause();
tween 的控制函数
CompleteAll/Complete(bool withCallbacks = false)
发送终点位置给 tween(对于无限循环的 tween 不起作用)。
- withCallbacks
只对 Sequences 起作用。如果 withCallbacks=true,Sequence 内部的回调函数会被触发,否则它们都被忽略。
FlipAll/Flip()
反转 tween 的方向。
GotoAll/Goto(float to,bool andPlay = false)
发送 to 时间点的位置给 tween。
- to
如果 to 比 tween 的 duration 还大,则只是到达终点,并不会超出。 - andPlay
如果为 true,则 tween 到达 to 时间点后会继续播放,否则就会暂停。
KillAll/Kill(bool complete = true, params object[] idsOrTargetsToExclude)
杀死 tween。默认情况下 tween 执行完后会自动被杀死,除非通过 SetAutoKill(false)函数修改默认设置。
- complete
如果为 true,在杀死 tween 之前会立即完成该 tween - idsOrTargetsToExclude
只有 KillAll 有该参数。指定不被杀死的 tween
PauseAll/Pause()
暂停 tween
PlayAll/Play()
播放 tween
PlayBackwardsAll/PlayBackwards()
向后播放 tween
PlayForwardAll/PlayForward()
向前播放 tween
RestartAll/Restart(bool includeDelay = true, float changeDelayTo = -1)
重新开始 tween
- includeDelay
如果为 true,则连 tween 的 delay 也会重新开始,否则忽略 delay。 - changeDelayTo
设置 tween 的 delay 为该参数值。
RewindAll/Rewind(bool includeDelay)
对 tween 进行倒带
- includeDelay
如果为 true,则会倒回 delay 之前。否则忽略 delay
SmoothRewindAll/SmoothRewind
平滑的倒带(不包括 delay)。
平滑地动到 tween 的起始位置(而不是直接跳到起始位置),为了保证动画的流畅性,会忽略所有经过的循环(除了 LoopType.Incremental)
如果在一个正在 delay 的 tween 上调用该函数,只会简单将 delay 设置为 0,并暂停该 tween。
TogglePauseAll/TogglePause()
如果 tween 暂停,就播放它;如果 tween 正在播放,就暂停它。
ForceInit()
强制初始化。当想从一个 tween 中获取数据时,如果该数据只有初始化后才可以获得,那么就可以使用该方法。
GotoWaypoint(int waypointIdx,bool andPlay=false)
- waypointIdex
要到达的路径点的索引(如果比最大路径点索引值还大,则只是到达最后一个路径点) - andPlay
如果 true,则到达路径点后,播放 tween,否则就暂停该 tween
参考资料
DOTween 官网文档
http://dotween.demigiant.com/documentation.php