타임라인 만들기
다음 단계를 따르면 액터 클래스에서 나만의 타임라인 컴포넌트(Timeline Component)를 만들고 인스턴스화할 수 있습니다.
C++ 클래스(C++ Classes) 폴더로 이동하여 + 추가(+Add)를 클릭합니다. 드롭다운 메뉴에서 새로운 C++ 클래스(New C++ Class)를 선택합니다.
액터(Actor) 클래스를 부모 클래스(Parent Class)로 선택합니다.
생성된 액터 클래스의 이름을 Timeline Actor로 지정합니다.
TimelineActor.h파일로 이동하여 다음과 같은TimelineComponent클래스 라이브러리를 포함합니다.TimelineActor.h
C++#include "Components/TimelineComponent.h"TimelineActor 클래스 정의 내에 다음과 같은 클래스 선언을 구현합니다.
TimelineActor.h
C++protected: UPROPERTY(EditAnywhere, BlueprintReadWrite) UTimelineComponent* ExampleTimelineComp;이 코드 샘플에서는 프로퍼티 지정자 태그(Property Specifier Tags), 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++ 클래스(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"));
}
타임라인 변수
UProperty 지정자를 사용하는 타임라인 컴포넌트를 C++에서 생성한 경우, 컴포넌트 탭에서 변수로 사용할 수 있습니다. 이는 블루프린트 스크립팅을 통해 타임라인 컴포넌트에
지속적인 반복작업을 수행하려는 디자이너에게 유용할 수 있습니다.
위 이미지는 블루프린트에서 타임라인의 현재 재생 속도 값을 구하기 위해 네이티브 C++ 타임라인 변수를 사용한 경우를 나타낸 것입니다.
사용 가능한 블루프린트 타임라인 노드 및 해당하는 함수 기능의 전체 목록은 타임라인 노드 페이지를 참조하세요.
FTimeLineEvent 생성하기
타임라인 이벤트(FOnTimelineEvent)는 타임라인 컴포넌트에 이벤트를 처리하는 기능을 제공하는 다이내믹 델리게이트입니다.
아래의 단계를 따라 타임라인 컴포넌트의 완료된 함수 기능에 바인딩된 FTimeLineEvent를 직접 만들 수 있습니다.
TimelineActor.h파일로 이동한 뒤 클래스 정의(Class Definition)에 다음과 같은 코드를 선언합니다.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"));
}