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];