見出し画像

[Unity] Transformをforeachしたら想定外の挙動になった

コード書いとる?

Unity2022.3.xのC#スクリプトで想定外の挙動に遭遇したのでメモ書き。ここはnote

自分の子供を列挙する

自分の子供を列挙して親をすげ替えるのに、こんな感じに実装していました

foreach (Transform child in transform)
{
  child.SetParent(null);
}

ところがこれが思ったように動作しない!全て列挙されない...スキップされる。

そう...foreachで列挙している最中に親子関係が変わるとその後の列挙は正しく動作しないのでした!

解決策

列挙しながら親子関係に手を入れるのをやめ、一旦配列にするようにしたら思ったように動作しました!

transform.Cast<Transform>()
         .ToList()
         .ForEach(child =>
                  {
                    child.SetParent(null);
                  });

こういう時LINQは楽よね。LINQ大好き!

ここで公式リファレンス見たらTransform.DetachChildrenというおもくそおあつらえむきな関数があった...やはりそうなのか...皆この想定外の挙動にでくわしていたか...

スッキリ!

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?