BeginPlayが2度処理されるのは何故?

画像と状態から察するに、WidgetをAddtoViewportしているActorが2つ存在している。というのが濃厚かと思われます。

画像で言うところのEscapeLoomのActorがいくつ存在するか、確認してみることをお勧めします。

確認方法としては、GetAllActorofClass関数でクラスを指定して、帰ってきた配列のLengthノードで数を調べるなどがあります。

他の状況はわからないため確実な解決策とはなりませんが、ワールドにすでに置かれているのにSpawnActorで生成したりすることでこういった状況になる場合があります。

レベルブループリントで生じている問題のようですので、actorが原因の可能性は低そうです。
actorのBeginPlayイベントが複数回発生している場合は、LunaNelisさんの仰っているような原因がありがちですが、レベルブループリントでは通常ありえない挙動です。
もしプロジェクト固有で生じている場合はバグの可能性があります。

初質問です。よろしくお願いします。

レベルブループリントに書いた「イベントBeginPlay」の処理がいつの間にか2度行われるようになり、
「Add to Viewport」したウィジェットが2重になってしまって困っています。

「イベントBeginPlay」は一度だけ呼び出されるはずですが何が原因で起こっていいるのでしょうか?

画像は処理を簡潔化してテストしているところです。

返信ありがとうございます。
uponHaveFunさんのおっしゃる通りアクターではなくレベルBPなのですが、
LunaNelisさんのご教授通りノードを繋いでみたところ、「EscapeLoom14」「FirstPersonExampleMap8」と表示されました。
末尾の数字は何の数字かわかりませんが、どうやら古いレベル「FirstPersonExampleMap8」※別名保存で元は消去済みで存在しない が原因の様に思います。

プロジェクトフォルダ内にも「FirstPersonExampleMap」はどこにも存在していないので、uponHaveFunさんのおっしゃる通りバグなのでしょか?それか私自身の操作に問題があったのでしょうか?

補足です。

GetDisplayNameノードを使うことで、そのActorの固有名を取得できます。

以下の画像のように繋いで、もし違う名前が表示されたのであれば同じActorが2つ存在しているのはほぼ間違いないと思われます。

350629-1.png

ActorName

ActorName_2

のようなログが出るはず。

Escape_Loomはプロジェクト設定のデフォルトマップまたはスタートアップマップに設定されているマップでしょうか?
でしたら、プロジェクト設定で上記設定を1度クリアした後、再度Escape_Loomに設定し直し、プロジェクトを再起動したらどうなりますでしょうか。
プロジェクトのGameInstance設定などでも、複製したものを別名保存した場合にこのような”設定のし直し”が必要になるケースがあります。

昔からまれにある現象で、umapの定義が何らかの影響で壊れるのか、初期化時にLevelScriptActorのInstanceが複数生成されることがあるようです
AnswerHubでもForumでもそこそこの件数の相談が上がっています
観測範囲上では原因はつかめていないようで、もし再現性があるようであればバグ報告してみてください


以下、対症療法を提示します
手元では以下の手順で事象を解決できています

  • 対象のLevelのLevelBlueprintを開き、 ClassSettingsGenerateAbstractClass をONにする
  • 一度コンパイルする
  • 対象のLevelをリロード(再度オープン)する
  • GenerateAbstractClass をOFFに戻し、コンパイルする

回答ありがとうございます。
この方法で無事解決いたしました。

昔からある現象だったのですね…問題の探し方が分からず回答頂き助かりました。

上記の方法試してみましたが解決できませんでした…
別の方法で解決する事が出来ました。
回答ありがとうございます、たすかりました。