1

Ich habe einen Code in C#, der ein Array mit Werten füllt. In der Awake Methode habe ich die Länge der values Array, aber wenn ich versuche, es in der setSample Methode zugreifen, gibt es eine IndexOutOfRangeException zurück. DieIndexOutOfRangeException in C# - Warum ist Array-Länge 0?

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

ich hinzugefügt, um die Debug.Log() Linien, die gab mir die folgende Ausgabe:

Array Länge: 6144
Array Länge: 0
IndexOutOfRangeException: Array-Index außerhalb des zulässigen Bereichs .

Sowohl die Methoden als auch die Variablen sind öffentlich, daher sehe ich nicht, warum es Zugriffsprobleme geben sollte. Warum ändert sich das Array, nachdem ich es deklariert habe? Liegt es daran, dass es voller Nullwerte ist?

+0

BTW * Ist es, weil es voll von Nullwerten ist * nicht der Fall ist -, wenn Sie das Array initialisieren Es wird mit dem Standardwert des Typs gefüllt - der für "float" ist 0 und nicht null –

+2

Sie haben definiert eine lokale Variable namens "values" wie in der Klasse. So erhalten Sie 'null Objektreferenzfehler' in' setSample() 'nicht' index out of range exception. Mit welchen Werten von 'x' und' y' in 'setSample()' erhalten Sie 'index out of range error'? –

Antwort

2

Anstatt erneut zu deklarieren, sollten Sie die values interne Methode in der Methode wake verwenden.

Änderung

Von

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

zu

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

Die Verwendung vorhandener 'values' entfernt' null Objektreferenzfehler', aber der ursprüngliche Fehler ist 'index out of range' –