创建时间轴
你可按照以下步骤,在Actor类中创建并实例化自定义的时间轴组件。
找到你的C++ Classes文件夹,并点击添加+(Add+)。 在下拉菜单中选择新建C++类(New C++ Class)。
选择Actor类作为父类。
将新建的Actor类命名为Timeline Actor。
找到
TimelineActor.h文件并包含以下TimelineComponent类的库。TimelineActor.h
C++#include "Components/TimelineComponent.h"在TimelineActor类定义中实现以下类声明:
TimelineActor.h
C++protected: UPROPERTY(EditAnywhere, BlueprintReadWrite) UTimelineComponent* ExampleTimelineComp;在此代码示例中,你需要使用属性说明符标签EditAnywhere和BlueprintReadWrite。
找到
TimelineActor.cpp文件,然后将以下代码添加到你的TimelineActor构造函数ATimelineActor::ATimelineActor()之中。TimelineActor.cpp
C++ATimelineActor::ATimelineActor() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true; ExampleTimelineComp = CreateDefaultSubobject<UTimelineComponent>(TEXT("TimelineComponent")); }编译你的代码。
找到C++ Classes文件夹,右键点击你的TimelineActor,并基于你的TimelineActor类创建蓝图。 将其命名为Bp_TimelineActor。
创建TimelineActor蓝图后,你可以查看类默认值(Class Defaults)。 在组件(Components)选项卡中,这时你应该可看到你的时间轴组件示例。
阶段性代码
TimelineActor.h
#pragma once
#include "Components/TimelineComponent.h"
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "TimelineActor.generated.h"
UCLASS()
class CPPTIMELINE_API ATimelineActor : public AActor
{
GENERATED_BODY()
TimelineActor.cpp
#include "TimelineActor.h"
// Sets default values
ATimelineActor::ATimelineActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
ExampleTimelineComp = CreateDefaultSubobject<UTimelineComponent>(TEXT("TimelineComponent"));
}
时间轴变量
当你在C++中使用UProperty说明符创建时间轴组件后,该组件会成为组件(Components)选项卡中的可用变量。 对于想要继续通过蓝图脚本对时间轴组件进行迭代的设计人员来说,
这个变量很有用。
上图显示了使用原生C++时间轴变量获取蓝图中时间轴的当前播放速率(Current Play Rate)值。
如需了解全部的可用蓝图时间轴节点及其功能详情,请参阅时间轴节点页面。
创建FTimeLineEvent
时间轴事件(FOnTimelineEvent)属于动态委托,可以为时间轴组件提供处理事件的能力。
请按以下步骤创建你自己的FTimeLineEvent,并将其绑定到你的时间轴组件的已完成功能。
找到
TimelineActor.h文件并在类定义中声明以下代码:TimelineActor.h
C++protected: //Delegate signature for the function which will handle our Finished event. FOnTimelineEvent TimelineFinishedEvent; UFUNCTION() void TimelineFinishedFunction();找到
TimelineActor.cpp,并实现以下代码:TimelineActor.cpp
C++void ATimelineActor::TimelineFinishedFunction() { UE_LOG(LogTemp, Warning, TEXT("Finished Event Called.")); }找到
ATimelineActor::BeginPlay()方法,并实现以下代码:TimelineActor.cpp
C++// Called when the game starts or when spawned void ATimelineActor::BeginPlay() { Super::BeginPlay(); TimelineFinishedEvent.BindUFunction(this, FName("TimelineFinishedFunction")); ExampleTimelineComp->SetTimelineFinishedFunc(TimelineFinishedEvent); ExampleTimelineComp->PlayFromStart(); }现在你已成功将
TimelineFinished事件绑定到自定义TimelineFinished函数。编译你的代码。 打开编辑器(Editor)并找到内容浏览器(Content Browser)。 找到你的BP_TimelineActor并将其拖移到关卡中。
按下播放(Play)按钮。 这时你应该可以在输出日志(Output Log)窗口看到以下消息:
已完成代码
TimelineActor.h
#pragma once
#include "Components/TimelineComponent.h"
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "TimelineActor.generated.h"
UCLASS()
class CPPTIMELINE_API ATimelineActor : public AActor
{
GENERATED_BODY()
TimelineActor.cpp
#include "TimelineActor.h"
// Sets default values
ATimelineActor::ATimelineActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
ExampleTimelineComp = CreateDefaultSubobject<UTimelineComponent>(TEXT("TimelineComponent"));
}