2016-06-30 3 views
1

これは奇妙なことですが、DestroyImmediate機能を持つ子オブジェクトを破壊しようとすると、予期せぬ結果になります。編集モード(Unity3d)で子オブジェクトを破壊するにはどうしたらいいですか?

私のケースでは、Unityはすべての子を破壊しませんでしたが、それらの半分だけでした。

 foreach(var child in parent) 
     { 
      DestroyImmediate(child); 
     } 
+0

DestroyImmediate' 'にユニティのドキュメントから:_Also配列を反復処理したり、反復処理している要素を破棄したりしないでください。これは深刻な問題を引き起こします(Unityだけでなく一般的なプログラミングの練習として)。_ https://docs.unity3d.com/ScriptReference/Object.DestroyImmediate.html –

答えて

2

一時的な配列/リストを作成することで、1人の人がリンクで検討することができます。例えば

:私を助け

 var tempArray = new GameObject[parent.transform.childCount]; 

     for(int i = 0; i < tempArray.Length; i++) 
     { 
      tempArray[i] = parent.transform.GetChild(i).gameObject; 
     } 

     foreach(var child in tempArray) 
     { 
      DestroyImmediate(child); 
     } 

がリンク: http://answers.unity3d.com/answers/678073/view.html

0

これは私が編集モードで子どもたちを破壊する方法です:

for (int i = this.transform.childCount; i > 0; --i) 
    DestroyImmediate(this.transform.GetChild(0).gameObject);