fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

PREV | PAGE-SELECT | NEXT

≫ EDIT

UE4 配列に入っているすべてのアクター(Actor)を破棄して配列の要素も削除する

配列に入っているすべてのアクター(Actor)を破棄する方法のメモです。
これについてはアクターだけでなく、配列のコンポーネントなどを破棄する場合にも使えるのかなと思います。
一度軽くはまったので備忘録として。

例としてアクターを持つ6個の要素を持つ配列を用意しました。

まずは配列に入っているすべてのアクターを破棄しつつ、配列の要素からも削除していきます。
普通にBPを書くとこんな感じになると思います。
配列全削除000

するとこんな感じの結果になりました。
配列全削除001
6個要素があるのに3回しか実行されません。

これは配列の「Remove」を行うことで配列の要素数が減ってしまい、
結果3回しかループが実行されない
というのが原因になります。

ここらへんC++とかでのイテレーター周りの間隔に似てる感じですかね。

ANSWERHUB にも同じような質問があるようです。

・オーバーラップしたアクターをDestroy Actorで破壊しようとするとエラーが出ます。

これを解決する方法を調べてみるとこんな感じの物がありました。

・How can I properly destroy actors from an array inside a loop

これを解決する方法として配列の要素数はその場では減らさず、
ループが終わったときに配列の要素をクリアしよう。
というものみたいですね。

BPはこんな感じに。
配列全削除006
要素数は減らさないが、配列の中身は無効にしておく。といったものみたいですね。

結果はこんな感じに。
配列全削除003
無事6回実行されているようです。

上記の他に解決する方法として、
「ReverseForEachLoop」を使うというのができそうです。
こんな感じですね。
配列全削除004
配列の逆から回せば要素数減っても問題ないよね。というものです。
一応「Remove」は「Index」を使って削除してます。


実行するとこんな感じに。
配列全削除005
こちらも無事6回実行されているようですね。

みなさんわかってるかもしれませんが、うちはつまずいたのでメモということで…。

| UE4 | 18:42 | comments:0 | trackbacks:0 | TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://kagring.blog.fc2.com/tb.php/458-cf74f4d1

TRACKBACK

PREV | PAGE-SELECT | NEXT