女の子のNPCとチャットするゲームを作っています。
条件を満たすと「TalkGenerate」のカスタムイベントが走り、スクロールボックスにテキストを内蔵したウィジェット「ui_TalkMessage」が追加される処理をブループリントで作りました。
この処理の問題は、AddChildしたウィジェットが画面には描画されないことがあり、
画面には出ていないにも関わらず、「ui_TalkMessage」の内部処理は実行されてしまうことです。
それによって、チャット内容がツギハギになるという問題が発生しています。
具体的には1~3回目のAddChildでは画面にウィジェットが描画されるが、
4回目は描画されず、5回目は描画される、といったことが起こります。
どの様な条件の時に、AddChildしたウィジェットが画面に描画されない現象が起こりますか?
もしくは、描画されていないことを検知して、内部の処理を実行しない方法などありますか?
kiruru002
(kiruru002)
2
AddChild した瞬間に ui_TalkMessage の Event Pre Construct と Event Construct がエンジンによって呼び出されます
そこに何らかの非表示処理を書いていませんか?
返信ありがとうございます。
確かに呼び出された時にこのイベントが走っています。
ただ、ここに非表示処理は書いてはいません。
最初の数回は正常に描画され、その後数回描画されなくなり、また描画されるといった挙動をします。
例えば以下の様になります。
期待する挙動:
1.女の子A:おはよう
2.女の子A:今日はいい天気だね
3.女の子A:私は晴れた日に散歩するのが好きなんだ
4.女の子A:あなたと一緒に行きたいな
5.女の子A:また遊びに行こうね
実際の挙動:
1.女の子A:おはよう
4.女の子A:あなたと一緒に行きたいな
5.女の子A:また遊びに行こうね
kiruru002
(kiruru002)
4
ありがとうございます。
ClearChildren のノードを試してみました。
結果として、出力は変わらずでした…。
リアルタイムに「TalkGenerate」のカスタムイベント処理を行いたいため、For文で追加し直すわけにはいかず、都度AddChildが必要です。
そのため、最初にClearChildrenを実行した後に、最初に添付した画像の「TalkGenerate」の処理を走らせるテストをしてみたのですが、結果は変わりませんでした。
kiruru002
(kiruru002)
6
ではもっと簡単な例から試すことをおススメします
今まで使用していた処理やウィジェット類は忘れて、何もないレベルを作成し、レベルブループリントでスクロールボックスのみのウィジェットを生成するなどして、AddChildした結果がどうなるか確認してください
それで期待通りに働かなければエンジン側のバグなので、こちらのフォームから報告してください
あとこの場合AddChildを正しい回数行えているか確認したほうが良いので、TalkGenerateのブレークポイントが何回通っているか数えてみてください
追加でウィジェットリフレクターも試してみてください
[Tools] > [Debug] > [Widget Reflector]
Unreal Engine でスレート ウィジェット リフレクタを使用する | Unreal Engine 5.3 ドキュメント
[UE4] Widget Reflectorを使ってリソースや設定を調べよう #UE4 - Qiita
1 Like
kiruru002
(kiruru002)
7
改めてコードを見てみるとScrollBoxの子供に直接ウィジェットを増やしているので、これだと表示がうまくいかない可能性がありますね
このようにVerticalBoxかListViewを挟むと縦方向にスクロールができます
1 Like
こちら試してみたところ、全てのAddChildが描画されました!!
この見落としは自分では気づけなかったかもしれません…。
無事解決に至りました。
ありがとうございます!!
1 Like