U3D 遇到的 object reference not set to an insance 原因及解决方法

在学习Monkey老师的《飞盘射击》这个案例时,讲到游戏管理器这一课,需要制作游戏的UI界面,如图
首先,UI是一个空物体,这个空物体下面有三个子物体,分别是StartUI/GameUI/EndUI,这三个子物体也是空物体,再下面就是具体的UI界面了,
在创建这三个空物体的时候,Monkey老师的方法是点击UI,然后右键选择Create Empty生成第一个StartUI,然后用同样的方法生成GameUI、EndUI,我当时想偷懒一下下,就直接在生成第一个StartUI后用ctrl+D复制生成了GameUI、EndUI,当时觉得这样做是没问题的,但是在调用SetActive()方法时,在unity console中却显示NullReferenceException: Object reference not set to an instance of an object,可是在老师的视频中却是没有这个问题的,而且这个问题指向的代码行是这一行 m_GameUI.SetActive(true ),于是就马上联想到在创建GameUI时的偷懒行为,果然,在将旧的GameUI删除并用老师的方法新建了一个之后,问题解决了,于是顺便也新建了一个EndUI,再次调用SetActive()方法,没问题。
至于为什么会这样?我想可能是ctrl+D复制过来的GameUI是一个对StartUI的引用,当调用SetActive()方法时,其实调用的是StartUI,而不是GameUI下面的GameTime和GameScore对象?而因为StartUI本身就是一个空物体,因此才会引发NullReferenceException这个异常?
本人是一枚新手加小白,这个问题只能等以后再回来解释了。

//存储三个UI界面的引用
    private GameObject m_StartUI;
    private GameObject m_GameUI;
    private GameObject m_EndUI;
    void Start () {
        //通过查找持有三个UI的引用
        m_StartUI = GameObject.Find("StartUI");
        m_GameUI = GameObject.Find("GameUI");
        m_EndUI = GameObject.Find("EndUI");
        //设置UI的显示次序
        m_StartUI.SetActive(false);
        m_GameUI.SetActive(true );
        m_EndUI.SetActive(false);
        }
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值