オーバーラップしたアクターを破壊しようとするとエラーが出ます。
そのアクターの破壊自体は出来るのですが、ForEachLoopの部分にエラーが出るようです。
Tickでやったり、ブランチでやったり試したのですが、いつもForEachLoopやブランチにエラーが出ます。
エラーの理由もよくわからないので、どうすれば良いのか分かりません。
回答よろしくお願いします。
オーバーラップしたアクターを破壊しようとするとエラーが出ます。
そのアクターの破壊自体は出来るのですが、ForEachLoopの部分にエラーが出るようです。
Tickでやったり、ブランチでやったり試したのですが、いつもForEachLoopやブランチにエラーが出ます。
エラーの理由もよくわからないので、どうすれば良いのか分かりません。
回答よろしくお願いします。
ここで出力されているログの"pending kill" は、既に実体として存在していないObject(Null Object)に対して
DestroyActorを行っていることによるものです。
この問題解決方法として、DestroyActorの前にIsValidを追加してObjectそのものが存在しているかのチェックを行う方法や、Foreachを使用せずに、単純にOverlapのOtherActorPinをCastノードに接続して、1度のみチェックを行うようにして下さい。
こうすることで、存在しないObjectに対するDestroy処理を行わくなります。
宜しくお願いします。
単純にぶつかってきたActorをDestroyしたい場合は、OnComponentBeginOverlapのOtherActorをDestroyActorのTargetに繋げばぶつかって来たActorを削除出来ます。
添付されているスクリーンショットの状態ですとFlying_nortに何かがぶつかったらFlying_nort自身を削除してしまいます。その上でForEachLoopで既に消してしまったFlying_nortを削除しようとしているのでスクリーンショットのように大量のエラーが出てます。
上記の補足として処理を示します、赤枠の箇所が上記で説明した処理の概要です。
GetOverlappingActorsでもActorを取得できますが、イベント駆動型の設計思想で考えるとOverlapComponentから処理する方法が良いと思われます。
エラーの理由を詳しく教えてくださってありがとうございます。
とても参考になりましたし、合点がいきました。
回答ありがとうございました!
処理の流れまで教えてくださってありがとうございます。
その通りにしてみたところ、想定通りの動きになりました!
回答ありがとうございました!