Jump to content
Unity Insider Forum
Sign in to follow this  
Aron23

NullReferenceException

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

Share this post


Link to post
Share on other sites

Danke für jede Hilfe sollten noch fragen oder andere Scrips benötigt werden stelle ich diese gerne zur Verfügung .

Bin recht neu und finde den Fehler Leider 😅.

 

Share this post


Link to post
Share on other sites

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

  • Like 1

Share this post


Link to post
Share on other sites
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

?

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

Clear on Play ist an und in meinen 3 MechanicsObjects sind die Scrips alle dort wo sie hin sollen wo anders benutze ich es nicht

 

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...