C++で簡単なゲームを作っていて、プレイヤーの体力が0になった時に、ウィジェットを表示しようとしたところAddToViewportの部分で必ずクラッシュします。なぜでしょうか?
それ以外のウィジェットは問題なく表示されています。
プレイヤーの体力を少なくしてウィジェットが動作するかを確認したときは問題なく動作しました。
すでにAddToViewportされていないこと、
widget != nullptr であること、
UPROPERTYを使用していること
は確認してあります。
C++で簡単なゲームを作っていて、プレイヤーの体力が0になった時に、ウィジェットを表示しようとしたところAddToViewportの部分で必ずクラッシュします。なぜでしょうか?
それ以外のウィジェットは問題なく表示されています。
プレイヤーの体力を少なくしてウィジェットが動作するかを確認したときは問題なく動作しました。
すでにAddToViewportされていないこと、
widget != nullptr であること、
UPROPERTYを使用していること
は確認してあります。
結果として、AddToViewportをする前にCreateWidgetをすることで解決しました。
これが正しい考察かは分かりませんが、最初にゲームインスタンスでCreateWidgetして、そのままウィジェットに対する操作を何も行わなかったため、widgetのポインタがなくなっていた(?)(別の物に置き換わっていた?)のかもしれません。
これに関連しそうなドキュメントがあれば教えてほしいです。
https://answers.unrealengine.com/questions/938055/view.html
UMGへのポインタにUPROPERTY()を書いてやることで根本的に解決できました。