指定回数アクタにHitしたら次のノードに着火したい

UE5.4で、トレースがHitしたアクタのTagを調べて、前回Hitしたアクタと別のTagを持っていたら、
下の写真の変数CounterをIncrementしてCounterが指定した数と同じになれば、次のノードに着火したいです。


このようなノードを組んだのですが、5種類のTagにHitしたらPrintStringに着火してほしいのに、2,3種類目のHitでPrintStringに着火してしまいます。

5種類のアクタにはこのようなTagをつけています。
『mirror1』『mirror2』のようにTagは別の名前にしています。

NameのForEachLoopのArrayElementにPrintStringを繋げると上の写真のようなログが出ます。

ほかに何か情報が必要でしたら教えてください。

ご教授させていただきたく思っているので、どうかよろしくお願いいたします。

これは見た感じかなりバグを産みやすいコードだと感じますし問題点も検討はついているのですが、要件が正確に理解できていないので以下確認させてください。

・5種類「全て」のMirror(?)にHitしたらというPrintStringを発火という事でしょうか?Mirror1とMirro2を交互に5回Hitさせても発火させたいですか?

・Mirrorにはそれぞれmirror1~mirror5のTagが設定されているという事でしょうか?(BP_Reflection「5」にmirror「1」が設定されているので気になりました)

・AllMirrorのタグは全てのMirrorに設定されていますか?
AllMirror以外にもmirror1~5以外に設定されているタグがありますか?

お世話になっております。
説明不足ですいませんでした。

5種類全てにHitしたらPrintStringに発火させたいです。

MirrorにはそれぞれTagをmirror1~mirror5を割り当てています。(BP_Reflection「5」にmirror「1」を設定したのは、適当に割り当ててしまったからです。まぎらわしくてすいませんでした)

AllMirrorのタグは全てのMirrorに設定されています。

AllMirror以外にもmirror1~5以外に設定されているTagはありません

よろしくお願いします!

ありがとうございます。

では問題点は恐らく2つあります。
1つずつ説明します。

1:更新されるReflectionTagが「これまでHitしてきたMirror全てを合わせたもの」ではなく、「前回HitしたMirrorのTags」という事です。
つまりMirror1→Mirror2→Mirror3とHitさせた時。ReflectionTagは
初期
Mirror1にHit後[mirror1,AllMirror]
Mirror2にHit後[mirror2,AllMirror]
Mirror3にHit後[mirror3,AllMirror]
という事になります。
この場合、Mirror2をHitさせた後に、もう一度Mirror1をHitさせてもReflectionTagに存在しないタグがあるためインクリメントが動作してしまいます。

2:AllMirrorがあることで少なくとも初回はインクリメントが2回動作する。
もし、ReflectionTagの初期値にAllMirrorを入れていない場合。
ReflectionTagに対してMirror1のタグ[mirror1,AllMirror]がForEachで存在チェックを行います。
つまり2回の存在チェックが入るため、インクリメントが2回動作します。
仮に1の問題を解消してもこの場合、4回のHitで着火することになります。

恐らく、2,3種類で着火してしまうのは1で「別のMirrorにヒットさせた後再度既にHitしたMirrorにHitさせた事」と2の「AllMirrorタグのせいで2回インクリメントが発動する場合がある」の両方が原因かと思います。

と、問題点をお伝えはしましたが、正直この処理はあまり好ましくないように思います。
やりたいことは[mirror1,mirror2,mirror3,mirror4,mirror5,(AllMirror)]という配列を作る事であり、それを回数で計測するというのは意図しない挙動を引き起こす可能性が高いでしょう。

簡単なパターンとしては以下のような方法があります。

AddUniqueは配列に存在しないタグを追加する関数です。これでReflectionTagに都度タグの中身を追加していき、ReflectionTagが5種類(AllMirrorがあるなら6種類のため6に設定してください)になったら着火という形です。

より厳密に今回の要件を満たそうと思った時、つまり[mirror1,mirror2,mirror3,mirror4,mirror5]の配列を厳密にチェックしたい場合は以下のような形があります。

恐らくこれで上手く行くと思うので一度試してみてください。

お世話になっております。

ご教授していただいたやり方を試してみたところ、上手くいきました!

この度は本当にありがとうございました!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.