タイムラインを作成する
以下の手順に従って、Actor クラスに独自の Timeline コンポーネントを作成してインスタンス化することができます。
「C++ Classes」フォルダに移動し [+Add (+追加)] をクリックします。 ドロップダウン メニューから [New C++ Class (新規 C++ クラス)] を選択します。
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 (コンポーネント)] タブで Example Timeline Component を確認することができます。
作成中のコード
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"));
}
タイムライン変数
UProperty 指定子 を使って C++ に Timeline コンポーネントを作成すると、[Components] タブで変数として使用することができるようになります。 デザイナーがブループリント スクリプティングを介して TimelineComponent へのイタレーションを継続したい場合、
これは便利な場合があります。
上の画像では、ネイティブ C++ タイムライン変数を使って、ブループリントで Timeline の Current Play Rate 値を取得します。
利用可能なブループリントの Timeline ノード、およびその機能の一覧は、「Timeline ノード」ページを参照してください。
FTimeLineEvent を作成する
Timeline イベント (FOnTimelineEvent) は、Timeline Component にイベントを処理する機能を提供する動的デリゲートです。
以下の手順に従って、Timeline コンポーネントの完成した機能にバインドする独自の 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関数にバインドすることができました。コードをコンパイルします。 エディタを開いて、コンテンツ ブラウザに移動します。 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"));
}