IndexOutOfRangeException в C# - Почему длина массива стала 0?

У меня есть кусок кода в C#, который заполняет массив значениями. в Awake Метод, который я установил длину values массив, но когда я пытаюсь получить к нему доступ в setSample метод возвращает IndexOutOfRangeException.

public int gridSize = 32;
public int width;
public int height;
public int featureSize = 32;
public float[] values;

public void Awake () {

    width = gridSize;
    height = gridSize;
    float[] values = new float[6 * width * height];
    Debug.Log("Array length: " + values.Length);

    for (int y = 0; y < height; y += featureSize) {
        for (int x = 0; x < width; x += featureSize) {
            setSample(x, y, Random.value);
        }
    }
}

public void setSample (int x, int y, float value) {
    Debug.Log("Array length: " + values.Length);
    values[((x & (width - 1)) + (y & (height - 1)) * gridSize)] = value;
}

Я добавил Debug.Log() линии, которые дали мне следующий вывод:

Длина массива: 6144
Длина массива: 0
IndexOutOfRangeException: индекс массива находится вне диапазона.

И методы, и переменные являются общедоступными, поэтому я не понимаю, почему должны быть какие-либо проблемы с доступом. Почему массив меняется после того, как я его объявил? Это потому, что он полон нулевых значений?

1 ответ

Решение

Вместо того, чтобы объявлять снова, вы должны использовать существующие values Внутри бодрствующего метода.

менять

От

 float[] values = new float[6 * width * height];

в

values = new float[6 * width * height];
Другие вопросы по тегам