从2D网格中的值获取索引

时间:2018-06-16 10:29:24

标签: c# unity3d

我有一个类型Cell的2D数组,它在Unity中创建了一个单元格网格。

private Cell[,] cells;

private void Start()
{
    cells = new Cell[mapSize.x, mapSize.y];
}

目前,我可以通过传入匹配的x和y值来访问Map中的所有单元格。例如:

private Cell GetCell(int x, int y)
{
    return cells[x, y];
}

现在我希望通过传入一个单元格对象来获得匹配的x和y值。

我的解决方案是创建像这样的Cell组件

public class Cell : MonoBehaviour
{
    private int x;
    private int y;

    public void InitCell(int indexX, int indexY) // This gets called when intantiating the Cell
    {
        x = indexX;
        y = indexY;
    }
}

但我是否真的必须将这些信息存储在单元组件中?

2 个答案:

答案 0 :(得分:2)

<。 你也可以做一些像

这样的事情
foreach(var cell in cells)
{
     if(cell == cellToFind)
     {
          //Gotcha
     }
}

但是将x,y存储在你的单元格中会更快

答案 1 :(得分:2)

你可以使用这样一个简单的函数:

public static Tuple<int, int> CoordinatesOf(Cell[,] cells, Cell value)
{
    int w = cells.GetLength(0); // width
    int h = cells.GetLength(1); // height

    for (int i = 0; i < w; ++i)
    {
        for (int j = 0;j < h; ++j)
        {
            if (cells[i, j] == value)
                 return Tuple.Create(i, j);
        }
    }

     return Tuple.Create(-1, -1);
}