2015-05-17 2 views
1

Что я пытаюсь сделать в этой программе, это создать трехмерный массив GameObjects с тегом «Cube».Ошибка Endless Loop в Runtime

Когда я создал массив cb, кубы были не в порядке по имени (каждый из них назван соответствующим его местоположению в составном 3d-кубе, например: Cube000, Cube102). Поэтому мне пришлось его сортировать.

Я попытался сделать метод сортировки (он неэффективен, я знаю), и каждый раз, когда я его запускаю, я получаю бесконечный цикл, и Unity перестает отвечать.

Вторая часть кода предназначена для заполнения 3d-массива упорядоченными элементами массива cb. Я сомневаюсь, что это проблема, но не стесняйтесь проверить.

Также в качестве примечания, основной куб является полым и, следовательно, имеет только 26 маленьких кубиков, а не 27. В любом случае, почему я получаю бесконечный цикл?

using UnityEngine; 
    using System.Collections; 

    public class CubeArrayLoop : MonoBehaviour { 

    public GameObject[,,] cubes = new GameObject[3, 3, 3]; 


    public void Start(){ 
     //initialize array of Cube GameObjects 
     GameObject[] cb = new GameObject[26]; 
     cb = GameObject.FindGameObjectsWithTag("Cube"); 
     //sort array of Cube GameObjects 
     for (int p = 1; p < cb.Length; p++) { 
      GameObject first = cb [0]; 
      GameObject current = cb [p]; 
      GameObject replacer; 
      if (current.name.CompareTo (first.name) < 0) { 
       replacer = first; 
       first = current; 
       current = replacer; 
       p = 1; 
      } 
     } 

     //Debug.Log (cb); 

     //fill class variable cubes with cb objects in depth, row, col order 
     int count = 0; 
     for (int d =0; d < 3; d++) { 
      for (int r = 0; r < 3; r++) { 
       for (int c =0; c < 3; c++) { 
        if (!(d == 1 && r == 1 && c == 1)) { 
         cubes[d, r, c] = cb[count]; 
         count += 1; 
        } 
        else{ 
          cubes[d, r, c] = null; 
         } 

       } 
      } 
     } 

     //Debug.Log(cubes[1,2,1]); 

    } 

} 
+1

Его из-за 'p = 1' в вашем роде. Вы неправильно выполняете процедуру сортировки, почему вы не используете встроенный 'Array.Sort()' вместо того, чтобы пытаться катиться самостоятельно? https://msdn.microsoft.com/en-us/library/6tf1f0bc(v=vs.110).aspx –

+0

Убедитесь, что вы используете тег 'unity3d'. –

ответ

3

Это не очень хорошая идея, чтобы написать собственную процедуру сортировки для такого рода работы, особенно если вы не знаете, как эффективно это сделать. .NET предоставляет множество хороших способов сортировки. Я рекомендую вам узнать, как выполнять процедуры сортировки, но делайте это как сам проект.

using System.Collections.Generic; 

    class GameObjectComparer : IComparer<GameObject> 
    { 
     public int Compare(GameObject left, GameObject right) 
     { 
      return left.Name.CompareTo(right.Name); 
     } 
    } 

    //sort array of Cube GameObjects 
    Array.Sort(cb, new GameObjectComparer()); 
+0

Я научусь внедрять, спасибо! –