1. 程式人生 > >Unity3d獲取和正確刪除所有子物體

Unity3d獲取和正確刪除所有子物體

參考文章:

核心程式碼:

foreach (Transform childTr in transform) {   Debug.Log("childTr子物體名字:"+childTr.gameObject.name); }

示例:

List lst = new List;
foreach (Transform child in transform)
{
    lst.Add(child); 
    Debug.Log(child.gameObject.name);
}
for(int i = 0;i < lst.Count;i++)
{
    Destroy(lst[i].gameObject);
}
示例中要注意的一點是,遍歷foreach刪除的方法只在執行時Destroy有延遲時有效,最好還是要將它儲存到一個LIST裡面,然後用for迴圈一個個去刪。當然下面這樣也行,每次都獲取一下索引的子物體,刪除即便延遲也沒問題。
for (int i = tr.childCount - 1; i >= 0; i--) {
    Destroy(tr.GetChild(i).gameObject);
}

Destroy操作是延遲的,物件會活到幀的結尾,然後必定銷燬。object destruction 是在所有的 update 執行之後的,所以在update之後才算真正銷燬,update結束前還可以繼續呼叫和響應委託等。如果
自己刪除子物體之後,再新建子物體,發現原來的子物體的函式依舊被呼叫了,就是這個問題,可以利用yield return new WaitForEndOfFrame();等待當前幀結束再做處理。