C# 二维区域中的未知字符

C# 二维区域中的未知字符,c#,unity3d,C#,Unity3d,我目前正试图在C#中编写一个关于Unity的战术RPG,为此,我需要使用寻路、Dijkstra、节点边缘等。 我正在尝试将表示我的地图的2D字符区域转换为带有边的2D节点区域,这里是地图: #用于标记地图的边界,并避免索引超出范围错误 以下是项目代码: public Nodes[,] GenerateNodes(TextAsset lvl) { Nodes[,] nodeArray; char[,] matrix = GenerateArray(lvl); nodeA

我目前正试图在C#中编写一个关于Unity的战术RPG,为此,我需要使用寻路、Dijkstra、节点边缘等。 我正在尝试将表示我的地图的2D字符区域转换为带有边的2D节点区域,这里是地图:

#
用于标记地图的边界,并避免索引超出范围错误

以下是项目代码:

public Nodes[,] GenerateNodes(TextAsset lvl)
{
    Nodes[,] nodeArray;
    char[,] matrix = GenerateArray(lvl);

    nodeArray = new Nodes[matrix.GetLength(0), matrix.GetLength(1)];

    for (int row = 0; row < matrix.GetLength(0); row++)
    {
        for (int col = 0; col < matrix.GetLength(1); col++)
        {
            char type = matrix[row, col];
            if (type != '#' && type != '\n')
            {
                Debug.LogError(type);
                Nodes n = new Nodes(row, col, type);
                nodeArray[row, col] = n;
                findNeighbors(row, col, matrix, nodeArray); //assuming nodes and matrix variables are instance variables
            }
            else
                nodeArray[row, col] = null;
        }
    }
    return nodeArray;
}
public void findNeighbors(int row, int col, char[,] matrix, Nodes[,] nodeArray)
{
    for (int r = -1; r <= 1; r++)
    {
        for (int c = -1; c <= 1; c++)
        {
            Debug.LogError(row);
            Debug.LogError(col);
            if (matrix[row + r, col + c] != '#')
            {
                nodeArray[row, col].addEdges(nodeArray[row + r, col + c]);
            }
        }
    }
}
公共节点[,]生成节点(TextAsset lvl)
{
节点[,]节点阵列;
字符[,]矩阵=GeneratorRay(lvl);
nodeArray=新节点[matrix.GetLength(0),matrix.GetLength(1)];
for(int row=0;row对于(int r=-1;r,据我统计,共有18列,您试图访问第19列,当然它会抛出此异常

您应该在第二个FindNeighbor上输入这样的if:

if(row == 0 && r == -1)
  continue;
if(col == matrix.GetLength(1) && c == 1)
  continue;
也许你可以找到一个更好的方法来做我告诉你的事情,但是请记住,如果你不避免访问一个不存在的数组索引,你将不断地得到这个错误

编辑。
根据我们的同事@yes的说法,有19列,而不是我错误计算的18列。我提供的解决方案仍然有效,尽管:D

示例文件的行尾只是“\n”?还是“\r\n”?我在windows上,很好的猜测,就是那个该死的,谢谢!不,它是19列,这没关系,但由于数组是零索引的,19 ofc的索引超出范围。问题恰恰出现在您声明的位置。它是边上的邻居。最左边的列没有col+1。