pollenJP
(pollenJP)
1
再現性があるので適当な新規プロジェクトで再現した動画へのリンクを貼っておきます.
動画概要欄 or コメントに時間リンクを記述しており, 手順と同様なのでその手順を以下に示しいます.
- 00:04 新しいPawn BP作成
- 01:41 UStaticMeshComponent派生のC++クラスの作成
- 04:50 UCLASSに meta = (BlueprintSpawnableComponent) を追加しBlueprintから追加可能にする.
- 06:54 BP_SamplePawn2 の Component に SampleSMComponent を追加
- 07:03 SampleSMComponent の StaticMesh に Sphere を選択
- 07:33 SampleSMComponent のポップアップ説明用のコメントを編集して recompile
- 08:01 recompile 後の SampleSMComponent StaticMesh を確認すると reference が null (None) になっている.
期待している動作はrecompile後もStaticMeshのreferenceが保持される動作です.
今のままではBP上で一度指定したreferenceをrecompileするたびに参照しなおさなければならず, とても大変な作業となっています.
これはUE4エンジン由来のバグなのでしょうか? 拙い英語で調べましたが同様の質問を確認できませんでした.\
対策の仕方を教えていただきたいと思っております. 宜しくお願いいたします!!
pollenJP
(pollenJP)
2
今回初めて投稿したため投稿の編集ができないため, 編集しようとしていた詳しい説明をこちらに記述いたします.
作成した際の名前を記述しそびれましたが, それぞれ BP_Sample2, SampleSMComponent という名前で作成しました…
- 00:04 新しいPawn BP作成 (BP_SamplePawn2)
- 01:41 UStaticMeshComponent派生のC++クラスの作成 (SampleSMComponent)
pollenJP
(pollenJP)
3
以下のfixで修正されるかもしれません.
UE4.25までしかリリースされていない現在ではresolvedの判断ができないので, UE4.26で修正されていたらresolvedにしたいと思います.
UE-52220
Hot reload causes placed actor to lose variable references
おそらく以下のIssueに関係するものと思われます
UE4.24.3では再現しましたが、UE4.25.3では再現しなかったため、
最新バージョンでは修正されているようです
対策としては以下のいずれかになるかと思います
- ソースコードからビルドしているEngineの場合、上記チケットの修正点を取り込む
- LauncherからダウンロードしたEngineであれば、バージョンアップを検討する
pollenJP
(pollenJP)
5
ありがとうございます!
UE4.25へのバージョンアップを試してみます!
T_Sumisaki
(T_Sumisaki)
6
追加で調べてみてますが、HotReloadが原因でPropertyの値が飛ぶパターンがあるようです
安全を考慮するなら、ヘッダファイルの変更がかかるようなパターンでは、HotReloadを避けるほうが安全かもしれません
pollenJP
(pollenJP)
7
調べて本当にいただきありがとうございます!!
UnrealEngine_JP_Community Discordで既にお話しした内容ですが, AnswerHub上で返信ができるようになったと思われるのでログを残す意味で, 一部をこちらに記述いたします. (こちらに返信する形が良いと考えました.)
また, もしHotreloadを介さずにBlueprint上のPropertyをBlueprintに保存方法に心当たりが有りましたら教えていただきたいです. (以下の2つ目のdiscordログ)
以下, discordのログ(一部)
UE4.25.3で新規プロジェクトから再現してみたところバグを再現できてしまいました.
UE4.25.3 でのバグチェック - YouTube
→ これに関しては, Hotreload をしない方がよいとのお返事をいただいております.
以下, discordのログと追記(一部)
StaticMeshComponentをC++継承したコンポーネント上で, Static Mesh を指定した際, 値がちゃんと保存されていないという可能性が出てきました.
Saveボタンを押した時点でgitのhash値が変わっていたので保存されていたと思っていましたが, Blueprint上で変更を加えずにSaveボタンを押してもhash値が変わったため, 保存されていない可能性が十分あります.
これもHotreloadのバグが関係していると勝手に思っております.
Blueprint上のPropertyの値をHotreloadを挟まずに保存する方法が有りましたら教えていただきたいです.
ただ再起動しただけですが一応動画を上げておきます.
Static Mesh を指定→終了→起動→Static Mesh がnull - YouTube
VSでREBUILDを挟んだもの
Static Mesh を指定→UE4終了→VSでrebuild→UE4起動→Static Mesh がnull - YouTube