Singular Geschrieben 4. Oktober 2020 Melden Share Geschrieben 4. Oktober 2020 Hallo zusammen, dieses Mal eine relativ simple Sache, die mir aber gerade Kopfzerbrechen verursacht auf deren Lösung ich gerade einfach nicht komme. Ich möchte, dass zum Beginn meines Spiels nach einer zufälligen Zeit der erste Gegner auftaucht. Diese Zeit steht in einem ein Dimensionalen Array. Allerdings kann ich schon die erste Zahl des Arrays nicht füllen. Entweder bin ich gerade zu Müde oder ich habe etwas grundlegendes nicht verstanden: [...] private int i; private int[] rnd; private bool end; void Awake() { rnd[i] = Random.Range(2, 5); //für diese Zeile kommt bereits der Fehler i++; rnd[i] = Random.Range(5, 10); i++; rnd[i] = Random.Range(10, 18); i++; rnd[i] = Random.Range(18, 24); i++; rnd[i] = Random.Range(24, 30); i++; rnd[i] = Random.Range(30, 38); } void Start() { gameManager = GetComponent<GameManager>(); i = 0; } [...] Ich bekomme die Fehlermeldung "NullReferenceException: Object reference not set to an instance of an object" Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 5. Oktober 2020 Melden Share Geschrieben 5. Oktober 2020 Wenn du eine Zahlenvariable hast, dann weist du ihr mit = einen Wert zu. Das gleiche gilt bei Objektvariablen: var auto = new Auto(); Wenn du das nie tust und so eine Objektvariable keinen Wert kriegt, dann steht da "null" drin, also "nichts". Und mit "nichts" kann man nicht arbeiten: auto.Brumm(); // NullReferenceException, wenn "auto" nie eine Referenz zugewiesen bekommen hat Arrays sind auch Objekte. Du musst daher erst ein Array erstellen, damit du dieses auch befüllen kannst. Die Variable selbst ist kein Array. rnd = new int[6]; Wie du siehst, muss man beim Erstellen direkt angeben, wie viele Elemente im Array Platz haben sollen. Wenn du das nicht willst, kannst du stattdessen eine Liste nehmen, die können dynamisch wachsen. List<int> randomNumbers = new List<int>(); randomNumbers.Add(Random.Range(2, 5)); randomNumbers.Add(Random.Range(5, 10)); // ... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Singular Geschrieben 5. Oktober 2020 Autor Melden Share Geschrieben 5. Oktober 2020 Ahhhhhhles klar. Ich bin davon ausgegangen dass ein Array, wo nicht vorgegeben ist wie lang er ist auch wachsen kann. Wenn ich den Array zwischendrin wieder "null" setze und dann wieder neu befüllen, kann er dann wachsen bzw. Schrumpfen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 5. Oktober 2020 Melden Share Geschrieben 5. Oktober 2020 Arrays können ihre Größe niemals verändern. Aber das, was du beschreibst, ist ja, ein ganz neues Array zu erstellen. Das kann dann in der Tat eine andere Größe haben. Das Gesamtkonzept ist damit exakt das einer ArrayList. Das ist einfach ein Objekt, das intern ein Array hat und wenn das zu klein wird, macht es ein neues, größeres und kopiert die Elemente aus dem alten rüber. List<T> ist eine ArrayList. Da brauchste also nicht das Rad neu zu erfinden Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Singular Geschrieben 5. Oktober 2020 Autor Melden Share Geschrieben 5. Oktober 2020 Okay. Was ist denn die bessere Lösung. Ich denke mal für mein Beispiel oben ist ein Array besser. Wann macht es dann mehr Sinn eine Liste zu nehmen? Wenn ich beispielsweise schaue welche Objekte in der nähe meines Objektes sind (OverlappedSphere) speichere ich das auch in einem Array. Macht dann dort eine Liste mehr Sinn? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 5. Oktober 2020 Melden Share Geschrieben 5. Oktober 2020 vor 37 Minuten schrieb Singular: Wann macht es dann mehr Sinn eine Liste zu nehmen? Wenn du über die Laufzeit hinweg immer wieder Elemente hinzufügst und/oder rausnimmst. vor 38 Minuten schrieb Singular: Wenn ich beispielsweise schaue welche Objekte in der nähe meines Objektes sind (OverlappedSphere) speichere ich das auch in einem Array. Jetzt kommen wir in etwas... interessante Gebiete der Spieleprogrammierung. Da will man evtl. ein bisschen an Performance denken. Da die Erklärung vermutlich ein bisschen länger wäre, gibt's die nur auf Anfrage, aber du willst bei den Physics-Metheden ggf. immer die "NonAlloc"-Version benutzen. Da baust du dann ein großes Array wo hin und benutzt das immer wieder. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Singular Geschrieben 21. Oktober 2020 Autor Melden Share Geschrieben 21. Oktober 2020 Ich sehe gerade ich habe mich noch gar nicht bedankt. Du hast Direkt zwei meiner Probleme gelöst.^^ Ich liebe Listen Vielen Dank! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 22. Oktober 2020 Melden Share Geschrieben 22. Oktober 2020 Gerne doch Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.