single.php

Unreal EngineでConstruction Scriptがスポーン時に反映されない場合の対処法

ゲーム開発を試してみようと思い立ち、Unreal Engine 5をインストールして開発する過程で調べてみた部分を備忘録的に投稿します。今回は、アクターブループリントクラスなどのConstruction Scriptで行った変更がレベルにスポーンした際に反映されない場合の対処法です。

スポーンすると反映されない

例えば、[TextBox]を配置したウィジェットブループリントを作成します。

[Widget Component]で作成した、ウィジェットクラスを設定して[Construction Script]で表示するテキストの内容を変更します。

エディタ内での表示も更新されます。(ウィジェットのデザイン時は[テキストボックス]表示が[愛知]に変わります)

しかし、このブループリントクラスをレベルに配置(スポーン)させると、なぜか更新した内容が反映されません([テキストブロック]で表示)。

実行すると[Construction Script]の内容が反映されます。

不思議に思っていましたが、Unreal Engineのフォーラムの内容「Updating Widget Components Inside the Editor」で解決できました。

Construction Script は謎な部分が多い

C++のコンストラクターのような感じだと勝手に考えていますが、少し違うようです。今でも謎の部分が多いUnreal Engineの[Construction Script]です。

1.[ウィジェット ブループリント]を作成して[Textbox]を配置します。

2.[Widget Component]を追加して[Widget Class]に手順1. で作成した[ウィジェット ブループリント]を設定します。

3.[Widget Component]の[イベントグラフ]に下のようなノードを追加して[ウィジェット ブループリント]の[TextBox]の値を変更します。

4.[Update Widget]イベントを[Construction Script]で呼び出します。

5.[ブループリントクラス]の[詳細]画面などで変更した内容がエディタ内で反映されます。

6. レベル上に[ブループリントクラス]をスポーンさせるとクラスの[ビューポート]では反映されていた内容が反映されません。

7. 何故か、実行時には反映されます。

すごく不思議だったのですが、次の方法で解決することができました。

[Delay Until Next Tick]で解決

1.[Update Widget]イベントの直後に[Delay Until Next Tick]ノードを追加します。(もの凄い短い時間を待つというノードです)

2. スポーン時に更新されるようになりました。

3. 当然、実行時も更新されています。

まとめ

今回は、Unreal Engineの[Construction Script]で行った内容が、ブループリントクラスをレベルに配置(スポーン)した際に反映されない場合の対処法について書きました。

C++のコンストラクターのような感じで考えていましたが、エディタの特性なのか仕様なのか分かりませんが、Unreal Engineの[Construction Script]には少し謎の部分があります。

とりあえず、今回の課題は[Delay Until Next Tick]ノードで解決ができました。

Unreal Engineの関数で[Construction Script]の内容がスポーン時に反映されない人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です