获取游戏对象在阵列中的位置

时间:2017-07-25 16:48:43

标签: c# arrays unity3d

我正在使用此脚本对数组进行排序:

public class AlphanumComparatorFast : IComparer<string>
{
    public int Compare(string x, string y)
    {
        string s1 = x as string;
        if (s1 == null)
        {
            return 0;
        }
        string s2 = y as string;
        if (s2 == null)
        {
            return 0;
        }

        int len1 = s1.Length;
        int len2 = s2.Length;
        int marker1 = 0;
        int marker2 = 0;

        // Walk through two the strings with two markers.
        while (marker1 < len1 && marker2 < len2)
        {
            char ch1 = s1[marker1];
            char ch2 = s2[marker2];

            // Some buffers we can build up characters in for each chunk.
            char[] space1 = new char[len1];
            int loc1 = 0;
            char[] space2 = new char[len2];
            int loc2 = 0;

            // Walk through all following characters that are digits or
            // characters in BOTH strings starting at the appropriate marker.
            // Collect char arrays.
            do
            {
                space1[loc1++] = ch1;
                marker1++;

                if (marker1 < len1)
                {
                    ch1 = s1[marker1];
                }
                else
                {
                    break;
                }
            } while (char.IsDigit(ch1) == char.IsDigit(space1[0]));

            do
            {
                space2[loc2++] = ch2;
                marker2++;

                if (marker2 < len2)
                {
                    ch2 = s2[marker2];
                }
                else
                {
                    break;
                }
            } while (char.IsDigit(ch2) == char.IsDigit(space2[0]));

            // If we have collected numbers, compare them numerically.
            // Otherwise, if we have strings, compare them alphabetically.
            string str1 = new string(space1);
            string str2 = new string(space2);

            int result;

            if (char.IsDigit(space1[0]) && char.IsDigit(space2[0]))
            {
                int thisNumericChunk = int.Parse(str1);
                int thatNumericChunk = int.Parse(str2);
                result = thisNumericChunk.CompareTo(thatNumericChunk);
            }
            else
            {
                result = str1.CompareTo(str2);
            }

            if (result != 0)
            {
                return result;
            }
        }
        return len1 - len2;
    }
}

这是我的脚本,其中包含附加到所有多维数据集的数组:

void Awake()
{
    allCubes = GameObject.FindGameObjectsWithTag("cube");
    allCubes = allCubes.OrderBy(obj => obj.name, new AlphanumComparatorFast()).ToArray();
}

这是检查员的输出:

https://i.gyazo.com/0dd2c9fdf8e07f9f971cd074695fc061.png

我的问题是:有没有办法找出数组中当前对象的数字是多少?我将这个脚本添加到所有的多维数据集中,所以有没有一种方法,如果我在脚本中放入一些代码,它将返回该数组列表中该游戏对象的位置?例如,如果我调试Cube5,它将返回:

  

我在阵列中的位置是4

我的目标是获取每个立方体的下一个立方体的下一个立方体:)。 所以Cube1应该给我Cube3,Cube3应该给我Cube5等。我想我可以使用答案然后做variable + 2。我想要这个,因为每个立方体都必须得到下一个立方体的下一个立方体的一些信息。

1 个答案:

答案 0 :(得分:2)

循环遍历数组并比较GameObject实例。如果匹配,则返回当前循环索引。如果没有匹配,则返回一个负数,因为数组不能有负数。

public GameObject[] allCubes;

int findIndex(GameObject target)
{
    for (int i = 0; i < allCubes.Length; i++)
    {
        //If we find the index return the current index
        if (allCubes[i] == target)
        {
            return i;
        }
    }
    //Nothing found. Return a negative number
    return -1;
}

要在您的脚本中使用,请将gameObject变量传递给它,这将获得此脚本附加到的当前GameObject。

int index = findIndex(gameObject);

修改

我建议你稍微更改一下你当前的设计,然后把这个代码放在你的问题上,放在一个空的GameObject上,这样AlphanumComparatorFast脚本就会被执行一次。然后,您可以从其他scrips访问该数组结果。有关如何执行此操作,请参阅this帖子。我这样说是因为它会加速你的游戏。