GameObject を Destroy() して、ヒエラルキー上からは消えても、実はしっかり存在している。
GetComponents で要素検索するとふつうにカウントされて返ってくるので、知らないとはまる(はまった)。
ちなみに、対象に null を入れても、GetComponents で取得できてしまう。
Debug.Log (GetComponents<Transform>().Length); // 1
Destroy (targetObject);
targetObject = null;
Debug.Log (GetComponents<Transform>().Length); // 1
(GCに時間かかってる・・?)
で、そういうときは、 DestroyImmediate を使うと即時破棄される。
めでたしめでたしかと思ったが、DestroyImmediate は推奨されてないっぽい。
直ちにオブジェクトを破壊する。ですが、Destroy 関数の方を使うことを推奨します
うーん、 コルーチンで非同期処理にすればよい・・のか?
子要素の全削除なら、Detach してやるって方法もある。
foreach (Transform n in transform)
{
Destroy(n.gameObject);
}
transform.DetachChildren ();