Meiryo’s blog

やってみて詰まったことを備忘録として残すブログ

【UE5】公式チュートリアル「変数、タイマー、イベント」で詰まったことと解決法

Unreal Engine公式のC++チュートリアル
変数、タイマー、イベントをやったのですが
かなり詰まったので色々まとめておきます。

開発環境は
- UE5(Version: 5.0.3)
- Visual Studio2022

です。
UE4の人も使えるかもしれないので
詰まってここに辿り着いた方は見てみてください。

HowTo_VTEが無い

「HowTo_VTEを使用して」とありますが
このスターターコンテンツが見つかりませんでした。
代わりにFirst Personテンプレートでプロジェクトを
作ってうまくいったのでどのテンプレートでも大丈夫だと
思います。

UTextRenderComponentでコンパイルエラー

Countdown.cppで

#include "Components/TextRenderComponent.h"

を追加する手順ですが
Countdown.cppではなくCountdown.hに
追加をします。

最終的にインクルードするファイルは
Countdown.hでは

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Components/TextRenderComponent.h"
#include "Countdown.generated.h"

Countdown.cppでは

#include "Countdown.h"

でうまくいきました。

【参考】

forums.unrealengine.com

インクルードする順番の注意

"Countdown.generated.h"ファイルは
必ず最後にインクルードしてください
"Countdown.generated.h"の下の行で
何かをインクルードすると下記のエラーが出ます。

Error: #include found after .generated.h file - the .generated.h file should always be the last #include in a header

generated.hファイルは最後に記述するのが
UEでのルールのようです。

CountdownText->SetTextでコンパイルエラー

エラーが出ている箇所を下記のように書き換えて
うまくいきました。

void ACountdown::UpdateTimerDisplay()
{
    CountdownText->SetText(FText::AsNumber(FMath::Max(CountdownTime, 0)));
}


void ACountdown::CountdownHasFinished_Implementation()
{
    CountdownText->SetText(FText::FromString("GO!"));
}

【参考】

stackoverflow.com

Fatal error LNK1181: cannot open input file ~

チュートリアルを行っている途中で急に
発生しました。
これは正しい解決策がわかりませんでした。

とりあえずの対応ですがLiveCodingをオフにしたら
Buildが通るようになりました。
LiveCodingをオフにする方法はこちらを参照してください。

オーバライド関係

エラーなどの問題ではないのですが
「なぜCountdownHasFinished()を呼び出して
CountdownHasFinished_Implementation()も
呼び出されているのか」がわかりませんでした。

こちらのサイトを見つけそういう仕組みに
なっているということと、 C++とBPの両方でオーバライドができる関数を作っていた
ことがわかりました。

以上です。
他のチュートリアルも詰まりそうな気がしていて
もう既に苦しいですがなにかあったらまた書きます。