c# 为什么在使用单例方法时,它会抛出 NullReferenceException?



我需要在游戏中使用一个singleton来存储游戏统计数据,但它并没有按预期工作。

这里有一个例子:

public class Stat_player{
public static Stat_player instance;

/*Unity method*/
public void Awake(){
if(instance != null){
Debug.logError("more than one instance is in use!");
return;
}
else{ 
instance = this;
}
}
private int hp = default;
private int gold = default;
private string name = default;
public void Set_name(string nameP){
name = nameP;
}
}
public class Character{
public string name = "Mark";
public void Build_character(){
Stat_player.instance.Set_name(name);
}
}

所以基本上,在Stat_player.instance.Set_name(name);行,控制台向我抛出一个NullReferenceException,我找不到发生这种情况的原因。

感谢您的关注!

编辑:谢谢你们,在有人真正回答之前,我不知道是谁结束了我的问题,没关系。。。

所以我找到了";NullReferenceException";,需要的是一个附加脚本的gameObject,一旦完成,就会调用方法Awake()(因为它从未被调用过(,并启动Stat_player的实例。

在您的类中,您永远不会创建该类的实例。对于singleton模式,您应该在声明静态对象时执行此操作:

public static Stat_player instance = new Stat_player();

最新更新