質問の趣旨
Listの初期化がうまくいきません。
Listを完全に初期化したいです。
発生している問題
リストの中身をforeachでDestroy()したのち、
そのリストを new しているにもかかわらず、リストにmissingの要素が残ってしまいます。
ソース
C#
1public void DeleteRail() 2 { 3 //消去 4 foreach(GameObject g in selectedRail) 5 { 6 Destroy(g); 7 } 8 //消去 9 10 //selected rail格納しなおし 11 selectedRail = new List<GameObject>(); 12 RailUnit ru; 13 int dec = railParent.transform.childCount - 1; 14 int resultIndex = 0; 15 while (true) 16 { 17 ru = railParent.transform.GetChild(dec).GetComponent<RailUnit>(); 18 if(ru.editorChunkStart) 19 { 20 resultIndex = dec; 21 break; 22 } 23 dec--; 24 } 25 for(int i = resultIndex; i < railParent.transform.childCount; i++) 26 { 27 selectedRail.Add(railParent.transform.GetChild(i).gameObject); 28 } 29 //selected rail格納しなおし 30 }
プログラム・変数について
selectedRail は List<GameObject> です。
railParent は 最初のforeachで削除したオブジェクトの親です。
このrailParentには、<railUnit>がアタッチされたオブジェクトがだくさんはいってます。
この配列の長さは実行のたびに毎回違いますが、
例えばrailParent.transform.childCount == 200だとすると、
index値151以上の50個のみが selectedRailに格納されているといった形で、末尾の一部が格納されています。
そのselectedRailに入っている50個を、最初にDestroy()したということです。
そのあと、また残った150要素の末尾のいくつかを配列に格納します。
どこまで格納するかは、
たまに(bool) railUnit.editorChunkStart = trueのものがあり、そのオブジェクトのindexがいくつなのか検索し、
そのindexから先(上)の要素を格納する形です。
ほかに必要な情報がありましたら、返信欄にてお願いいたします。
Unity 2020.3.26f1

回答1件
あなたの回答
tips
プレビュー