2016-03-19 20 views
-1

Ich versuche, ein Spiel mit der Einheit 5 zu machen, aber ich vor einem Problem in dieser Ebene ist hier mein GameController.cs:Nullreferenceexception Fehler in der Einheit mit C#

public class GameController : MonoBehaviour 
{ 

    private int score; 

    void Start() 
    { 
     score = 0; 
     UpdateScore(); 
    } 

    public void AddScore(int newScore) 
    { 
     score += newScore; 
     UpdateScore(); 
    } 

    void UpdateScore() 
    { 
     scoreText.text = "Score : " + score.ToString(); 
    } 

Dies ist nicht der vollständige Code, dies ist die einzige relevante Teil des Codes, und diese DestroyByContact.cs:

public class DestroyByContact : MonoBehaviour 
{ 
    private GameController gameController; 

    public int scoreValue; 


    void Start() 
    { 
     GameObject gameControllerObject = GameObject.FindGameObjectWithTag("GameController"); 
     if (gameController != null) 
     { 
      gameController = gameControllerObject.GetComponent<GameController>(); 
     } 
     if (gameController == null) 
     { 
      Debug.Log("Cannot find 'GameController' script!"); 
     } 
    } 

    void OnTriggerEnter(Collider other) 
    { 
     Debug.Log(scoreValue);  
     gameController.AddScore(scoreValue); # This is line 38 
     Destroy(other.gameObject); 
     Destroy(this.gameObject); 
    } 
} 

und die vollen Fehler ich aus Unity Konsole erhalten:

NullReferenceException: Object reference not set to an instance of an object 
DestroyByContact.OnTriggerEnter (UnityEngine.Collider other) (at Assets/Assets/Scripts/DestroyByContact.cs:38) 

I assgin alle Referenzen in Einheit korrekt, Score bleiben bei 0 und Objekt wird nicht zerstören jedoch vor dem Hinzufügen dieser würde sie destory, Kann bitte helfen, diesen Fehler zu korrigieren?

Doppelte Hinweis

ich die akzeptierte Antwort auf master duplicate question lesen, aber es ist ein sehr allgemein ein (Es listet alle Arten von diesem Fehler und was los ist, um sie zu machen, aber ich wirklich nicht wissen, welche diesen Fehler machen Ich), und nur weil ich alle verwandten Code hinzufügen Ich denke, es ist ein sehr häufiger Fehler und andere zukünftige Benutzer mit Nutzen aus dieser Antwort, vielleicht mit der Frage erneut öffnen, wird mir jemand helfen, den Fehler zu korrigieren.

+0

Es Sie in der Ausnahme eine Zeilennummer gab. In welcher Zeile referenziert der Code? Kannst du einen Unterbrechungspunkt darauf legen und sehen, welcher Teil dieser Linie 'null' ist, der nicht sein sollte? –

+0

@GrantWinney, Es sagt 'GameController' ist null, aber warum? – Arman

+0

Nicht sicher. Vielleicht konnte 'GameObject.FindGameObjectWithTag()' den "GameController" -Tag nicht finden und gab 'null' zurück? Siehst du die 'Debug.Log' Nachricht irgendwo geschrieben? –

Antwort

3

In Ihrem aktuellen Code, die Zeile:

gameController = gameControllerObject.GetComponent<GameController>(); 

nie ausführen, da Sie überprüft werden, ob Gamecontroller, bevor es tatsächlich die Zuordnung nicht null ist.

Ich denke, dein Fehler ist in der ersten wenn (gameController! = Null). Sie sollten überprüfen, ob gameControllerObject nicht statt null, etwa so:

GameObject gameControllerObject = GameObject.FindGameObjectWithTag("GameController"); 
    if (gameControllerObject != null) //Replace gameController with gameControllerObject 
    { 
     gameController = gameControllerObject.GetComponent<GameController>(); 
    } 
    if (gameController == null) 
    { 
     Debug.Log("Cannot find 'GameController' script!"); 
    } 
Verwandte Themen