Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(197评价)
价格: 4431.00元
关于空对象的问题
中文一号发起了问答2017-08-17
7
回复
371
浏览

在unity中定义了两个类,class1{},class2{},

class2{}这个脚本绑定在一个button的onclick事件上,在这个类中定义一个方法(public void ButtonClick()

{

calss1.Instance.OnButtonClick(); //调用class1{}中的方法。

})

class1{}是个单实例类,里面声明了一个私有变量(private GameObject go;),然后在Start方法里面通过Resources.load加载并创建出来这个物体(这个物体确实被创建出来了),但是在这个类中我定义了供class2{}调用的方法(public void OnButtonClick()

{

  print(go);//当我按下按钮的时候,这里报空对象的错误,为什么??

//我自己是这样处理,在这个物体加个标签,然后在这个方法中,我通过FindObjectWithTag重新去找这个物体。但是这

//样很麻烦,请老师指点一下。(备注:UI框架的那个方法我大概也会,请教一下老师有没有其他的方法,或者这个到底为什么。)

} )

所有回复
  • siki 2017-08-17

    calss1没有挂在游戏物体身上,start方法不会执行

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 中文一号 2017-08-18

    物体是个prefab,我试了,比如我要创建的是一个cube预设体,然后我把class1挂在cube上,然后其他还是一样,button触发(public void ButtonClick()

    {

    calss1.Instance.OnButtonClick(); //调用class1{}中的方法。

    })。。。。结果还是N

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-08-19

    class1你挂在了prefab上,如果这个prefab没有放在场景中,那么start方法也不会执行,class1还是空的

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 中文一号 2017-08-19

    我创建了个空物体,然后把class1{}挂在空物体上,prefab加载出来了,但调用方法还是Null

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-08-19

    1,首先 你的class.instance是在start方法里面初始化的

        那么之类有可能出问题的就是代码执行,你可以通过在这里print来验证是否执行了

    2,还有就是使用的上class.instance如果在start里面初始化的,你在另一个地方,也在start里面使用的,就可能导致你使用的时候,初始化的代码还没有执行 ,这个时候你可以吧初始化的代码放在Awake里面,awake总是先于start执行

     

    检查上述说的两个地方

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 中文一号 2017-08-25

    忘记回复了,解决了,就是您说的instance要先在awake里初始化,不能直接用单例模式。

    还有-4条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!