C#中二维数组的问题

时间:2018-06-05 16:05:13

标签: c# arrays unity3d multidimensional-array

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public static class noise 
{
    public static float[,] GenerateNoiseMap(int mapWidth, int mapHeight, float scale)
    {
        float[,] noiseMap = new float[mapWidth, mapHeight];

        if (scale <= 0)
        {
            scale = 0.0001f;
        }
        for(int y = 0; y<mapHeight; y++)
        {
            for (int x = 0; y < mapWidth; x++)
            {
                float sampleX = x/(mapWidth * scale);
                float sampleY = y/(mapHeight * scale);

                float perlinValue = Mathf.PerlinNoise(sampleX, sampleY);

                noiseMap[x, y] = perlinValue;
                Debug.Log(noiseMap.GetLength(0));
                Debug.Log(noiseMap.GetLength(1));
            }
        }
        return noiseMap;
    }
}

以上是给我错误的代码:

  

IndexOutOfRangeException:数组索引超出范围。

     

noise.GenerateNoiseMap(Int32 mapWidth,Int32 mapHeight,Single scale)(at

     

资产/脚本/ MapGeneration / noise.cs:24)

我并不完全熟悉数组如何在C#中工作(或根本不熟悉),但我的老师说,产生IndexOutOfRange错误的数组最常见的问题是我从1开始而不是索引0。我试图解决这个问题,但这似乎不是这段代码中的问题。

我正在尝试为自定义游戏生成Perlin噪声贴图。

错误是什么?

提前致谢。

1 个答案:

答案 0 :(得分:9)

你的问题在这里:

for (int x = 0; y < mapWidth; x++)

它应该是:

for (int x = 0; x < mapWidth; x++)