2017-10-04 1 views
-3

Ich fühle mich wirklich dumm, aber ich denke, ich bin Snow Blind. Ich kann nicht auf eine Singleton-Klassenmethode zugreifen, wenn ich von einer anderen Klasse anrufe. Ich bekomme die gefürchteteDer Zugriff auf einen Singleton-Returns (NullReferenceException)

(NullReferenceException).

Hier sind meine einfache Singleton und wie ich die Methode nenne.

public class PlayerNodePosition : MonoBehaviour 
{ 

public static PlayerNodePosition instance; 

string code; 

void Awake() 
{ 
    if (instance == null) 
    { 
     Debug.LogWarning("More than one instance of Inventory found!"); 
     return; 
    } 

    instance = this; 
} 

public void AddCode(string _code) 
{ 
    code = _code; 
} 
} 

und hier ist der Aufrufer von einem anderen Skript.

void AddCode() 
{ 

    PlayerNodePosition.instance.AddCode("Added!"); 

} 

ein "Simpel" ist i offensichtlich fehle das Offensichtliche.

+0

Zusätzlich zu den Antworten, können Sie diesen Beitrag finden: http://www.c-sharpcorner.com/UploadFile/8911c4/singleton-design-pattern-in-C-Sharp/nützlich – 4D1C70

Antwort

0

Die Methode Awake sollte statisch sein und die Instanz sollte gesetzt sein. Ich habe keine Möglichkeit zu überprüfen, ob dies ausgeführt wird, da ich kein C# installiert habe, aber die Debug Log-Warnung, die Sie geben, ist logisch falsch. Wenn keine Instanz vorhanden ist, müssen Sie eine Instanz erstellen. Wenn es eine Instanz gibt, geben Sie diese zurück. Dies ist das Singleton-Muster.

public class PlayerNodePosition : MonoBehaviour 
{ 
    public static PlayerNodePosition instance; 

    string code; 

    void static getInstance() 
    { 
     if (instance == null) 
     { 
      instance = new PlayerNodePosition(); 
     } 

     return instance; 
    } 

    public void AddCode(string _code) 
    { 
     code = _code; 
    } 
} 
+0

fabelhaft, und danke für den Beitrag. Ich kann sehen, was ich vermisse. – Wizz69

1

Sie instanziieren instance nirgendwo. Sie würden

private static PlayerNodePosition playerNodePosition; 
public static PlayerNodePosition instance 
{ 
    get 
    { 
     if (playerNodePosition == null) { 
      playerNodePosition = new PlayerNodePosition(); 
     } 
     return playerNodePosition; 
    } 
} 
so etwas wie brauchen
+0

danke Svet, ich sehe den Fehler meiner Wege. – Wizz69

Verwandte Themen