for文でlist内GameObjectの削除時の挙動
スクリプトは動いています。だけど腑に落ちないので質問します。
ballsという名前でListを作り、その中にballオブジェクトが10個入っている状態で、その中のballを全て削除したくてfor文を書きました。
for (var num = balls.Count -1; 0 < balls.Count; num--) {
balls.RemoveAt (num);
前から消したら処理中にリストの長さが変わると思ったのでケツから消してます。でもこの方法ではballsリストは0になったけど、ヒエラルキー上のオブジェクトは消えてくれませんでした。リストの登録のみを削除したようです。なので次にこう書きました
for (var num = balls.Count -1; 0 < balls.Count; num--) {
Destroy (balls[num]);
}
オブジェクトは消えてくれました。でもMissingReferenceExceptionが発生しました。いわゆるヌルポです。原因がわからないのでブレイクポイントを置いてみてみました
ループが回ってオブジェクトが削除されてもballs.Countが減ってません。Countメソッドは何を参照してるんでしょう?それともDestroyだと何か残骸が残るんでしょうか?
結局のところオブジェクトの削除だけであれば頭から消しても問題ありません(balls.Countは10のままですが)。どっちも綺麗にするなら、
for (var num = balls.Count -1; 0 < balls.Count; num--) {
Destroy (balls[num]); //オブジェクトの削除
balls.RemoveAt (num); //リストの削除
}
こんな風に二度手間になります。これでも動くけどもっとクールな方法があるはずですよね?