Unity 单例返回为空

黄酒小菜 2018-01-04 07:44:22
单例代码如下,在awake里面添加了debug,在创建单例之后显示


运行后报错:错误如下:

debug信息在报错之后,难道是awake在Instance之后执行?

报错位置如下:


没搞懂
...全文
2261 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
黄酒小菜 2018-04-25
  • 打赏
  • 举报
回复
各位大佬,新人想问一下这么结贴啊
风尘Lang 2018-04-12
  • 打赏
  • 举报
回复 1
你的Instance是个static方法,外部调用时如果没有AddComponent的这个脚本的话,是不会走Awake的,所以肯定会报空
小数点666 2018-04-12
  • 打赏
  • 举报
回复
执行顺序不对嘛,你都在awake里 到底哪个先执行了你不知道
Fieldsand 2018-03-18
  • 打赏
  • 举报
回复
你查查 单例一般是怎么写的。 你的第二个脚本的awake方法调用了第一个脚本ResourceMagager的instance方法,此时ResourceManager可能还没有实例化,ResourceMagager的awake方法还没执行。所以返回了空。
幽幽有悠悠呦 2018-03-17
  • 打赏
  • 举报
回复
引用 8 楼 huangfu6long 的回复:
这个是脚本执行顺序问题。 因为你没执行脚本执行顺序。你这个是两个类,例如A和B类。A类是单例模式,,但是A类的Awake还没执行,是你的B类的Awake先执行了。这个时候拿到的必然就是空了。。 解决办法有三种, 第一种:指定脚本的执行顺序,, 第二种:不要在Awake中获取其他类的单例模式,而是延迟到Start之后再来拿。 第三种:Instance是get 属性,有另外一个m_Instance判断是否为空,不是空就返回,否则新建一个对象,给对象加入自身脚本,并赋值给m_Instance,然后返回m_Instance,例如下方代码: public class Test : MonoBehaviour { private static Test m_Instance; public static Test Instance { get { if (m_Instance == null) { m_Instance = new GameObject().AddComponent<Test>(); } return m_Instance; } } } 但是第三个方案有个缺陷。不能监视面板上面赋值,因为是在Instance的get属性中实例化的。序列化的值没保存下来。因为不是同一个实例
void Awake(){ m_Instance = this;//这里也记录上 }
幽幽有悠悠呦 2018-03-03
  • 打赏
  • 举报
回复
这个是脚本执行顺序问题。 因为你没执行脚本执行顺序。你这个是两个类,例如A和B类。A类是单例模式,,但是A类的Awake还没执行,是你的B类的Awake先执行了。这个时候拿到的必然就是空了。。 解决办法有三种, 第一种:指定脚本的执行顺序,, 第二种:不要在Awake中获取其他类的单例模式,而是延迟到Start之后再来拿。 第三种:Instance是get 属性,有另外一个m_Instance判断是否为空,不是空就返回,否则新建一个对象,给对象加入自身脚本,并赋值给m_Instance,然后返回m_Instance,例如下方代码: public class Test : MonoBehaviour { private static Test m_Instance; public static Test Instance { get { if (m_Instance == null) { m_Instance = new GameObject().AddComponent<Test>(); } return m_Instance; } } } 但是第三个方案有个缺陷。不能监视面板上面赋值,因为是在Instance的get属性中实例化的。序列化的值没保存下来。因为不是同一个实例
  • 打赏
  • 举报
回复
一楼说的应该是对的,应该是因为你的land是空的。
  • 打赏
  • 举报
回复
static前面加public
qifa 2018-01-20
  • 打赏
  • 举报
回复
可能是调用 land = ResourceManager.Instance.land 的这个脚本执行顺序高于 ResourceManager 脚本, ResourceManager类的Instance这个静态变量还没有初始化 在设置里面调整一下脚本执行顺序试试看看
Amumu12138 2018-01-18
  • 打赏
  • 举报
回复
报的是空引用的错误,应该是你本身land就没有实例化,或者没有添加对象。
nuolo 2018-01-16
  • 打赏
  • 举报
回复
static 前面不加权限会默认为private,
昨天忆 2018-01-05
  • 打赏
  • 举报
回复
实例化下
昨天忆 2018-01-05
  • 打赏
  • 举报
回复
你这个land本身就是空的,没有实例化,也没有添加GameObject

2,538

社区成员

发帖
与我相关
我的任务
社区描述
Unity3D相关内容讨论专区
游戏unity 技术论坛(原bbs)
社区管理员
  • Unity3D
  • 芝麻粒儿
  • 「已注销」
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

Unity3D社区公告:

  1. 社区致力于解决各种Unity3D相关的“疑难杂症”。
  2. 社区不允许发布与Unity3D或相关技术无关内容。
  3. 社区版主邀请各位一道为打造优秀社区不懈努力。

试试用AI创作助手写篇文章吧