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

(196评价)
价格: 4019.00元
请教个basepanel问题
mashiro发起了话题2017-10-25
1
回复
354
浏览

private BasePanel GetPanel(UIPanelType panelType) //根据面板类型得到要实例化的面板
    {
        if (panelDict == null)
        {
            panelDict = new Dictionary<UIPanelType, BasePanel>();
        }
        BasePanel panel =panelDict.TryGet(panelType);        
        if (panel == null)
        {   //string path;
            //panelPathDict.TryGetValue(panelType, out path);
            string path = panelPathDict.TryGet(panelType);       
            GameObject instPanel = GameObject.Instantiate(Resources.Load(path)) as GameObject;
            instPanel.transform.SetParent(CanvasTransfrom,false);
            //如果第二个参数 instPanel.transform.SetParent(canvasTransfrom,false); 
            //设置成false就是变成 canvas子类后不改变自身的世界坐标和尺寸
            //todo
            panelDict.Add(panelType, instPanel.GetComponent<BasePanel>());
            return instPanel.GetComponent<BasePanel>();
        }
        else
        {
            //这里暂时没有实例化
            return panel;
        }
    }

 

这里basepanel并没有挂在游戏物体上 而游戏物体上public class MainMenuPanel:BasePanel  挂的是这个脚本 请问

这个GetComponent<BasePanel>() 这句代码 是怎么执行的游戏物体上都没有basepanel只是继承了 如果多个游戏物体这里的basepanel是一样的还是不一样的呢 

 BasePanel panel = GetPanel(panelType);
        panel.OnEnter();//这里是显示要加载的面板
        panelStack.Push(panel); 

这里为什么能通过basepanel调用到子类重写的方法呀这样子不算是 new的父类吗

 

 

所有回复
  • siki 2017-10-25

    1,如果a继承自b,那么可以说a也是b类型的,所有通过GetComponent<B>也是可以得到B和B所有的子类组件的

    2,这里的panel肯定是某个子类,只是我们不知道哪个子类,所以通过父类来访问,其实访问的是某个子类,当然这些实现的方法也可以被访问到

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