💬

UE4 新規C++クラス作成後にC++処理が実行されなかった場合

2020/10/12に公開

概要

新規C++クラス作成をしてログ出力のコードを書いてみたが実行されなかったので悩んでいた話
バージョン UE4.25.3

  • 遭遇した現象
    新規C++クラスを作成でGameInstanceSubsystemを作成したとき、ビルドもコンパイルも正常に終了したのにInitializeとDeinitializeに入れたログが出ず動作しなかった。
    エディタを再起動したあとプレイボタンを押すとログが出るようになり動作が確認できた。

GameInstanceSubsystemとは

お馴染み猫でもわかるGameInstanceSubsystem
https://www.slideshare.net/EpicGamesJapan/ue4-subsystem
公式ドキュメント
https://docs.unrealengine.com/ja/Programming/Subsystems/index.html

作ってみた

公式ドキュメントの手順Qiitaの記事を参考に進めましたが、自分の環境では実行してもログが確認できませんでした。
Blueprint上からはGameInstanceSubsystemは取得できますが、BlueprintCallableにした関数もBlueprintから呼べない状態でした。

アウトプットログに赤枠のログが出るはずが出ない・・・

ビルドエラーがあるっか何か手順間違えていたかと見直しましたが原因となりそうな箇所がなく、仕方なくエディタ再起動してみたらログが表示されてBlueprintからもBlueprintCallableにした関数を呼べるようになりました。

再現手順

今回の手順を検証

  1. 新規UE4プロジェクトをブループリントプロジェクトで作成する
  2. 新規C++クラスを作成する
  3. UE4がVSプロジェクトを作成する
  4. C++クラスに処理を書く
  5. 実行しても処理は呼ばれない

この手順だとVSプロジェクトが作成されたあとにUE4を再起動しないとC++の処理が実行されませんでした。
VSプロジェクトがある状態で新規C++クラス作成後はVSプロジェクトの再読み込みを行い、C++に処理を書いたら実行してくれました。

解決方法

  • 新規C++クラス作成してVSプロジェクトが作成された場合はUE4を再起動する
  • UE4プロジェクト作成時にブループリントではなくC++を選択して作成する

のどちらかになると思います。

Discussion