Edited at

UnityのDestroyは即時反映されないので、DestroyImmediateを使う

More than 3 years have passed since last update.

GameObject を Destroy() して、ヒエラルキー上からは消えても、実はしっかり存在している。

GetComponents で要素検索するとふつうにカウントされて返ってくるので、知らないとはまる(はまった)。

ちなみに、対象に null を入れても、GetComponents で取得できてしまう。

Debug.Log (GetComponents<Transform>().Length); // 1

Destroy (targetObject);
targetObject = null;
Debug.Log (GetComponents<Transform>().Length); // 1

(GCに時間かかってる・・?)

で、そういうときは、 DestroyImmediate を使うと即時破棄される。

めでたしめでたしかと思ったが、DestroyImmediate は推奨されてないっぽい。

http://docs.unity3d.com/ja/current/ScriptReference/Object.DestroyImmediate.html


直ちにオブジェクトを破壊する。ですが、Destroy 関数の方を使うことを推奨します


うーん、 コルーチンで非同期処理にすればよい・・のか?

子要素の全削除なら、Detach してやるって方法もある。

foreach (Transform n in transform)

{
Destroy(n.gameObject);
}
transform.DetachChildren ();