2017-10-04 31 views
-3

我真的很笨,但我认为我是雪盲。从另一个优雅的调用中,我无法访问单例类方法。我得到了可怕的访问一个单例返回(NullReferenceException)

(NullReferenceException)。

这里是我的简单单身人士,以及我如何调用方法。

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

这里是来自另一个脚本的调用者。

void AddCode() 
{ 

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

} 

是一个“傻瓜”我很明显缺少明显的。

+0

除了答案,你可能会发现这篇文章:http://www.c-sharpcorner.com/UploadFile/8911c4/singleton-design-pattern-in-C-Sharp /有用的 – 4D1C70

回答

0

方法Awake应该是静态的,并且应该设置实例。我没有机会检查这是否运行,因为我没有安装C#,但是您提供的调试日志警告在逻辑上是错误的。如果没有实例,则需要创建一个实例。如果有实例,则返回该实例。这是单身模式。

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

神话般的,谢谢你的职位。我可以看到我缺少的东西。 – Wizz69

1

你不要实例instance任何地方。你需要类似

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

谢谢你Svet,我看到了我的方式的错误。 – Wizz69

相关问题