ゲーム開発を試してみようと思い立ち、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]の内容がスポーン時に反映されない人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。