2016-06-21 9 views
0

In Unity, ich habe einige einfachen Code, das funktioniert:Unity Toggle wirft Nullreferenceexception: Objektverweis nicht auf eine Instanz eines Objekts festgelegt

using UnityEngine; 
using UnityEngine.UI; 
using System.Collections; 

public class Test : MonoBehaviour { 

    public Toggle GridToggle; 

    // Use this for initialization 
    void Start() { 
     GridToggle.isOn = true; 
     print (GridToggle.isOn); 
    } 

} 

Wie gesagt, das ist nur gut funktioniert, Protokollierung ‚true‘ zu die Konsole. Allerdings habe ich eine zweite Charge von Code hier, die fast genau die gleiche ist, aber aus irgendeinem bizarren Grund scheint es nicht zu funktionieren:

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

public class GridManager : MonoBehaviour { 

    public Sprite[] gridColors = new Sprite[0]; 
    public int defaultSprite = 0; 

    public Toggle GridToggle; 

    public SpriteRenderer spriteRenderer; 

    // Use this for initialization 
    void Start() { 

     //Same exact thing! 
     GridToggle.isOn = true; 
     print (GridToggle.isOn); 
     //Same exact thing! 

     spriteRenderer = GetComponent<SpriteRenderer>(); 
     spriteRenderer.sprite = gridColors [defaultSprite]; 
    } 

    void Update() { 
     spriteRenderer = GetComponent<SpriteRenderer>(); 
     spriteRenderer.enabled = true; 
    } 
} 

Was das bedeutet ist seltsam: Es protokolliert ‚true‘ auf die Konsole, aber zur gleichen Zeit, in der Zeile, die GridToggle.isOn = true; sagt, es wirft: NullReferenceException: Objektverweis nicht auf eine Instanz eines Objekts festgelegt. Ich möchte, dass der zweite Code funktioniert, aber ich kann nicht herausfinden, was ich falsch mache und wie es sich vom ersten Bit unterscheidet.

+0

Dies ist eine doppelte Frage, @Systemagical hat es richtig beantwortet. – matiaslauriti

+1

Mögliches Duplikat von [Unity3D: NullReferenceException: Objektreferenz wurde nicht auf eine Objektinstanz festgelegt] (http://stackoverflow.com/questions/17588799/unity3d-nullreferenceexception-object-reference-not-set-to-an-instance -of-a-o) – matiaslauriti

+0

Kommt die Protokollierung nicht nach der Zeile, in der die Ausnahme ausgelöst wird? Wie protokolliert es "wahr" und wirft die Ausnahme auf die vorherige Zeile? – cjmarsh

Antwort

0

Das erste von Ihnen angegebene Beispiel löst die gleiche NullReferenceException aus, als ich es getestet habe. Es klingt, als ob Sie ein Toggle durch die GUI an die Instanz von Test angehängt haben, aber nicht an die Instanz von GridManager.

Überprüfen Sie in der Szenen-GUI, wo GridManager an ein GameObject angehängt ist, und vergewissern Sie sich, dass in den Skriptdetails nicht Grid Toggle: None (Toggle) steht. Wenn ja, ist das genau dein Problem. Machen Sie alles, was Sie getan haben, um das Toggle-Objekt dem Test-Code zuzuordnen, um es dem GridManager-Code zuzuordnen.

+0

Ah schießen, mein schlechtes dann. :(Viel Glück! Ich poste, wenn ich etwas anderes finde, bevor jemand anderes es tut. – Systemagical

+0

Ok, ich habe das Problem herausgefunden. Im zweiten Code dachte ich, dass es ein GameObject in der Hierarchie referenziert, aber stattdessen verweist es auf ein Prefab, was, wie du sagtest, hatte nicht den Schalter im Inspektor ausgewählt. Da es ein Prefab war, musste ich GetComponenet verwenden, um auf den Toggle zugreifen. Es dauerte eine Weile, aber ich erkannte, dass Ihre Antwort richtig war! Entschuldigung! – Demandooda

+0

Ich glaube dass die merkwürdigen Phänomene der Protokollierung wahr waren, bevor der Fehler geworfen wurde, dass das GameObject, das auf das Skript referenzierte, es druckte, bevor das Prefab, das das war, von dem ich nicht dachte, dass es den Fehler verursacht hatte. – Demandooda

Verwandte Themen