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的父类吗
1,如果a继承自b,那么可以说a也是b类型的,所有通过GetComponent<B>也是可以得到B和B所有的子类组件的
2,这里的panel肯定是某个子类,只是我们不知道哪个子类,所以通过父类来访问,其实访问的是某个子类,当然这些实现的方法也可以被访问到