引き続き、Tutorialをやってみる。カウントダウンして爆発効果になるやつ。

掲示されているサンプルを打ち込んでコンパイルするとエラーになった。自分のやった修正方法が正しいのかわからないが、エラー回避できるように少し修正
file:Countdown.h
#pragma once
//#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Runtime/Engine/Classes/Components/TextRenderComponent.h"
#include "Countdown.generated.h"
UCLASS()
class TEST_CPP3_API ACountdown : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
ACountdown();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
UPROPERTY(EditAnywhere)
int32 CountdownTime;
UTextRenderComponent* CountdownText;
void UpdateTimerDisplay();
void AdvanceTimer();
UFUNCTION(BlueprintNativeEvent)
void CountdownHasFinished();
virtual void CountdownHasFinished_Implementation();
FTimerHandle CountdownTimerHandle;
};file:Countdown.cpp
#include "Components/TextRenderComponent.h"
#include "Countdown.h"
// Sets default values
ACountdown::ACountdown()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = false;
CountdownText = CreateDefaultSubobject<UTextRenderComponent>(TEXT("CountdownNumber"));
CountdownText->SetHorizontalAlignment(EHTA_Center);
CountdownText->SetWorldSize(150.f);
RootComponent = CountdownText;
CountdownTime = 3;
}
// Called when the game starts or when spawned
void ACountdown::BeginPlay()
{
Super::BeginPlay();
UpdateTimerDisplay();
GetWorldTimerManager().SetTimer(CountdownTimerHandle, this, &ACountdown::AdvanceTimer, 1.0f, true);
}
// Called every frame
void ACountdown::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
void ACountdown::UpdateTimerDisplay()
{
// CountdownText->SetText(FString::FromInt(FMath::Max(CountdownTime, 0)));
CountdownText->SetText(FText::FromString(FString::FromInt(FMath::Max(CountdownTime, 0))));
}
void ACountdown::AdvanceTimer()
{
--CountdownTime;
UpdateTimerDisplay();
if (CountdownTime < 1)
{
GetWorldTimerManager().ClearTimer(CountdownTimerHandle);
CountdownHasFinished();
}
}
void ACountdown::CountdownHasFinished_Implementation()
{
//CountdownText->SetText(TEXT("GO!!"));
CountdownText->SetText(FText::FromString("GO!!"));
}
memo:
UFUNCTION(BlueprintNativeEvent)と宣言することで、BlueprintからCountdownHasFinishedを呼び出すことが可能になっている。
サンプルを見ずにC++でコーディングできる日が来るのかどうかは分からないけど、プログラミングすることでパーツの動きを制御できるのは面白くてワクワクする。