运行时无限循环错误

时间:2015-05-17 01:35:18

标签: c# arrays unity3d infinite-loop

我在这个程序中尝试做的是使用标签“Cube”创建一个GameObjects的三维数组。

当我创建数组cb时,多维数据集的名称不按顺序排列(每个名称对应于它在复合统一3d立方体中的位置,例如:Cube000,Cube102)。因此,我不得不对它进行排序。

我试图制作一种排序方法(我知道效率不高),每次运行它时,我都会得到无限循环,Unity会停止响应。

代码的第二部分用于使用数组cb的有序元素填充3d数组。我怀疑这是问题但随便检查。

另外作为旁注,主立方体是空心的,因此只有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 个答案:

答案 0 :(得分: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());