Unity で子オブジェクトをすべて削除したい

Unity でゲームを作成している場合、あるオブジェクトの子オブジェクトをすべて削除したいということはよくあると思います。備忘録として、Blogに残しておこうと思います。

下記のソースの場合、 parentObj が親オブジェクトで、その子オブジェクトをすべて削除します。

        // オブジェクト parentObj の子オブジェクトをすべて削除する
        foreach(Transform childObj in parentObj.transform)
        {
            Destroy(childObj.gameObject);
        }

ひとつ、気をつけないといけないのは、Destroy を実行しても、実際のオブジェクトの削除は、現在のUpdateループの最後まで延期され、つぎのフレームの描画前であることです。

Unity の Destroyのリファレンスをみると、

Actual object destruction is always delayed until after the current Update loop, but is always done before rendering.

(Google 翻訳:実際のオブジェクトの破棄は常に現在の Update ループの後まで延期されますが、常にレンダリング前に実行されます。)

となっています。ですので、Destroyを使うときは、削除対象オブジェクトにアクセスがない状態で行う様にしなければなりません。

タイトルとURLをコピーしました