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

(197评价)
价格: 4431.00元
UI框架入栈问题
谁家的猫发起了问答2017-10-12
7
回复
900
浏览

点击任务按钮 调用OnPushPanel 方法入栈任务面板 

却判断 栈为空 又重新new 一个栈

执行不到 panelStack.Count > 0的情况

什么问题啊?

public void PushPanel(UIPanelType panelType)
    {
        if (panelStack == null)
        {
            panelStack = new Stack<BasePanel>();
            Debug.Log("New栈");
        }
            
        Debug.Log("1:"+panelStack.Count);
        if (panelStack.Count > 0)
        {
            BasePanel topPanel = panelStack.Peek();
            topPanel.OnPause();
            Debug.Log("OnPause");
        }
        BasePanel panel = GetPanel(panelType);
        panel.OnEnter();
        panelStack.Push(panel);
        Debug.Log(panelStack.Count);
    }


 

所有回复
  • siki 2017-10-13

    每次push都new吗,是不是new调用了两次,那应该是你的这个UI管理器存放在多个位置了,确定你使用的是同一个ui管理器

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 谁家的猫 2017-10-13

    大哥 我找到问题了  原因是UIManager 继承了MonoBehaviour

     

    但是我还不太懂为啥继承了MonoBehaviour  会导致 每次 调用PushPanel 之前Instance 的时候都会重新new 一个UIManager

    • ifnoLee 2017-10-13

      那是因为单例里写了如果为空就new,你继承mono又没有挂在物体上。

      (0) 回复
    • 谁家的猫 2017-10-13

      回复 @ ifnoLee: 我查了查
      如果只是自己定义的一个数据类,继承了mono,你就不能通过new来实例化一个对象

      UIManager继承了MonoBehaviour
      初始化也通过
      UIManager.Instance.PushPanel(UIPanelType.MainMenu)加载出了 MainMenu
      _instance = new UIManager()是不是说明也被调用了 既然不允许 通过new 来实例化Mono的类 为啥还是调用了PushPanel加载出了UI面板 虽然第二次调用PushPanel也证明了_instnace确实没有被赋值

      (0) 回复
    还有-3条回复,点击查看
    你还没有登录,请先登录注册
  • 谁家的猫 2017-10-13

    继承Mono会有一个BUG:

    如果你继承了Mono的类,你就不需要创建它的实例,而且你也不能new创建虽然编译可以通过,但是执行的时候就会有个一个错误显示在edit的console窗口,这时候不管你new后面是否为空,但是系统显示为空,这就是一个BUG了:我的类继承了你,虽然不能new出来,但是它认为,这不算一个错误啊。所以当获取对象或其值报错为null时,考虑是否继承了monobehaviour类。

    • ifnoLee 2017-10-13

      不是bug,就是unity的机制,继承了mono的类,不可以自己new,只能挂在场景里的物体上,而且想要获取单例要么通过组件获取,要么instance = this。这就是unity组件式的规则。

      (0) 回复
    还有-4条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-10-13

    继承了mono就不能new了,这个不是bug,这是Unity的特性,继承了就是作为组件来使用了,作为组件来使用只能通过addcomponent添加到游戏物体身上,让unitynew,我们自己不可以new 的

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