Jump to content
Unity Insider Forum

NullReferenceException


Aron23

Recommended Posts

Der angegebene Fehler Lautet:
NullReferenceException: Object reference not set to an instance of an object
GlobalStone.Update ()
u

sing System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GlobalStone : MonoBehaviour
{
    public static int StoneCount; //zählt wie viele Steine der Spieler hat
    public GameObject StoneDisplay; //Zeigt die Anzahl an Steinen an
    public int InternalStone; 
    public SteinLager mySteinLager; // Script um die Maximale Anzahl an aufnehmbaren Steinen zu beschränken
    int G;// Größe für eine Anzeige (9/10 Steinen)

    void Update()
    {
        G =5 * mySteinLager.LagerSGo;
        InternalStone = StoneCount;
        StoneDisplay.GetComponent<Text>().text = "Stein: " + InternalStone;
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SteinLager : MonoBehaviour
{
    public int LagerSGo = 1;//Anzahl an gekauften Lagererweiterungen
    public int LagerSLeer;//Um den zustand des Lagers zu kontrolieren
    public int LagerS;//Um die maximale Lagerkapazietät zu bestimmen


    void Update()
    {
        LagerS = 5 * 1 * LagerSGo;
        if (LagerS > GlobalStone.StoneCount)
        {
            LagerSLeer = 1;
        }
        else
        {
            LagerSLeer = 2;
        }
    }
}

 

b.PNG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hey ho,

ich versuch dir mal bei deinem Problem zu helfen und dir auch gleich Tipps zu geben, wie du dir am besten selber helfen kannst :).

1. Die Console enthält meistens die benötigten Informationen wenn etwas in Unity nicht funktioniert. Sie sagt dir meisten genau wo (Zeilennummer) und was fehlschlägt (
NullReferenceException). Für uns wäre es wichtig, dass du die genaue Fehlermessage aus der Console in den Thread kopierst, so können wir dir schneller helfen.

2. Die Fehlermessage

NullReferenceException: Object reference not set to an instance of an object

ist eine sogenannte Laufzeitexception. Der Exceptiontyp (NullReferenceException) sagt dir auch meistens genau welche Art von Exception auftritt. In deinem Fall handelt es sich um eine NullReferenceException. Das bedeutet, dass ein Objekt zur Laufzeit nicht gefunden wurde. Das kann darauf schließen, dass ...
- ... ein Objekt wurde nicht Initalisiert wurde
- ... es zur Laufzeit auf null gesetzt wurde
- ... es gelöscht wurde

- ... es nicht gefunden werden konnte.

Wenn man sich deine Bilder anschaut "können" 3 Objekte null sein:

public GameObject StoneDisplay; //Zeigt die Anzahl an Steinen an
public SteinLager mySteinLager;
StoneDisplay.GetComponent<Text>().text


Prüfe am besten ob die "public Variablen" auch zur Laufzeit im Inspector zugewiesen sind. Ich vermute aber das er im StoneDisplay keinen Text Element findet. Um das zu überprüfen könntest du ein try/catch Block verwenden oder ein if statement.

if(StoneDisplay.GetComponent<Text>() != null){
  StoneDisplay.GetComponent<Text>().text = "test";
} else {
	Debug.log("Error: StoneDisplay.GetComponent<Text>() is not existing");
}


Gruß SimpleScript

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 55 Minuten schrieb Aron23:

G =5 * mySteinLager.LagerSGo;

ok an dieser Zeile liegt es aber ich hab die Variable doch auf 1 gesetzt oder nicht wie kann die da Null sein?

 

vor 56 Minuten schrieb Aron23:

public int LagerSGo = 1;//Anzahl an gekauften Lagererweiterungen

?

Link zu diesem Kommentar
Auf anderen Seiten teilen

NullReferenceExceptions treten nur dann auf, wenn vor einem Punkt oder einer eckigen öffnenden Klammer etwas steht, das als Wert null hat oder ergibt.

ichBinNull.zeug
ichBinNull[3]
IchGebeNullZurueck().zeug

Wenn in der Zeile also eine NullReferenceException fliegt, dann kann das nur an mySteinLager liegen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Keine Ahnung, musst du halt rausfinden :)

Typischer Fehler ist, dass du das Script nochmal irgendwo in der Szene hast und das Ding da nicht zugewiesen ist. Alternativ setzt irgendein Stück Code den Wert auf null. Das würdest du dann ja aber im Inspektor sehen. Eine wieder andere Möglichkeit wäre, dass du dich irgendwie in der Zeile verguckt hast. Letzte Idee: Die Fehlermeldung ist veraltet und lungert halt noch so in der Konsole rum. Hast du "Clear on Play" an?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich sehe gerade: Code-Tags gibt's übrigens mit dem <>-Knopf, das Anführungszeichen ist für Zitate :)

Du kannst, wenn du dich mit dem Debugger deiner IDE nicht auskennst, einfach mal ein Debug.Log in die Zeile davor setzen:

Debug.Log(mySteinLager);
G =5 * mySteinLager.LagerSGo; 

...und dann schauen, ob du "null" in der Konsole kriegst. Wenn nicht, dann suchen wir gerade an der falschen Stelle.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...