【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)

静态 列表<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 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<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)

 七、Creating custom plugins

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

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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用DOTween插件Unity中实现摄像机跟随路径运动的示例代码: 1. 首先,您需要安装DOTween插件。您可以在Unity Asset Store中搜索“DOTween”并安装它。 2. 创建一个空对象并将其命名为“CameraPath”。 3. 将路径上的所有点作为子对象添加到“CameraPath”对象中。每个子对象应该包含一个Transform组件,指定该点的位置。 4. 在“CameraPath”对象上添加一个脚本组件,并使用以下代码: ```csharp using UnityEngine; using DG.Tweening; public class CameraPathController : MonoBehaviour { public Transform[] waypoints; // 存储路径上的所有点 public float duration = 10.0f; // 动画持续时间 public Ease easeType = Ease.Linear; // 动画插值类型 void Start() { Camera.main.transform.DOPath(GetWaypoints(), duration, PathType.CatmullRom).SetEase(easeType); // 创建路径动画 } Vector3[] GetWaypoints() { Vector3[] path = new Vector3[waypoints.Length]; // 创建路径数组 for (int i = 0; i < waypoints.Length; i++) // 将路径上的所有点添加到路径数组中 { path[i] = waypoints[i].position; } return path; } } ``` 在此示例中,我们使用DOTween的DOPath方法来创建路径动画。我们将路径上的所有点存储在“waypoints”数组中,并使用GetWaypoints方法将它们转换为一个Vector3数组。我们还可以指定动画的持续时间和插值类型。 5. 将摄像机添加到场景中,并将其设置为“CameraPathController”脚本中使用的摄像机。 6. 运行场景并观察摄像机沿着路径移动的效果。 请注意,您可以根据需要调整路径点的数量和位置,并在“CameraPathController”脚本中调整动画的持续时间和插值类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值