2017-10-04 11 views
-3

Je me sens vraiment stupide, mais je pense que je suis aveugle de neige. Je ne peux pas accéder à une méthode de classe singleton lorsque j'appelle d'un autre classy. J'obtiens le redoutéAccéder à un Singleton renvoie (NullReferenceException)

(NullReferenceException).

Voici à la fois mon simple singleton et comment j'appelle la méthode.

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; 
} 
} 

et voici l'appelant d'un autre script. Étant un «simple», je suis évidemment manquant de l'évidence.

+0

En plus des réponses, vous pouvez trouver ce post: http://www.c-sharpcorner.com/UploadFile/8911c4/singleton-design-pattern-in-C-Sharp/utile – 4D1C70

Répondre

0

La méthode Awake doit être statique et l'instance doit être définie. Je n'ai aucune chance de vérifier si cela fonctionne car je n'ai pas installé C#, mais l'avertissement du journal de débogage que vous donnez est logiquement faux. S'il n'y a pas d'instance, vous devez en créer une. S'il existe une instance, vous renvoyez celle-ci. C'est le motif singleton.

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

fabuleux, et merci pour le poste. Je peux voir ce qui me manque. – Wizz69

1

Vous n'instancier instance nulle part. Vous auriez besoin de quelque chose comme

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

merci Svet, je vois l'erreur de mes manières. – Wizz69