蓝图节点

如下是官方在FAB上上传的所支持的全部函数。

LTwwen是LGUI插件的一部分,作者把这一块单独拆分出来,便于独立使用。其使用起来和Unity的DoTween类似。

其蓝图函数很多,都在LTween类别下。

CurveFloat自定义曲线

unity中可以自定义缓动曲线,LTween也支持;类型叫做CurveFloat。

在内容浏览器右键选择曲线,弹出框选择CurveFloat。

image-muqg.png

LTween 将使用 0 到 1 的水平范围作为开始和结束时间,请记住这一点,并将曲线制作成您想要的任何类型;然后在蓝图中设置本曲线。

Loop循环

循环是一个很重要的功能。可以从LTween节点retun value处拉出引用获取SetLoop函数进行参数设置。

  • Once: 执行一次,无循环

  • Restart:每一个循环都从头开始。‘

  • Yoyo:补间以交替周期向前和向后的往复移动。

  • Incremental:在每个循环周期结束时连续递增补间(A 到 B,B 到 B+(A-B),依此类推)

注意!不要忘记设置“新循环计数”,0 或 1 表示没有循环,-1 表示无限循环。

image-sAEU.png
image-nWLm.png

设置不受游戏暂停以及时间膨胀影响

通常,当设置 GamePause 时,补间动画也会暂停;当设置 TimeDilation 时,补间动画也会受到 dilated-time 的影响。但有时我们不希望这样,我们希望我们的补间动画在设置 GamePause 时仍然处理,或者在设置 TimeDilation 时仍然使用实时。因此,这两个属性适用于这种情况:

  • SetAffectByGamePause:设置 GamePause 时,此补间会受到影响吗?默认值为 true,表示当 GamePause 时,此补间也会暂停,false 表示如果 GamePause,此补间仍将处理。

  • SetAffectByTimeDilation:这个补间会受到 TimeDilation 的影响吗?默认值为 true,表示补间将使用扩展时间,false 表示补间将使用实时。

每一个动画单独设置,如下图所示。

使用LGUI元素本身创建动画注意事项

对于 LGUI 的 ScreenSpaceUI 元素,如果使用自己的函数创建补间(例如 UIItem.WidthTo),则它会自动调用 SetAffectByGamePause(false) 和 SetAffectByTimeDilation(false),因此 UI 不会受到这两件事的影响(就像 UMG 一样)。这可以通过更改 LGUISettings 来改变;同时,UMG也是如此。

SetTickType设置动画更新时机模式

当创建一个新的补间时,动画将在TickingGroup:: DuringPhysics中执行,这也是Actor和ActorComponent的默认TickingGroup。可以为动画设置不同的更新时机模式。

参数 PrePhysics DuringPhysics PostPhysics PostUpdateWork 与 UE 的默认 TickingGroup 类似。

  • PrePhysics: 在物理模拟之前更新

  • DuringPhysics: 在物理模拟期间更新(默认值)

  • PostPhysics: 在物理模拟之后更新

  • PostUpdateWork: 在最终更新阶段执行

  • Manual: 手动更新,需要调用ManualTick()

Events事件

