在.h中:
声明TimeLine和CurveFloat:
//声明一个TimeLine
FTimeline GroundThornFirstUpTimeLine;
//声明TimeLine的CurveFloat(也即函数曲线)
UPROPERTY(BlueprintReadWrite, EditAnywhere)
UCurveFloat* FirstUpTimeLineCurve;
在蓝图中创建一个CurveFloat函数曲线
选择CurveFloat
配置好曲线
并在声明类的蓝图中指定该曲线
在BeginPlay中:
声明委托,和TimeLine里执行的函数绑定,这里Text里面是函数的名称,注意这个GroundThornFirstUpFunction函数包含参数float DeltaTime,拿到DeltaTime,在这个函数中通过DeltaTime和位置或旋转相乘来实现渐变效果,也可用Lerp传入DeltaTime,把初始和最终信息传入即可
FOnTimelineFloatStatic FirstUpTimeLineCallBack;
FirstUpTimeLineCallBack.BindUFunction(this, TEXT("GroundThornFirstUpFunction"));
再将TimeLine和委托函数、函数曲线绑定
GroundThornFirstUpTimeLine.AddInterpFloat(FirstUpTimeLineCurve, FirstUpTimeLineCallBack);
在Tick中:
需要让TimeLine获取DeltaTime
GroundThornFirstUpTimeLine.TickTimeline(DeltaTime);
在需要调用TimeLine的时候:
GroundThornFirstUpTimeLine.PlayFromStart();
调用TimeLine的PlayFromStart方法,会自动执行委托所绑定的函数
当TimeLine执行完毕该怎么做?
调用TimeLine的SetTimeLineFinishedFunc方法,TimeLine执行完跳转到GroundThornDownFinishedFunction函数中
FOnTimelineEventStatic DownTimeLineEvent;
DownTimeLineEvent.BindUFunction(this, TEXT("GroundThornDownFinishedFunction"));
GroundThornFirstUpTimeLine.SetTimelineFinishedFunc(DownTimeLineEvent);
这里讲解下:
SetTimeLineFinishedFunc的参数是个委托,源码中是这样声明的
void FTimeline::SetTimelineFinishedFunc(FOnTimelineEventStatic NewTimelineFinishedFunc)
{
TimelineFinishFuncStatic = NewTimelineFinishedFunc;
}
源码中该参数委托是这样声明的
/** Static version of delegate to handle a timeline 'event' */
DECLARE_DELEGATE( FOnTimelineEventStatic );
/** Static version of timeline delegate for a float track */
DECLARE_DELEGATE_OneParam( FOnTimelineFloatStatic, float );
/** Static version of timeline delegate for a vector track */
DECLARE_DELEGATE_OneParam( FOnTimelineVectorStatic, FVector );
/** Static version of timeline delegate for a linear color track */
DECLARE_DELEGATE_OneParam( FOnTimelineLinearColorStatic, FLinearColor );