Dictionary <GameMenu, MenuInfo> cachedMenu = new Dictionary <GameMenu, MenuInfo>(); //讲预设体 和他的管理者 存起来的 字典 MenuInfo LoadMenu(GameMenu gameMenu, MenuParams parms, bool bInit = true) //通过当前所在的gameMenu 的位置来加载预设体 { MenuInfo menuInfo; GameObject menu = null; if (cachedMenu.TryGetValue(gameMenu, out menuInfo) == false) //如果cacheMenu中没有这个预设体 { GameObject obj = Resources.Load(string.Format("Prefab/Menu/{0}", gameMenu.ToString())) as GameObject; //通过 当前gameMenu 的状态来获取 预设体 menu = Instantiate(obj); //实例化这个预设体 menu.transform.SetParent(m_UIRoot.transform, false); //在这里就添加上去了 menu.transform.localScale = Vector3.one; parms.RemoveGameObject(); //从字典中移除所有的预设体 parms.AddParam <GameObject>(menu); //把这个预设体加入到字典中 menuInfo = new MenuInfo(gameMenu, parms); //实例化一个预设体的管理类 cachedMenu.Add(gameMenu, menuInfo); //讲当前的预设体 和 他的管理类 添加打cachedMenu中 } else //cacheMenu里面已经有这个预设体了 { parms.RemoveGameObject(); parms.AddParam <GameObject>(menuInfo.obj); menuInfo = new MenuInfo(gameMenu, parms); } menuInfo.SetActive(true); //激活这儿预设体 if (bInit == true) { menuInfo.Init(); } return(menuInfo); }