赞
踩
您有 3 种方法来操作补间。它们都共享相同的方法名称,除了具有附加前缀的快捷方式增强的方法名称。DO
A. 通过静态方法和过滤器
DOTween 类包含许多允许您控制补间的静态方法。它们中的每一个都有一个适用于所有现有补间的“全部
”版本(如DOTween.KillAll
)和一个简单版本( ,而通过快捷方式创建补间时会自动设置目标)。DOTween.Kill(myTargetOrId)
静态方法还返回一个 int,它表示实际上能够执行请求操作的所有补间。
- // 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);
B. 直接来自补间
您可以从补间参考中调用相同的方法,而不是使用静态方法。
myTween.Pause();
C. 来自快捷方式增强的参考
与上面相同,但您可以从快捷方式增强的对象中调用这些相同的方法。请记住,在这种情况下,方法名称有一个附加DO
前缀,以将它们与常规对象方法区分开来。
transform.DOPause();
同样,请记住,所有这些方法名称都由所有操作方式共享,但是在对象快捷方式的情况下,还有一个额外的DO
前缀。
重要提示:请记住,要在补间结束后对补间使用这些方法,您必须禁用其 autoKill 行为,否则补间会在完成时自动终止。
CompleteAll/Complete(bool withCallbacks = false)
将补间发送到其结束位置(对具有无限循环的补间无效)。
withCallbacks仅适用于序列:如果 TRUE 内部序列回调将被触发,否则它们将被忽略。FlipAll/Flip()
翻转补间的方向(如果向前,则向后,反之亦然)。
GotoAll/Goto(float to, bool andPlay = false)
及时将补间发送到给定位置。
to 要到达的时间位置(如果高于整个补间持续时间,补间将简单地到达其结束)。
andPlay 如果为 TRUE,补间将在到达给定位置后播放,否则将暂停。KillAll/Kill(bool complete = false, params object[] idsOrTargetsToExclude)
杀死补间。
补间在完成时会自动终止(除非您使用 阻止它SetAutoKill(false)
),但如果您不再需要它,您可以使用此方法更快地终止它。
complete 如果 TRUE 在杀死它之前立即完成补间(将目标设置为其最终值)。
idsOrTargetsToExcludeKillAll
only > 要从操作中排除的最终目标或 ID。PauseAll/Pause()
暂停补间。
PlayAll/Play()
播放补间。
PlayBackwardsAll/PlayBackwards()
向后播放补间。
PlayForwardAll/PlayForward()
播放补间前锋。
RestartAll/Restart(bool includeDelay = true, float changeDelayTo = -1)
重新启动补间。
includeDelay 如果 TRUE 包括最终的补间延迟,否则跳过它。
changeDelayTo 将补间的延迟设置为给定的延迟。RewindAll/Rewind(bool includeDelay = true)
倒回并暂停补间。
includeDelay 如果 TRUE 包括最终的补间延迟,否则跳过它。SmoothRewindAll/SmoothRewind()
平滑倒带补间(不包括延迟)。
“平滑倒带”将补间动画设置到其起始位置(而不是跳转到它),跳过所有经过的循环(除了 的情况LoopType.Incremental
),同时保持动画流畅。
如果调用仍在等待延迟发生的补间,它将简单地将延迟设置为 0 并暂停补间。
注意:平滑倒带的补间将翻转其播放方向。TogglePauseAll/TogglePause()
如果暂停则播放补间,如果正在播放则暂停。
所有补间的共同点
ForceInit()
从
Tween
,Tweener
或Sequence
实例开始工作。
强制补间立即初始化其设置。
如果您想从补间中获取数据,该数据在补间初始化之前不可用(如 PathLength) ,则很有用特定类型
这些是仅适用于某些特定类型的补间的特殊控制方法
GotoWaypoint( int waypointIndex, bool andPlay = false )
仅适用于补间和来自 的路径
Tween
或Tweener
使用 线性缓动的实例。
发送补间到给定航路点索引的路径。
请注意,这是一个特殊的实用方法:调用此方法后,lookAt 方向可能是错误的,可能需要手动设置(因为它依赖于平滑的路径移动,并且不适用于包含剧烈方向变化的跳跃)。
waypointIndex, (如果高于最大航点索引,补间将简单地转到最后一个)。
andPlay 如果为 TRUE,补间将在到达给定位置后播放,否则将暂停。
myPathTween.GotoWaypoint(2);
静态方法(DOTween)
静态 列表<Tween> PausedTweens()
返回处于暂停状态的所有活动补间的列表,如果没有活动的暂停补间,则返回 NULL。
注意:调用此方法会创建垃圾分配,因为每次调用都会生成一个新列表。静态 列表<Tween> PlayingTweens()
返回处于播放状态的所有活动补间的列表,如果没有活动的正在播放补间,则返回 NULL。
注意:调用此方法会创建垃圾分配,因为每次调用都会生成一个新列表。static List<Tween> TweensById(object id, bool playingOnly = false )
返回具有给定 id 的所有活动补间的列表,如果没有具有给定 id 的活动补间,则返回 NULL。
注意:调用此方法会创建垃圾分配,因为每次调用都会生成一个新列表。
playingOnly 如果 TRUE 仅返回当前正在播放的具有给定 ID 的补间,否则返回所有补间。static List<Tween> TweensByTarget(object target,bool playingOnly = false )
返回具有给定目标的所有活动补间的列表,如果没有具有给定目标的活动补间,则返回 NULL。
注意:补间的目标是在使用快捷方式时自动设置的,而不是在使用通用方式时。
注意: DOTweenAnimation 可视化编辑器会将其游戏对象指定为目标(而不是变换、材质或其他任何快捷方式的实际目标),因此如果您想抓取视觉创建的补间,请使用它。
注意:调用此方法会创建垃圾分配,因为每次调用都会生成一个新列表。
playingOnly 如果 TRUE 仅返回当前正在播放的具有给定目标的补间,否则返回所有补间。static bool IsTweening(object idOrTarget,bool alsoCheckIfPlaying = false)
如果具有给定 ID 或目标的补间处于活动状态,则返回 TRUE。
您还可以使用它来了解快捷方式补间是否在目标上处于活动状态。
alsoCheckIfPlaying 如果 FALSE(默认)在给定目标/ID 的补间处于活动状态时返回 TRUE,否则还需要它正在播放。
transform.DOMoveX(45, 1); // transform is automatically added as the tween target DOTween.IsTweening(transform); // Returns TRUEstatic int TotalActiveTweens()
返回活动补间的总数,无论它们是否正在播放。
int totalActive = DOTween.TotalActiveTweens();
static int TotalPlayingTweens()
返回活动和播放补间的总数。即使延迟实际上正在播放,补间也会被视为正在播放。
int totalPlaying = DOTween.TotalPlayingTweens();
实例方法(Tween/Tweener/Sequence)
float fullPosition
获取和设置补间的时间位置(包括循环,排除延迟)。
int CompletedLoops()
返回补间完成的循环总数。
int completedLoops = myTween.CompletedLoops();
float Delay()
返回为补间设置的最终延迟。
float eventualDelay = myTween.Delay();
float Duration(bool includeLoops = true)
includeLoops
返回补间的持续时间(不包括延迟,如果为 TRUE 则包括循环 )。
注意:使用 SpeedBased 等设置时,将在补间开始时重新计算持续时间。
includeLoops 如果 TRUE 返回包含的完整持续时间循环,否则返回单个循环周期的持续时间。
float loopCycleDuration = myTween.Duration(false); float fullDuration = myTween.Duration();float Elapsed(bool includeLoops = true)
includeLoops
返回补间当前经过的时间(不包括延迟,如果为 TRUE 则包括循环 )。
includeLoops 如果为 TRUE,则返回自包括启动循环以来经过的完整时间,否则返回当前循环周期内的经过时间。
float loopCycleElapsed = myTween.Elapsed(false); float fullElapsed = myTween.Elapsed();float ElapsedDirectionalPercentage()
返回此补间(不包括延迟)的经过百分比(0 到 1),基于单个循环,并将最终的向后 Yoyo 循环计算为 1 到 0 而不是 0 到 1。
float ElapsedPercentage(bool includeLoops = true)
返回此补间的经过百分比(0 到 1)(不包括延迟,如果
includeLoops
为 TRUE,则包括循环)。
includeLoops 如果 TRUE 返回自包含启动循环以来经过的百分比,否则返回当前循环周期内的经过百分比。
float loopCycleElapsedPerc = myTween.ElapsedPercentage(false); float fullElapsedPerc = myTween.ElapsedPercentage();bool IsActive()
如果补间已被杀死,则返回 FALSE。
bool isActive = myTween.IsActive();
bool IsBackwards()
如果补间被反转并设置为倒退,则返回 TRUE。
bool isBackwards = myTween.IsBackwards();
bool IsComplete()
如果补间完成,则返回 TRUE(如果补间已被终止,则静默失败并返回 FALSE)。
bool isComplete = myTween.IsComplete();
bool IsInitialized()
如果此补间已初始化,则返回 TRUE。
bool isInitialized = myTween.IsInitialized();
bool IsPlaying()
如果补间正在播放,则返回 TRUE。
bool isPlaying = myTween.IsPlaying();
int Loops()
返回分配给补间的循环总数。
int totLoops = myTween.Loops();
实例方法 ➨ 补间路径
Vector3 PathGetPoint(float pathPercentage)
根据给定的路径百分比返回路径上的一个点(
Vector3.zero
如果这不是路径补间、补间无效或路径尚未初始化,则返回)。
路径在其补间开始后初始化,或者如果补间是使用路径编辑器(DOTween Pro 功能)创建的,则立即初始化。
您可以通过调用 ForceInit来强制初始化路径。
pathPercentage 获取点的路径百分比(0 到 1)。
Vector3 myPathMidPoint = myTween.PathGetPoint(0.5f);
Vector3[] PathGetDrawPoints(int subdivisionsXSegment = 10)
返回可用于绘制路径的点数组(
NULL
如果这不是路径补间、补间无效或路径尚未初始化,则返回)。
注意:此方法会生成分配,因为它会创建一个新数组。
路径在其补间开始后初始化,或者如果补间是使用路径编辑器(DOTween Pro 功能)创建的,则立即初始化。
您可以通过调用 ForceInit来强制初始化路径。
subdivisionsXSegment 为每个路径段(航路点到航路点)创建多少点。仅在非线性路径的情况下使用
Vector3[] myPathDrawPoints = myTween.PathGetDrawPoints();
float PathLength()
返回路径的长度(如果这不是补间路径、补间无效或路径尚未初始化,则返回 -1)。
路径在其补间开始后初始化,或者如果补间是使用路径编辑器(DOTween Pro 功能)创建的,则立即初始化。
您可以通过调用 ForceInit来强制初始化路径。
float myPathLength = myTween.PathLength();
协程
Tweens 带有一组有用的 YieldInstructions,您可以将其放置在 Coroutines 中,并允许您等待某些事情发生。
所有这些方法都有一个可选的 bool 参数,允许返回一个CustomYieldInstruction
.
WaitForCompletion()
创建一个等待直到补间被杀死或完成的 yield 指令。
IEnumerator SomeCoroutine() { Tween myTween = transform.DOMoveX(45, 1); yield return myTween.WaitForCompletion(); // This log will happen after the tween has completed Debug.Log("Tween completed!"); }WaitForElapsedLoops(int elapsedLoops)
创建一个等待直到补间被杀死或经过给定数量的循环的 yield 指令。
IEnumerator SomeCoroutine() { Tween myTween = transform.DOMoveX(45, 1).SetLoops(4); yield return myTween.WaitForElapsedLoops(2); // This log will happen after the 2nd loop has finished Debug.Log("Tween has looped twice!"); }WaitForKill()
创建一个等待直到补间被杀死的 yield 指令。
IEnumerator SomeCoroutine() { Tween myTween = transform.DOMoveX(45, 1); yield return myTween.WaitForKill(); // This log will happen after the tween has been killed Debug.Log("Tween killed!"); }WaitForPosition(float position)
创建一个等待直到补间被杀死或到达给定时间位置的屈服指令(包括循环,不包括延迟)。
IEnumerator SomeCoroutine() { Tween myTween = transform.DOMoveX(45, 1); yield return myTween.WaitForPosition(0.3f); // This log will happen after the tween has played for 0.3 seconds Debug.Log("Tween has played for 0.3 seconds!"); }WaitForRewind()
创建一个等待直到补间被终止或倒带的 yield 指令。
IEnumerator SomeCoroutine() { Tween myTween = transform.DOMoveX(45, 1).SetAutoKill(false).OnComplete(myTween.Rewind); yield return myTween.WaitForRewind(); // This log will happen when the tween has been rewinded Debug.Log("Tween rewinded!"); }WaitForStart()
创建一个等待直到 tween 被杀死或启动的 yield 指令(意味着当 tween 第一次设置为播放状态时,在任何最终延迟之后)。
IEnumerator SomeCoroutine() { Tween myTween = transform.DOMoveX(45, 1); yield return myTween.WaitForStart(); // This log will happen when the tween starts Debug.Log("Tween started!"); }
Tasks
至少需要 Unity 2018.1 和 .NET Standard 2.0 或 4.6
这些方法返回 a Task
以在异步操作中使用,以等待某些事情发生。
AsyncWaitForCompletion()
返回一个
Task
等待直到补间被杀死或完成的a。
await myTween.AsyncWaitForCompletion();
AsyncWaitForElapsedLoops(int elapsedLoops)
返回一个
Task
等待直到补间被杀死或经历了给定数量的循环。
await myTween.AsyncWaitForElapsedLoops();
AsyncWaitForKill()
返回一个
Task
等到补间被杀死的a。
await myTween.AsyncWaitForKill();
AsyncWaitForPosition(float position)
返回一个
Task
等待直到补间被杀死或到达给定时间位置(包括循环,不包括延迟)。
await myTween.AsyncWaitForPosition(0.3f);
AsyncWaitForRewind()
返回一个
Task
等待直到补间被杀死或倒带。
await myTween.AsyncWaitForRewind();
AsyncWaitForStart()
返回一个
Task
等待直到补间被杀死或启动(意味着当补间第一次设置为播放状态时,在任何最终延迟之后)。
await myTween.AsyncWaitForStart();
static DOTween.Clear(bool destroy = false)
杀死所有补间,清除所有池,将最大补间/序列容量重置为默认值。
注意:此方法应仅用于调试目的或当您不打算在项目中创建/运行任何补间时,因为它完全取消初始化 DOTween 及其内部插件。 如果您只是想杀死所有补间,请改用静态方法DOTween.KillAll ()。
destroy 如果 TRUE 还破坏 DOTween 的游戏对象并重置其初始化、默认设置和其他所有内容(以便下次使用它时需要重新初始化)。static DOTween.ClearCachedTweens()
清除所有缓存的补间池。
static DOTween.Validate()
验证所有活动补间并删除最终无效的补间(通常是因为它们的目标已被破坏)。这是一项稍微昂贵的操作,因此请小心使用。此外,根本不需要使用它,尤其是在 安全模式打开的情况下。
static DOTween.ManualUpdate(float deltaTime, float unscaledDeltaTime)
更新所有设置为 的补间
UpdateType.Manual
。
Tween (Tweeners + Sequences)
ManualUpdate(float deltaTime, float unscaledDeltaTime)
强制此补间手动更新,无论
UpdateType
通过SetUpdate
.
注意:补间仍然受制于正常的补间规则,所以如果它被暂停,这个方法不会做任何事情。另请注意,如果您只想手动更新此补间实例,则必须将其设置为UpdateType.Manual
无论如何,以便它不会自动更新。
deltaTime手动增量时间。
unscaledDeltaTime 未缩放的增量时间(与设置为 的补间一起使timeScaleIndependent
)。
Tweener
ChangeEndValue(newEndValue, float duration = -1, bool snapStartValue = false)
更改 Tweener 的结束值并将其倒回(不暂停)。
对序列内的 Tweener 无效。
注意:适用于常规补间,而不是那些不仅仅是将一个值从一个点动画到另一个点(如DOLookAt
)的补间。
注意:对于接受单轴的快捷方式(DOMoveX/Y/Z、DOScaleX/YZ 等),您仍然必须传递完整的 Vector2/3/4 值,即使只考虑您在补间中设置的值。
newEndValue 新的最终价值。
duration 如果大于 0 也会改变补间的持续时间。
snapStartValue 如果为 TRUE,则起始值将成为当前目标的值,否则将保持不变。ChangeStartValue(newStartValue, float duration = -1)
更改 Tweener 的起始值并将其倒回(不暂停)。
对序列内的 Tweener 无效。
注意:适用于常规补间,而不是那些不仅仅是将一个值从一个点动画到另一个点(如DOLookAt
)的补间。
注意:对于接受单轴的快捷方式(DOMoveX/Y/Z、DOScaleX/YZ 等),您仍然必须传递完整的 Vector2/3/4 值,即使只考虑您在补间中设置的值。
newStartValue 新的起始值。
duration 如果大于 0 也会改变补间的持续时间。ChangeValues(newStartValue, newEndValue, float duration = -1)
更改 Tweener 的开始值和结束值并将其倒回(不暂停)。
对序列内的 Tweener 无效。
注意:适用于常规补间,而不是那些不仅仅是将一个值从一个点动画到另一个点(如DOLookAt
)的补间。
注意:对于接受单轴的快捷方式(DOMoveX/Y/Z、DOScaleX/YZ 等),您仍然必须传递完整的 Vector2/3/4 值,即使只考虑您在补间中设置的值。
newStartValue 新的起始值。
newEndValue 新的最终价值。
duration 如果大于 0 也会改变补间的持续时间。
Previewing tweens in editor
static DOTweenEditorPreview.PrepareTweenForPreview(bool clearCallbacks = true, bool preventAutoKill = true, bool andPlay = true)
UpdateType
通过将其设置为Manual
加上最终的额外设置 ,为编辑器预览准备给定的补间 。
clearCallbacks 如果 TRUE(推荐)在预览时删除所有回调(OnComplete/Rewind/etc)。
preventAutoKill 如果 TRUE 防止补间在预览完成时被自动终止。
andPlay 如果 TRUE 立即开始播放补间。static DOTweenEditorPreview.Start(Action onPreviewUpdated = null)
在编辑器中启动补间的更新循环。在 playMode 期间无效。 在调用此方法之前,您必须通过DOTweenEditorPreview.PrepareTweenForPreview
将补间添加到预览循环 。
onPreviewUpdated每次更新后调用的最终回调(在编辑器预览中)。static DOTweenEditorPreview.Stop()
停止预览更新循环并清除所有回调。
Virtual methods
NOTE: virtual methods can't be placed inside Sequences.
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 Tween DOVirtual.DelayedCall(float delay, TweenCallback callback, bool ignoreTimeScale = true)
Extra methods
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)
The sample UnityPackage from the examples page shows, among other things, how to create custom plugins.
示例页面中的 UnityPackage示例显示了如何创建自定义插件等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。