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






LTwwen是LGUI插件的一部分,作者把这一块单独拆分出来,便于独立使用。其使用起来和Unity的DoTween类似。
其蓝图函数很多,都在LTween类别下。

CurveFloat自定义曲线
unity中可以自定义缓动曲线,LTween也支持;类型叫做CurveFloat。
在内容浏览器右键选择曲线,弹出框选择CurveFloat。


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

Loop循环
循环是一个很重要的功能。可以从LTween节点retun value处拉出引用获取SetLoop函数进行参数设置。
Once: 执行一次,无循环
Restart:每一个循环都从头开始。‘
Yoyo:补间以交替周期向前和向后的往复移动。
Incremental:在每个循环周期结束时连续递增补间(A 到 B,B 到 B+(A-B),依此类推)
注意!不要忘记设置“新循环计数”,0 或 1 表示没有循环,-1 表示无限循环。


设置不受游戏暂停以及时间膨胀影响
通常,当设置 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的材质节点。

实用功能
VirtualCall
注册开始/更新/完成事件,设置持续时间,以便执行这些事件;这是一个纯定时回调动画,不对任何属性做插值操作。
纯时间控制:只提供时间流逝和回调触发,不修改任何对象属性
回调驱动:通过
start、update、complete三个回调函数来执行自定义逻辑灵活性:可以用来实现任何基于时间的自定义动画或逻辑
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以保证在循环周期开始前就执行。

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);
添加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));
属性
SetDelay:设置序列开始前等待时间。
SetEase:设置序列的缓动函数;影响的是整个序列的时间速度,序列内部的每个动画保持自己缓动设置。
SetLoop:设置序列的循环模式
GetLoopCycleCount:获取当前已经完成的循环次数。
Sequence->SetDelay(0.5f);
Sequence->SetEase(LTweenEase::InOutSine);
Sequence->SetLoop(LTweenLoop::Restart, -1);
Sequence->GetLoopCycleCount();
事件
Sequence->OnStart([=]{...});
Sequence->OnUpdate([=](float progress){...});
Sequence->OnComplete([=]{...});
Sequence->OnCycleStart([=]{...});
Sequence->OnCycleComplete([=]{...});
控制
Sequence->Pause();
Sequence->Resume();
Sequence->Restart();
Sequence->Goto(0.5f);UMG
这里没什么花哨的,只需在带有“UMG”前缀的 LTween 类别中找到提供的函数:

LGUI LTWeen插件
https://blog.rsjwy.com/archives/lgui-ltween-cha-jian
评论