我有一段 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
索引超出范围异常:数组索引超出范围。
方法和变量都是公共的,所以我不明白为什么会出现任何访问问题。为什么数组在我声明后会发生变化?是因为它充满了空值吗?
与其再次声明,不如在 awake 方法中使用现有的 values
。
改变
从
float[] values = new float[6 * width * height];
自
values = new float[6 * width * height];