Что я пытаюсь сделать в этой программе, это создать трехмерный массив 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]);
}
}
Его из-за 'p = 1' в вашем роде. Вы неправильно выполняете процедуру сортировки, почему вы не используете встроенный 'Array.Sort()' вместо того, чтобы пытаться катиться самостоятельно? https://msdn.microsoft.com/en-us/library/6tf1f0bc(v=vs.110).aspx –
Убедитесь, что вы используете тег 'unity3d'. –