【Unity3D插件】DoTween插件(三)

一、 控制补间

您有 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 在杀死它之前立即完成补间(将目标设置为其最终值)。
idsOrTargetsToExclude   KillAllonly > 要从操作中排除的最终目标或 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, TweenerSequence实例开始工作。
强制补间立即初始化其设置。
如果您想从补间中获取数据,该数据在补间初始化之前不可用(如 PathLength) ,则很有用

特定类型

这些是仅适用于某些特定类型的补间的特殊控制方法

GotoWaypoint( int waypointIndex, bool andPlay = false )

仅适用于补间和来自 的路径TweenTweener使用 线性缓动的实例。
发送补间到给定航路点索引的路径。
请注意,这是一个特殊的实用方法:调用此方法后,lookAt 方向可能是错误的,可能需要手动设置(因为它依赖于平滑的路径移动,并且不适用于包含剧烈方向变化的跳跃)。
waypointIndex,  (如果高于最大航点索引,补间将简单地转到最后一个)。
andPlay  如果为 TRUE,补间将在到达给定位置后播放,否则将暂停。

myPathTween.GotoWaypoint(2);

二、从补间获取数据

静态方法(DOTween)

静态 列表 PausedTweens()

返回处于暂停状态的所有活动补间的列表,如果没有活动的暂停补间,则返回 NULL。
注意:调用此方法会创建垃圾分配,因为每次调用都会生成一个新列表。

静态 列表 PlayingTweens()

返回处于播放状态的所有活动补间的列表,如果没有活动的正在播放补间,则返回 NULL。
注意:调用此方法会创建垃圾分配,因为每次调用都会生成一个新列表。

static List TweensById(object id, bool playingOnly = false )

返回具有给定 id 的所有活动补间的列表,如果没有具有给定 id 的活动补间,则返回 NULL。
注意:调用此方法会创建垃圾分配,因为每次调用都会生成一个新列表。
playingOnly  如果 TRUE 仅返回当前正在播放的具有给定 ID 的补间,否则返回所有补间。

static List 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 TRUE

static 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();

三、WaitFor 协程/任务

协程

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();

四、其他方法

静态方法 (DOTween)

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/Tweener/Sequence)

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 + extra methods(虚拟+额外方法)

Virtual methods

NOTE: virtual methods can't be placed inside Sequences.

static Tweener DOVirtual.Float(float from, float to, float duration, TweenCallback onVirtualUpdate)

static Tweener DOVirtual.Int(int from, int to, float duration, TweenCallback onVirtualUpdate)

static Tweener DOVirtual.Vector3(Vector3 from, Vector3 to, float duration, TweenCallback onVirtualUpdate)

static Tweener DOVirtual.Color(Color from, Color to, float duration, TweenCallback 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 addToList, Vector3 startPoint, Vector3 startControlPoint, Vector3 endPoint, Vector3 endControlPoint, int resolution = 10)

 七、Creating custom plugins

The sample UnityPackage from the examples page shows, among other things, how to create custom plugins.

示例页面中的 UnityPackage示例显示了如何创建自定义插件等。

你可能感兴趣的:(Unity,游戏,unity,游戏引擎,DoTween)