示例#1
0
        private BaseUi JudgeShowUI(E_UIID uiid) //判断要显示的是哪个UI,返回现在显示的UI
        {
            //判断要显示的窗体是否正在显示,如果正在显示则不用处理
            if (dicShowUi.ContainsKey(uiid))
            {
                return(null);
            }
            BaseUi baseUi = GetGaseUI(uiid);

            if (baseUi == null)//判断需要显示的窗体是否加载过
            {
                //拿到UIID然后向UI路径字典取值
                string     path   = GameDefine.dicPath[uiid];
                GameObject loadUi = Resources.Load <GameObject>(path);
                if (loadUi != null)
                {
                    //路径正确,实例化窗体
                    GameObject willShowUI = Instantiate(loadUi);
                    baseUi = willShowUI.GetComponent <BaseUi>();
                    Type type = GameDefine.GetUiScriptType(uiid);
                    if (baseUi == null)
                    {
                        //说明窗体是没有挂载脚本,自动添加对应的UI脚本
                        baseUi = willShowUI.AddComponent(type) as BaseUi;
                    }
                    else
                    {
                        baseUi = willShowUI.GetComponent(type) as BaseUi;
                    }
                    Transform uiRoot = GetTheRoot(baseUi);
                    GameTool.AddChildToParent(uiRoot, willShowUI.transform);
                    //位置不正确,重设UI位置
                    willShowUI.GetComponent <RectTransform>().sizeDelta          = Vector2.zero;
                    willShowUI.GetComponent <RectTransform>().anchoredPosition3D = Vector3.zero;

                    //窗体第一次加载,把该窗体缓存到aicAllUi字典。
                    dicAllUi.Add(uiid, baseUi);
                }
                else
                {
                    Debug.Log("没有加载到" + uiid + "预制体");
                }
            }
            else
            {
                baseUi.ShowUI();
            }
            UpdateShowUiHedeUi(baseUi);
            return(baseUi);
        }