事件函数也是补间动画中不可缺少的功能。LTween 提供以下事件:

  • OnStart:动画开始时执行,如果补间有延迟,则延迟后执行

  • OnUpdate:如果正在补间,则执行每一帧

  • OnComplete:动画完成后执行,如果补间有循环,则在所有循环后执行。如果是无限循环,则根本不执行(按照unit中的DTween,手动调用

  • OnCycleStart:执行每个循环周期启动(根据源码,即使不设置循环,也会执行)

  • OnCycleComplete:执行每个循环周期完成(根据源码,即使不设置循环,也会执行)

设置事件功能很简单。例如 OnUpdate,拖出“Return Value”并添加新节点“On Update”,拖出“New Update”并添加自定义事件(add custom event),该事件将在动画开始后每帧执行:

functions功能函数

  • Pause/Resume:暂停/恢复动画

  • Restart:重新启动动画

  • Goto:及时将补间发送到给定位置。(将时间点设置在0到动画持续时间之间,并将循环计数和反向标志重置为初始状态。)

  • Kill/KillIfIsTweening:如果动画已经开始,则终止补间

  • ForceComplete:在此帧强制完成此动画,并调用 OnComplete

  • IsTweening:指定的动画对象是否正在活跃运行中。

  • GetLoopCycleCount:获取补间动画循环周期计数

  • GetProgress:获取范围 0 1 中的补间进度。

  • ause/Resume:暂停/恢复动画

  • Restart:重新启动动画

  • Goto:及时将补间发送到给定位置。(将时间点设置在0到动画持续时间之间,并将循环计数和反向标志重置为初始状态。)

  • Kill/KillIfIsTweening:如果动画已经开始,则终止补间

  • ForceComplete:在此帧强制完成此动画,并调用 OnComplete

  • IsTweening:指定的动画对象是否正在活跃运行中。

  • GetLoopCycleCount:获取补间动画循环周期计数

  • GetProgress:获取范围 0 1 中的补间进度。

Material

LTween 为“Material Instance Dynamic”对象提供了“Material Vector Parameter To”和“Material Scalar Parameter To”节点和mesh的材质节点。

image-jlaz.png

实用功能

VirtualCall

注册开始/更新/完成事件,设置持续时间,以便执行这些事件;这是一个纯定时回调动画,不对任何属性做插值操作。

  • 纯时间控制:只提供时间流逝和回调触发,不修改任何对象属性

  • 回调驱动:通过startupdatecomplete三个回调函数来执行自定义逻辑

  • 灵活性:可以用来实现任何基于时间的自定义动画或逻辑

Update接收的值是0-1的float值,是当前动画执行进度。Delay调用后延时多少秒开始执行;Duration执行多长时间。返回的LTweenERValue支持Tween的一些控制功能函数。

DelayCall

这个和UE的delay节点相同,更多的是在C++里使用;确保回调在主线程中执行,并且支持是否受时间膨胀和游戏暂停影响。

ULTweenBPLibrary::DelayCall(World, 2.0f, [](){
    ...(your function here)
});

实际上它是VirtualCall的简化版本,只使用了OnComplete回调。返回的TweenValue支持Tween的一些控制功能函数。

DelayFrameCall

基于帧数的延迟执行函数,与基于时间的DelayCall不同,它按帧数而非时间来计算延迟,并且支持是否受游戏暂停影响。

注意,返回的LTweenervalue不支持设置延迟和循环,都会输出Error错误日志。

UpdateCall

每帧调用事件,相对于UE的Tick回调,受LTweenManager统一管理,并且借助LTWeener的功能函数对其进行控制。适用于需要临时接入Tick帧回调情况。

RepeatCall

是一个重复执行函数,用于在指定的时间间隔内重复调用指定的函数。

  • 重复执行:按指定间隔重复调用函数

  • 延迟控制:可以设置第一次调用前的延迟时间

  • 次数控制:可以指定重复次数,-1表示无限循环

  • delayTime:第一次调用前的延时。

  • interval:每次调用之间的间隔时间。

  • repeatCount:重复次数,默认一次,-1则为无限循环。

内部实现是借助OnCycleStart以保证在循环周期开始前就执行。

image-FvSU.png

LTweenerSequence

这个和unity的DoTween的Sequence很像,主要用来做一个动画序列。它将一组其他Tween动画控制为单个Tween。首先,它仍然是一个补间,因此它继承了普通补间的所有属性和功能。它也有自己的属性和功能,继承自ULTweener

主要函数如下,当序列开始,将无法进行添加。

  • Append:将动画添加到序列末尾;不支持如下类型:延迟(Delay)/ 帧延迟(DelayFrame)/ 虚拟(Virtual)

  • AppendInterval:添加一个float间隔到序列末尾。

  • Insert:在指定时间位置插入动画,必要时自动添加时间间隔;不支持如下类型:延迟(Delay)/ 帧延迟(DelayFrame)/ 虚拟(Virtual)

  • Prepend:将动画添加到开头,将其他内容向后推移;不支持如下类型:延迟(Delay)/ 帧延迟(DelayFrame)/ 虚拟(Virtual)。

  • PrependInterval:将指定的间隔时间添加到开头,将其他内容向后推移。

  • Join:将动画添加到上一个参数坐在时间位置(内部会记录上次添加的时间位置);Join添加的是时间位置而不是TweenerList物理位置。

LTweenerSequence可以嵌套使用,因为本身继承于ULTweener,因此可以把当前序列天啊及到另一个序列里;当序列被添加到另一个序列时,LTweenManager会自动处理嵌套关系,系统会调用ULTweenManager::RemoveTweener()将子序列从全局管理列表中移除,然后由父序列负责管理其生命周期,这也是其他标准Tweener动画添加到LTweenerSequence序列中的操作,都会让其离开全局,然后父LTweenerSequence接管生命周期。

创建

通过Create Sequence节点创建。

auto Sequence = ULTweenBPLibrary::CreateSequence(this);
image-SqTN.png

添加Tweener

Sequence->Append(this, ULTweenBPLibrary::LocalPositionXTo(Actor1->GetRootComponent(), 100, 1.0f));
Sequence->Insert(this, 0.5f, ULTweenBPLibrary::LocalPositionYTo(Actor1->GetRootComponent(), 100, 1.0f));
Sequence->Prepend(this, ULTweenBPLibrary::LocalPositionZTo(Actor1->GetRootComponent(), 100, 1.0f));
Sequence->Join(this, ULTweenBPLibrary::LocalPositionXTo(Actor2->GetRootComponent(), 100, 1.0f));
image-Pftx.png

属性

  • SetDelay:设置序列开始前等待时间。

  • SetEase:设置序列的缓动函数;影响的是整个序列的时间速度,序列内部的每个动画保持自己缓动设置。

  • SetLoop:设置序列的循环模式

  • GetLoopCycleCount:获取当前已经完成的循环次数。

Sequence->SetDelay(0.5f);
Sequence->SetEase(LTweenEase::InOutSine);
Sequence->SetLoop(LTweenLoop::Restart, -1);
Sequence->GetLoopCycleCount();
image-vhke.png

事件

Sequence->OnStart([=]{...});
Sequence->OnUpdate([=](float progress){...});
Sequence->OnComplete([=]{...});
Sequence->OnCycleStart([=]{...});
Sequence->OnCycleComplete([=]{...});
image-KbsO.png

控制

Sequence->Pause();
Sequence->Resume();
Sequence->Restart();
Sequence->Goto(0.5f);

UMG

这里没什么花哨的,只需在带有“UMG”前缀的 LTween 类别中找到提供的函数:

image-qniW.png