1.unity常用组件的扩展方法
Transform.DoPunch...
public static Tweener DOPunch...(this Transform target, Vector3 punch, float duration, int vibrato = 10, float elasticity = 1f)
第一个参数 punch:表示方向及强度
第二个参数 duration:表示动画持续时间
第三个参数 vibrato:震动次数
第四个参数 elascity: 这个值是0到1的
当为0时,就是在起始点到目标点之间运动
不为0时,会把你赋的值乘上一个参数,作为你运动方向反方向的点,物体在这个点和目标点之间运动
第二个参数 duration:表示动画持续时间
第三个参数 vibrato:震动次数
第四个参数 elascity: 这个值是0到1的
当为0时,就是在起始点到目标点之间运动
不为0时,会把你赋的值乘上一个参数,作为你运动方向反方向的点,物体在这个点和目标点之间运动
DOPunchPosition: DOPunchPosition(new Vector3(0, 10, 0), 2, 2, 0.1f)
DOPunchRotation: DOPunchRotation(new Vector3(0, 90, 0), 2, 2, 0.1f)
DOPunchScale: DOPunchScale(new Vector3(2, 2, 2), 2, 2, 0.1f)
Transform.DoShake...
public static Tweener DOShakeScale(this Transform target, float duration, float strength = 1f/Vector3 strength, int vibrato = 10, float randomness = 90f, bool fadeOut = true, ShakeRandomnessMode randomnessMode = ShakeRandomnessMode.Full)
参数:
持续时间;
强度:实际就是震动的幅度,可以理解成相机施加的力的大小 使用Vector3可以选择每个轴向不同的强度;
震动:震动次数;
随机性:改变震动方向的随机值(大小:0~180);
淡出:就是运动最后是否缓慢移动回到原本位置;
强度:实际就是震动的幅度,可以理解成相机施加的力的大小 使用Vector3可以选择每个轴向不同的强度;
震动:震动次数;
随机性:改变震动方向的随机值(大小:0~180);
淡出:就是运动最后是否缓慢移动回到原本位置;
震动模式;
设置DoTween动画的方式
DOTween的专门术语
Tweener:可控制一个值并使其产生补间动画。
Sequence:一种特殊的补间,它不是控制一个值,而是控制其他过渡效果,并将它们作为一组进行动画处理。
Tween:表示Tweener和Sequence的通用词。
Nested tween:包含在序列(Sequence)中的补间。
DoTween方法的前缀
Do:所有创建补间动画的快捷方式的前缀(可以直接从已知对象启动的操作,例如变换或材质)。也是主 DOTween 类的前缀。
transform.DOMoveX(100, 1); transform.DORestart(); DOTween.Play();Set:可以通过补间动画引用到的的所有设置的前缀(From 除外(属于Tweener的特殊的设置和选项),因为它作为设置应用,但实际上并不是设置)。
myTween.SetLoops(4, LoopType.Yoyo).SetSpeedBased(); From方法: From(bool isRelative = false) 将 Tweener 更改为 FROM 补间(而不是常规的 TO 补间),将目标值发送到给定值,然后再切换到之前的值。 必须在任何其他设置之前设置,Tween特定选项除外。 参数: 如果为 TRUE,则会将 tween 设置为相对值(FROM 值将计算为 currentValue + endValue,而不是直接使用)。 在使用 FROM tweens 时,需要使用此参数而不是 SetRelative。 // 普遍的补间动画 transform.DOMoveX(2, 1); // FROM补间 transform.DOMoveX(2, 1).From(); // FROM补间,但是带有相对的FROM值 transform.DOMoveX(2, 1).From(true);On:补间动画回调的前缀
创建DoTween的方法
无论选择哪种方式,当你创建一个DoTween动画时时,都会返回一个 Tweener 或一个 Sequence,因此可以根据需要存储对它的引用。也可以将两者都存储为一个 Tween,而不必在意两者的区别。
通用的方式:
这是最灵活的方式,几乎可以使用任何值,无论是公共值还是私有值,静态值还是动态值(请注意,快捷方式实际上是基础方式)。
通用方式有一个 FROM 替代版本。只需引用 FROM方法,就能使DoTween表现为 FROM 过渡效果,而不是 TO 过渡效果。
通用方式有一个 FROM 替代版本。只需引用 FROM方法,就能使DoTween表现为 FROM 过渡效果,而不是 TO 过渡效果。
DoTween.To(()=>myValue,x=>myValue=x,10,1);//myValue:用于DoTween动画的变量值
第一个参数:返回要调整的属性值的委托。其中,myValue 是要调整的属性名称。
第二个参数:用于设置 tween 属性值的委托。其中,myValue 是要调整的属性名称。
第三个参数:结束值
第四个参数:动画时长
例子:
//在1秒的时间内将myVector值变为(3,4,8) DOTween.To(()=> myVector, x=> myVector = x, new Vector3(3,4,8), 1);
组件的扩展方法:
DOTween 包含一些已知 Unity 对象的快捷方式,如变换(Transform)、刚体(Rigidbody)和材质(Material)。
可以直接通过引用这些对象来启动 tween(这也会自动将对象本身设置为 tween 目标),例如
transform.DOMoveX(endValue,duration);这些方法中都有FROM版本,除非另有说明。只需要调用From就可以使DoTween表现为 FROM 过渡效果,而不是 TO 过渡效果。
transform.DOMove(new Vector3(2,3,4), 1).From(); material.DOColor(Color.green, 1).From();
其他通用方法:
这些是额外的通用方法,允许以特定方式调整数值。
除指明的地方外,这些方法也有 FROM 替代版本。只需将 FROM 链接到 Tweener,就能使过渡效果表现为 FROM 过渡效果,而不是 TO 过渡效果。
例:
除指明的地方外,这些方法也有 FROM 替代版本。只需将 FROM 链接到 Tweener,就能使过渡效果表现为 FROM 过渡效果,而不是 TO 过渡效果。
例:
DOTween.Punch(()=> myVector, x=> myVector = x, Vector3.up, 1);
创建一个序列Sequence
序列和Tweeners相似,但不是为了一个属性或一个值做Tween动画,而是为其他的Tweeners和Sequences制作动画。
序列可以包含在其他队列中,而不受层级结构的限制。序列中的补间动画不必一个接着一个,可以使用插入方法重复插入补间动画。
一个tween(Sequence或Tweener)只能被嵌套在单一序列中,这意味着不能在多个序列中有相同的补间动画,此外,主序列将控制序列中的所有元素,并无法单独控制序列中的某个补间
(将序列视为电影时间轴,一旦它第一次启动就会变得固定)。
序列中不可以有无限循环的补间动画,但根序列可以无限循环。不能使用空的序列。
创建序列的步骤
1.使用DOTween.Sequence()创建一个序列并存在一个引用中;也可以创建仅由回调组成的序列,并将它们用作计时器或类似的东西。
Sequence mySequence = DOTween.Sequence();2.向序列中添加补间动画,动画间隔和动画回调
这些所有方法都需要在序列开始之前应用通常是创建序列后的下一帧,除非序列处于暂停状态,否则不会产生任何效果。
任何嵌套的补间动画或序列在被添加到序列前都需要完全被创建,因为之后它将会被锁定。
延迟和循环(不是无限循环)即使在嵌套的补间中也可以正常工作。
延迟和循环(不是无限循环)即使在嵌套的补间中也可以正常工作。
序列的一些方法:
Append(Tween tween);在序列的末尾添加指定的tween。
mySequence.Append(transform.DoMoveX(45,1));//在序列的末尾添加了X轴的移动动画AppendCallback(TweenCallback callback);在序列的末尾添加指定的回调。
mySequence.AppendCallback(MyCallback);AppendInterval(float interval);在序列的末尾添加指定的间隔时间。
mySequence.AppendInterval(interval);Insert(float atPosition,Tween tween);在给定的位置上插入指定的tween,这允许tween可以有重叠而不是一个接着一个的放置。
mySequence.Insert(1, transform.DOMoveX(45, 1));//在序列的第一个位置上插入X轴移动动画InsertCallback(float atPosition, TweenCallback callback);在给定的位置上插入指定的回调。
mySequence.InsertCallback(1, MyCallback);Join(Tween tween);加入指定的补间动画在最后一个序列或补间动画加入序列时,使两个动画同时播放。
//旋转动画将和移动动画同时播放 mySequence.Append(transform.DOMoveX(45, 1)); mySequence.Join(transform.DORotate(new Vector3(0,180,0), 1));Prepend(Tween tween);在序列的开始添加给定的额Tween,?并及时推进其余部分的时间?。
mySequence.Prepend(transform.DOMoveX(45, 1));PrependCallback(TweenCallback callback);在序列的开始添加回调
mySequence.PrependCallback(MyCallback);
PrependInterval(float interval);在序列的开始添加时间间隔,?并及时推进其余部分的时间?。
mySequence.PrependInterval(interval);创建序列的实例:
// 生成一个序列 Sequence mySequence = DOTween.Sequence(); // 在序列末尾添加一个移动动画 mySequence.Append(transform.DOMoveX(45, 1)); // 在末尾添加一个旋转动画,在移动动画结束时播放 mySequence.Append(transform.DORotate(new Vector3(0,180,0), 1)); // 延迟根序列1秒播放 mySequence.PrependInterval(1); // 在首位插入缩放动画,缩放动画的持续时长是整个序列的时长 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()));
动画的设置,选项,回调
DoTween通过引用的方式将设置应用与具体的tween,也可以为所有新创建的tween更改全局默认选项。
可以一次性应用多个设置:
transform.DOMoveX(45, 1).SetDelay(2).SetEase(Ease.OutQuad).OnComplete(MyCallback);
全局设置
通用设置:
static LogBegaviour DOTween.logBehaviourDoTween要打印的Log的级别
//默认值:LogBehaviour.ErrorsOnly
LogBehaviour.ErrorsOnly: 只记录错误
LogBehaviour.Default: 记录错误和警告
LogBehaviour.Verbose: 记录错误,警告和其他附加信息
static bool DoTween.useSmoothDeltalTime 默认值为false如果为true 对于UpdateType为Normal或Late的Tween将使用Time.smoothDeltaTime代替Time.deltaTime
static float DoTween.maxSmoothUnscaledTime 默认值0.15f如果 useSmoothDeltaTime 为 TRUE,在不依赖时间的Tween下表示已过的最长时间。
static bool DOTween.nestedTweenFailureBehaviour 默认值 NestedTweenFailureBehaviour.TryToPreserveSequence(尝试包含序列)在安全模式处于活动状态时tween嵌套进序列失败时的行为。
static bool DOTween.onWillLog<LogType,object>用于拦截DOTween的日志。如果此方法不为 NULL,DOTween 将在通过 Unity 的调试日志方法写入日志之前调用它。
如果您希望 DOTween 继续处理日志,则返回 TRUE,否则返回 FALSE。
此方法必须返回 bool值 并接受两个参数:LogType(DOTween 尝试记录的 Unity 日志类型)、object(DOTween 想要记录的消息)。
static bool DOTween.showUnityEditorReport 默认值:FALSE如果设置为 TRUE,退出播放模式时您将获得 DOTween 报告(仅在编辑器中)。有助于了解您达到的最大补间和序列数量,并相应地优化您的最终项目。
static float DOTween.timeScale 默认值: 1应用于全部Tween的时间缩放,既是通用的也是独立的。
static float DOTween.unscaledTimeScale 默认值: 1 “DoTween源码中没有找到这个属性”全局 timeScale 仅适用于独立补间。
static bool DOTween.useSafeMode 默认值: TRUE如果设置为True,tweens会稍微慢一些但是会更安全,这会允许DoTween在动画运行时自动去处理像动画目标被销毁的事情。如果设置为False就意味着必须在目标被销毁前或有其他使动画产生报错前手动销毁补间动画。
警告:在IOS上,安全模式仅在剥离级别设置为“Strip Assemblies”或脚本优化设置为“Show and Safe”时有效,在Windows 10 WSA上,如果选择了Master Configuration和. net,它将不起作用。
static DOTween.SetTweensCapacity(int maxTweeners, int maxSequences) //设置可以使用Tween的容量为了运行速度,DoTween限制了可以拥有的动画的最大数量,如果超出容量会自动增加,如果提前已经知道需要的Tweener和Sequence的最大数量就可以在启动时手动设置,避免自动扩容时出现停顿。
// 设置最大Tweeners 2000 and 最大序列 to 100 DOTween.SetTweensCapacity(2000, 100);所有新创建的Tween可以做的设置
自动销毁Tween动画 static bool DOTween.defaultAutoKill//默认值:True 自动播放Tween动画 static AutoPlay DOTween.defaultAutoPlay//默认值:AutoPlay.All 动画曲线默认的频率或幅度 static float DOTween.defaultEaseOvershootOrAmplitude//默认值:1.70158f 动画曲线的默认周期 static float DOTween.defaultEasePeriod//默认:0 默认的动画曲线类型 static Ease DOTween.defaultEaseType// Ease.OutQuad 默认的循环类型 static LoopType DOTween.defaultLoopType//LoopType.Restart 是否可回收利用 static bool DOTween.defaultRecyclable//默认:false 设置是否默认考虑 Unity 的 timeScale/maximumDeltaTime。 static bool DOTween.defaultTimeScaleIndependent//false 默认更新类型 static UpdateType DOTween.defaultUpdateTypeUpdate.Normal
Tweener和Sequence的设置
实例化设置
float timeScale
设置时间缩放
设置时间缩放
myTween.timeScale=0.5f;//使一个tween慢放0.5倍。 这个值可以用来实现平滑的慢动作效果。引用设置
- SetAs(Tween tween \ TweenParams tweenParams)
将Tween的参数设置为给定Tween的参数(ID,动画曲线,循环,延迟,时间播放,回调)不会设置特定的选项设置,每次需要给定TweenParams对象的参数。
如果Tween已经开始则不会其作用。 transform.DoMoveX(4,1).SetAs(myOtherTween);//新创建的Tween将使用myOtherTween的参数设置
- SetAutoKill(bool autoKillOnCompletion = true)
如果autoKillOnCompletion设置为TRUE,则补间将在完成后立即被销毁,否则它将留在内存中,您可以复用它。
默认情况下Tween在播放完成后会自动销毁,但可以在DoTween的Utility面板中更改默认值
默认情况下Tween在播放完成后会自动销毁,但可以在DoTween的Utility面板中更改默认值
transform.DOMoveX(4, 1).SetAutoKill(false);
- SetEase(Ease easeType \ AnimationCurve animCurve \ EaseFunction customEase)
设置一个Tween的动画曲线
如果对一个序列进行设置,则会应用与整个序列像是一个动画时间轴一样,序列的动画曲线默认是Ease.Linear(线性)。独立于DOTween.defaultEaseType设置。
你可以传递一个默认的Ease或者是一个AnimationCurve,一个自定义ease函数。
此外,还可以使用以下参数但仅适用于Back和Elastic Ease(不适用于任何paths)
overshoot(超频):用于Back Ease(默认为 1.70158),或是闪光次数用于Flash Ease。
amplitude(振幅):用于Elastic Ease(默认为1.70158)。
period(阶段):用于Elastic ease(默认为0),或是Flash ease 的功率。
特殊的eases
Flash,InFlash,OutFlash,InOutFlash:这些会对Tween产生闪烁效果。
overshoot:指定要闪烁的次数偶数将在起始值上结束渐变,而奇数将在结束值上结束渐变。
period:表示ease持续的时间,取值一到负一,0表示平衡,1是从强到弱,-1是从弱到强。
EaseFactory
EaseFactory.StopMotion(int fps,Ease\AnimationCurve\EaseFunction ease) (定格运动)可以把ease作为参数传递进去,时ease效果像是定格动画一样。它可以应用于任何ease。
-
SetId(object id)
为一个tween设置id,可以使用DOTween的静态方法(DOTween.TweensById)通过ID来查找。id可以是一个int,string,object...。使用int或是string作为ID在查找时速度更快。
transform.DOMoveX(4, 1).SetId("supertween");
- SetInverted()
使tween从结束播放到开始。“?”如果只是倒放tween可以使用tween.PlayBackwards
_cubeTF.DOMove(new Vector3(10, 0, 0), 1f).SetInverted();
如果tween已经开始或已经包含着序列中则没有效果。
- SetLink(GameObject target, LinkBehaviour linkBehaviour = LinkBehaviour.KillOnDestroy)
将Tween与一个游戏对象相关联并根据其活动状态来分配行为,当游戏对象别·销毁时对应的tween也会自动终止,
当tween已经被添加到序列中将没有效果
target:相关联的目标(与通过SetTarget设置的目标不同)。
linkBehaviour:要使用的行为(不管使用哪种行为,LinkBehaviour.KillOnDestroy总是生效并且是默认值)。
- SetLoops(int loops, LoopType loopType = LoopType.Restart)
设置tween循环类型:Restart,Yoyo,Incremental。如果Tween已经开始了将不会有效果,如果tween处于序列中也不会应用无限循环。
设置循环类型的前提是将tween的loops设置为-1。
LoopType.Restart:当循环结束时,它将从头开始。
LoopType.Yoyo:当循环结束时,它将向后播放,直到完成另一个循环,然后再次向前播放,然后再次向后播放,依此类推。
LoopType.Incremental:每次循环结束时,其 endValue 和 startValue 之间的差值将被添加到 endValue 中,从而创建随每个循环周期增加其值的补间。此循环类型仅适用于Tweeners。
LoopType.Yoyo:当循环结束时,它将向后播放,直到完成另一个循环,然后再次向前播放,然后再次向后播放,依此类推。
LoopType.Incremental:每次循环结束时,其 endValue 和 startValue 之间的差值将被添加到 endValue 中,从而创建随每个循环周期增加其值的补间。此循环类型仅适用于Tweeners。
- SetRecyclable(bool recyclable)
设置补间的回收行为。如果不设置它,则将使用默认值(通过 DOTween.Init 或 DOTween.defaultRecyclable 设置)。
recyclable:如果为TRUE,tween将在销毁后被回收,否则将被销毁。
- SetRelative(bool isRelative = true)
如果isRelative为true则将tween设置为相对的(最终值将设置为开始值加上最终值,而不是之间使用最终值),如果对序列应用这个设置则序列中所有的嵌套补间(nested tweens)都会被设置为相对的。
该设置对FromTween不受影响,因为在使用From时可以选择tween是否是相对的。
- SetTarget(object target)
设置Tween的目标。(可以通过DoTween.TweensByTarget()来查找tween),当使用通用补间方法时,这非常有用,而快捷设置Tween的方式会自动将其设置为Tween的目标。
如果只想为Tween设置一个Id,请使用方法:SetId
DOTween.To(()=> myInstance.aFloat, (x)=> myInstance.aFloat = x, 2.5f, 1).SetTarget(myInstance);
- SetUpdate(UpdateType updateType, bool isIndependentUpdate = false)
设置补间的更新类型(Normal、Late或Fixed),并最终告诉tween忽略 Unity 的 timeScale 和 MaximumDeltaTime。
如果tween嵌套在序列中则没有效果(只有序列 SetUpdate 才会有效果)。
updateType:
UpdateType.Normal:在 Update 调用期间更新每一帧。
UpdateType.Late:在 LateUpdate 调用期间更新每一帧。
UpdateType.Fixed:使用FixedUpdate 调用进行更新。
UpdateType.Manual:通过手动调用 DOTween.ManualUpdate 进行更新。
isIndependentUpdate:
UpdateType.Late:在 LateUpdate 调用期间更新每一帧。
UpdateType.Fixed:使用FixedUpdate 调用进行更新。
UpdateType.Manual:通过手动调用 DOTween.ManualUpdate 进行更新。
isIndependentUpdate:
如果为 TRUE,则补间将忽略 Unity 的 Time.timeScale 和 MaximumDeltaTime。
IndependentUpdate 也可以与 UpdateType.Fixed 一起使用,但不建议在这种情况下使用(因为在 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) //当tween路径的当前路点更改时触发的回调,这是一个特殊的回调,与其他回调不同,它需要接受一个 int 类型的参数(即新更改的路点索引)。序列中的tween回调仍然会以正确的顺序工作。
可以使用lambdas表达式来使用带参数的回调
// 回调没有参数 transform.DOMoveX(4, 1).OnComplete(MyCallback); // 回调带有参数 transform.DOMoveX(4, 1).OnComplete(()=>MyCallback(someParam, someOtherParam));
Tweener特有的设置
这些设置是特定于Tweener的不会对序列(sequence)产生影响。除了ease外,所有在tween运行时的设置都不产生影响。- From(bool isRelative = false)
将tweener更改为From tween(不是常规的To tween)。将给定的值做为开始值,然后变化到起始默认值,必须在其他设置之前设置,特殊设置除外。
isRelative 是否是相对的如果是真则开始值为当前值+给定的值,而不是直接使用给定的值,对于From tween 应该使用这个参数而不是使用SetRelative来设置是否是相对的。
// Regular TO tween transform.DOMoveX(2, 1);//1 // FROM tween transform.DOMoveX(2, 1).From();//2 // FROM tween but with relative FROM value transform.DOMoveX(2, 1).From(true);//31:
2:
3:
- From(T fromValue, bool setImmediately = true, bool isRelative = false)
允许直接设置渐变的起始值,而不是依赖于渐变开始时的目标值。必须在其他设置之前设置,特殊设置除外。
fromValue:tween开始的值。
setImmediately:如果为TRUE,目标将立即设置为fromValue,否则将等待补间开始。
isRelative:是否是相对的如果是真则开始值为当前值+给定的值,而不是直接使用给定的值,对于From tween 应该使用这个参数而不是使用SetRelative来设置是否是相对的。
- SetDelay(float delay)
设置tween延迟启动。如果补间已经开始了,再做设置则不起作用。如果对序列使用这个方法并不会增加真正的延迟,而只是在序列的开始预先添加一个间隔与PrependInterval相同。
transform.DOMoveX(4, 1).SetDelay(1);
- SetDelay(float delay, bool asPrependedIntervalIfSequence)
为补间设置延迟启动,并选择如何在序列的情况下应用延迟。
asPrependedIntervalIfSequence:仅适用于序列。如果是False则将延迟设置为一次性发生,否则将设置为在每个循环周期开始时重复的序列间隔。
- SetSpeedBased(bool isSpeedBased = true)
如果isSpeedBased为真则将tween设置为基于速度的(持续时间将表示tween移动X秒的单位/度数)。如果想要速度是恒定的可以将ease设置为Ease.Linear。
SetOptions
一些tween拥有具体的特殊的设置,这取决于tween的目标类型,如果一个tweener有特定的选项,可以使用SetOptions去使用它。这些选项通常仅在通过通用方法创建tween时可用,通过快捷方式创建时在创建方法中已经包含了相同选项。使用SetOptions必须在Tween创建后立即设置。
- Color tween ➨ SetOptions(bool alphaOnly)
alphaOnly==true:仅对颜色的Alpha通道进行Tween动画
DOTween.To(()=> myColor, x=> myColor = x, new Color(1,1,1,0), 1).SetOptions(true);
- float tween ➨ SetOptions(bool snapping)
snapping==true:可以平滑的捕捉到整数
DOTween.To(()=> myFloat, x=> myFloat = x, 45, 1).SetOptions(true);
- Quaternion tween ➨ SetOptions(bool useShortest360Route) 默认值为true
useShortest360Route==true:旋转将采用最短路线并且不会超过360度;
useShortest360Route==false:旋转会完全被计算(会超过360度);如果tween被设置为相对的,useShortest360Route将始终是false
DOTween.To(()=> myQuaternion, x=> myQuaternion = x, new Vector3(0,180,0), 1).SetOptions(true);
- Rect tween ➨ SetOptions(bool snapping)
snapping==true:可以平滑的捕捉到整数
DOTween.To(()=> myRect, x=> myRect = x, new Rect(0,0,10,10), 1).SetOptions(true);
- String tween ➨ SetOptions(bool richTextEnabled, ScrambleMode scrambleMode = ScrambleMode.None, string scrambleChars = null)
richTextEnabled(默认为true):启用富文本,在播放tween时可以正确的解析富文本,否则会将标识视为普通的文本。
scrambleMode:要使用的加扰模式类型(如果有)。如果与 ScrambleMode.None 不同,则字符串将从字符的随机动画中出现,否则它将定期自行组合。
None(默认):不应用加扰。All/Uppercase/Lowercase/Numerals:加扰时要使用的字符类型。Custom:将使用 scrambleChars 中的自定义字符。
None(默认):不应用加扰。All/Uppercase/Lowercase/Numerals:加扰时要使用的字符类型。Custom:将使用 scrambleChars 中的自定义字符。
scrambleChars:包含用于自定义加扰的字符的字符串。使用尽可能多的字符(最少 10 个),因为 DOTween 使用快速加扰模式,字符越多效果越好。
DOTween.To(()=> myString, x=> myString = x, "hello world", 1).SetOptions(true, ScrambleMode.All);
- Vector2/3/4 tween ➨ SetOptions(AxisConstraint constraint, bool snapping)
constraint:可以对指定的轴进行Tween
snapping:可以平滑的捕捉到整数(适合pixel perfect的运动)
DOTween.To(()=> myVector, x=> myVector = x, new Vector3(2,2,2), 1).SetOptions(AxisConstraint.Y, true);
- Vector3Array tween ➨ SetOptions(bool snapping)
DOTween.ToArray(()=> myVector, x=> myVector = x, myEndValues, myDurations).SetOptions(true);
DOPath Specific Options
Path tween ➨ SetOptions(bool closePath, AxisConstraint lockPosition = AxisConstraint.None, AxisConstraint lockRotation = AxisConstraint.None) Path tween ➨ SetLookAt(Vector3 lookAtPosition/lookAtTarget/lookAhead, Vector3 forwardDirection, Vector3 up, bool stableZRotation)
TweenParams
用于储存设置,可以应用多个TweenParams,但是他们不是必需的,只是作为一个额外的实用类。
要使用它,创建一个新的TweenParams实例或Clear()一个现有的实例,然后添加设置,就像使用常规的设置一样。要将它们应用到tween中,可以使用SetAs。
// 存储设置 TweenParams tParms = new TweenParams().SetLoops(-1).SetEase(Ease.OutElastic); // 将设置应用到tween中 transformA.DOMoveX(15, 1).SetAs(tParms); transformB.DOMoveY(10, 1).SetAs(tParms);
控制Tween
有三种方式来控制tween,它们共享相同的方法名,除了带有Do前缀的快捷方法。// 停止全部Tween DOTween.PauseAll(); // 停止以“badoom”为Id的Tween DOTween.Pause("badoom"); // 停止以someTransform为目标的Tween DOTween.Pause(someTransform);2.通过tween实例引用
myTween.Pause();3.快捷方式
transform.DOPause();
控制Tween的方法
CompleteAll/Complete(bool withCallbacks = false) FlipAll/Flip() //翻转tween的方向(如果向前则向后翻转,如果向后,则向前翻转) GotoAll/Goto(float to, bool andPlay = false) //tween要到达的时间位置 KillAll/Kill(bool complete = false, params object[] idsOrTargetsToExclude) PauseAll/Pause() PlayAll/Play() PlayBackwardsAll/PlayBackwards() PlayForwardAll/PlayForward() RestartAll/Restart(bool includeDelay = true, float changeDelayTo = -1) //重新播放tween; includeDelay为true重新播放时包含tween的延迟否则跳过延迟;changeDelayTo将给定的值设置为延迟值。 RewindAll/Rewind(bool includeDelay = true) //回退并暂停tween;includeDelay为true包含tween的延迟否则跳过延迟 SmoothRewindAll/SmoothRewind() //平滑的回退tween(不包含延迟);SmoothRewind 将tween设置到其开始的位置而不是跳转到该位置。会忽略所有运行时的循环LoopType.Incremental除外。同时保证动画流畅。 如果被在等待延迟时间的tween调用则会简单的将延迟设置为0并停止tween。平滑回退的tween效果将翻转播放的方向。 TogglePauseAll/TogglePause() //如果补间已暂停,则播放补间;如果正在播放,则暂停。
特定的控制方法
对于全部Tween- ForceInit()强制初始化
对于特定类型
-
GotoWaypoint(int waypointIndex, bool andPlay = false)
获取tween的数据
静态方法
static List<Tween> PausedTweens() //返回处于暂停状态的所有活动补间的列表,如果没有活动的暂停补间,则返回 NULL。 static List<Tween> PlayingTweens() static List<Tween> TweensById(object id, bool playingOnly = false) //通过ID获取Tween;playingOnly:只返回正在播放的tween static List<Tween> TweensByTarget(object target, bool playingOnly = false) //通过目标获取,tween的目标是在使用快捷方式时自动设置的而不是在使用通用方式时设置的。 //注意:DOTweenAnimation 可视化编辑器会将其游戏对象指定为目标(而不是变换、材质或快捷方式的实际目标),因此可以使用这个方法获取可视化创建的补间。 注意:调用获取TweenList的方法会产生垃圾分配,因为每次调用都会生成一个新的列表。 static bool IsTweening(object idOrTarget, bool alsoCheckIfPlaying = false) //如果给定的Id或目标处于活动状态就返回true。 alsoCheckIfPlaying:如果为 FALSE(默认值),则只要给定目标/ID 的补间处于活动状态,就会返回 TRUE,否则还要求它正在播放。 static int TotalActiveSequences() static int TotalActiveTweens() static int TotalActiveTweeners() static int TotalPlayingTweens() static int TotalTweensById() //返回具有给定 ID 的活动补间的总数,无论它们是否正在播放。
实例方法(Tween/Tweener/Sequence)
float fullPosition //获取和设置tween的时间位置(包含循环,不包含延迟) int CompletedLoops() //返回补间完成的循环总数。 float Delay() float Duration(bool includeLoops = true) //返回补间的持续时间(排除延迟,如果 includeLoops 为 TRUE,则返回完整循环时间,否则只返回单个循环时间)。注意:当使用像 SpeedBased 这样的设置时,补间开始时将重新计算持续时间。 float Elapsed(bool includeLoops = true) //返回补间当前经过的时间(排除延迟,如果 includeLoops 为 TRUE,则返回自启动以来的完整运行时间,否则返回当前循环周期的运行时间)。 float ElapsedDirectionalPercentage() //基于单个循环,返回此补间(排除延迟)的已运行过的百分比(0 到 1),并将最终向后 Yoyo 循环计算为 1 到 0,而不是 0 到 1。 float ElapsedPercentage(bool includeLoops = true) //返回此补间(排除延迟)的已运行过的百分比(0 到 1)includeLoops: 如果为 TRUE,则返回自启动循环以来所经过的百分比,否则返回当前循环周期内所经过的百分比。 bool IsActive() bool IsBackwards() bool IsComplete() bool IsInitialized() bool IsPlaying() int Loops() //返回分配给补间的循环总数。
实例方法 Path tweens
Vector3 PathGetPoint(float pathPercentage) Vector3[] PathGetDrawPoints(int subdivisionsXSegment = 10) float PathLength()
等待协程和异步
协程 Coroutines
Tweens 附带了一组有用的 Yield指令,可以将它们放置在协程中,并允许等待某些事件发生。所有这些方法都有一个可选的 bool 参数,允许返回 自定义Yield指令。
WaitForCompletion() WaitForElapsedLoops(int elapsedLoops)//创建一个yield指令,该指令将一直等待,直到补间被终止或完成给定数量的循环。IEnumerator SomeCoroutine() { Tween myTween = transform.DOMoveX(45, 1).SetLoops(4); yield return myTween.WaitForElapsedLoops(2); // 将在第二次循环后打印下面的log Debug.Log("Tween has looped twice!"); }WaitForKill()//等待tween被销毁 WaitForPosition(float position) WaitForRewind() WaitForStart()
异步 Task
这些方法返回一个要在异步操作中使用的任务,以等待某些事件发生。
AsyncWaitForCompletion()await myTween.AsyncWaitForCompletion();AsyncWaitForElapsedLoops(int elapsedLoops) AsyncWaitForKill() AsyncWaitForPosition(float position)//创建一条yield指令,该指令一直等待,直到补间被杀死或到达给定的时间位置(包括循环,不包括延迟)。 AsyncWaitForRewind() AsyncWaitForStart()
附加方法
静态方法(DoTween)
static DOTween.Clear(bool destroy = false) //结束全部tween,清理全部pools,并将最大tweener和序列容量设为默认值。 //注意:这个方法应该只用于调试目的,或者当你不打算在你的项目中创建/运行任何更多的tween时,因为它完全取消初始化DOTween及其内部插件。如果你只是想杀死所有的渐变,可以使用静态方法DOTween.KillAll()。 //destroy如果为true会将tween对应的游戏对象给销毁,重置其初始化,默认设置和其他内容。(以便在下次使用时重新初始化) static DOTween.ClearCachedTweens() //清理pools中的全部缓存 static DOTween.Validate() //验证所有活动的tween并最终删除无效的tween(通常是因为它们的目标已被销毁)。这是一个稍微昂贵的操作,所以要小心使用。此外,没有必要使用它,特别是safemode设置为true。 static DOTween.ManualUpdate(float deltaTime, float unscaledDeltaTime) //更新所有设置为UpdateType.Manual的tween。
实例方法
tween(Tweener,Sequences)
Tween Done() ManualUpdate(float deltaTime, float unscaledDeltaTime)
tweener
ChangeEndValue(newEndValue, float duration = -1, bool snapStartValue = false) ChangeStartValue(newStartValue, float duration = -1) ChangeValues(newStartValue, newEndValue, float duration = -1)
编辑器方法
在编辑器中预览tween
static DOTweenEditorPreview.PrepareTweenForPreview(bool clearCallbacks = true, bool preventAutoKill = true, bool andPlay = true) static DOTweenEditorPreview.Start(Action onPreviewUpdated = null) static DOTweenEditorPreview.Stop()
虚拟方法和额外的方法
虚拟方法
虚拟方法不可以放在序列中
static Tweener DOVirtual.Float(float from, float to, float duration, TweenCallback<float> onVirtualUpdate) static Tweener DOVirtual.Int(int from, int to, float duration, TweenCallback<float> onVirtualUpdate) static Tweener DOVirtual.Vector3(Vector3 from, Vector3 to, float duration, TweenCallback<float> onVirtualUpdate) static Tweener DOVirtual.Color(Color from, Color to, float duration, TweenCallback<float> onVirtualUpdate) static float DOVirtual.EasedValue(float from, float to, float lifetimePercentage, Ease easeType \ AnimationCurve animCurve) static float DOVirtual.EasedValue(Vector3 from, Vector3 to, float lifetimePercentage, Ease easeType \ AnimationCurve animCurve) static Tween DOVirtual.DelayedCall(float delay, TweenCallback callback, bool ignoreTimeScale = true)
额外的方法
static Vector3 DOCurve.CubicBezier.GetPointOnSegment(Vector3 startPoint, Vector3 startControlPoint, Vector3 endPoint, Vector3 endControlPoint, float factor) static Vector3 DOCurve.CubicBezier.GetSegmentPointCloud(Vector3 startPoint, Vector3 startControlPoint, Vector3 endPoint, Vector3 endControlPoint, int resolution = 10) static Vector3 DOCurve.CubicBezier.GetSegmentPointCloud(List<Vector3> addToList, Vector3 startPoint, Vector3 startControlPoint, Vector3 endPoint, Vector3 endControlPoint, int resolution = 10)
Tween常见运动曲线
4个类型的效果:
- In: 从0开始加速;
- Out: 减速到0;
- lnOut:前半段从0开始加速,后半段减速到0;
- Linear: 直线效果,匀速的效果;
- Flash: 闪烁效果;
- Quad:二次方的;
- Cubic:三次方的;
- Quart:四次方的;
- Quint:五次方的;
- Sin:正弦曲线的缓动( sin(t)) ;
- Expo:指数曲线的缓动(2At) ;
- Circ:圆形曲线的缓动( sqrt(1-t^2));
- Elastic :指数衰减的正弦曲线缓动;;
- Back:超过范围的三次方缓动((s+1)tN3 - st^2) ;
- Bounce:指数衰减的反弹缓动。
自定义动画曲线:
AnimationCurve easeCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1));//new Keyframe(X轴坐标, Y轴坐标) tween.SetEase(easeCurve);