Пример #1
0
 /// <summary>
 /// 关闭窗体
 /// </summary>
 /// <param name="windowName">窗体名称</param>
 /// <param name="destroyWindow">是否销毁窗体</param>
 public void PopWindow(string windowName, bool destroyWindow = false)
 {
     Debug.Log(mUIStack.Count);
     if (mUIStack.Contains(GetWindowByName(windowName)))
     {
         UGUIWindowBase temp = mUIStack.Pop();
         while (temp.windowInfo.GameObjectName != windowName)
         {
             temp.Hide();
             if (destroyWindow)
             {
                 temp.CloseWindow();
                 manager.CloseWindow(temp);
                 windowIndex.Remove(temp.windowInfo.GameObjectName);
             }
             temp = mUIStack.Pop();
         }
         temp.Hide();
         if (destroyWindow)
         {
             temp.CloseWindow();
             manager.CloseWindow(temp);
             windowIndex.Remove(temp.windowInfo.GameObjectName);
         }
     }
     else
     {
         Debug.LogError("UGUIFrameworkStackError: 名称为" + windowName + "的窗口未打开,无法隐藏或关闭!");
     }
 }
Пример #2
0
 public void PopAllWindow(bool destroyWindow = false)
 {
     while (mUIStack.Count > 0)
     {
         UGUIWindowBase temp = mUIStack.Pop();
         temp.Hide();
         if (destroyWindow)
         {
             temp.CloseWindow();
             manager.CloseWindow(temp);
             windowIndex.Remove(temp.windowInfo.GameObjectName);
         }
     }
 }
Пример #3
0
        //系统调用方法
        public UGUIWindowBase CreateWindow(Type windowType)
        {
            UGUIWindowInfo windowInfo = GetUGUIWindowInfoByName(windowType.Name);

            if (windowInfo != null)
            {
                if (!windowInfo.UseAssetBundle)
                {
                    string     path          = windowInfo.PrefabsPath.ResourcesPath() + "/" + windowInfo.GameObjectName;
                    GameObject windowPrefabs = Resources.Load <GameObject>(path);
                    GameObject window        = null;
                    if (windowPrefabs != null)
                    {
                        switch (windowInfo.WindowType)
                        {
                        case UGUIWindowTypes.BottomStaticWindow:
                            window = Instantiate(windowPrefabs, UGUICanvas.GetChild(0));
                            break;

                        case UGUIWindowTypes.PopupWindow:
                            window = Instantiate(windowPrefabs, UGUICanvas.GetChild(1));
                            break;

                        case UGUIWindowTypes.TopStaticWindow:
                            window = Instantiate(windowPrefabs, UGUICanvas.GetChild(2));
                            break;
                        }

                        window.name = windowInfo.GameObjectName;
                        UGUIWindowBase prefabsWindowBase = window.GetComponent <UGUIWindowBase>();
                        prefabsWindowBase.OpenWindow(windowInfo);
                        return(prefabsWindowBase);
                    }
                    else
                    {
                        Debug.LogError("UGUIFrameworkCreateWindowError: 路径" + windowInfo.PrefabsPath + "下不存在窗体预制体" + windowInfo.GameObjectName);
                    }
                }
                else
                {
                    Debug.LogError("UGUIFrameworkCreateWindowError: 路径" + windowInfo.PrefabsPath + "下不存在窗体预制体" + windowInfo.GameObjectName);
                }
            }
            else
            {
                Debug.LogError("UGUIFrameworkCreateWindowError: 未找到名称为:" + windowType.Name + "的窗体信息!");
            }

            return(null);
        }
Пример #4
0
        public void SetWindowAsLastWindow(UGUIWindowBase windowBase)
        {
            switch (windowBase.windowInfo.WindowType)
            {
            case UGUIWindowTypes.BottomStaticWindow:
                windowBase.windowTransform.SetSiblingIndex(UGUICanvas.GetChild(0).childCount - 1);
                break;

            case UGUIWindowTypes.PopupWindow:
                windowBase.windowTransform.SetSiblingIndex(UGUICanvas.GetChild(1).childCount - 1);
                break;

            case UGUIWindowTypes.TopStaticWindow:
                windowBase.windowTransform.SetSiblingIndex(UGUICanvas.GetChild(2).childCount - 1);
                break;
            }
        }
Пример #5
0
        /// <summary>
        /// 初始化函数
        /// </summary>
        public void InitStack()
        {
            List <string> removeKeyList = new List <string>();

            foreach (var VARIABLE in windowIndex)
            {
                UGUIWindowBase temp = VARIABLE.Value;
                if (!temp.windowInfo.DontClearOnChange)
                {
                    removeKeyList.Add(VARIABLE.Key);
                    temp.Hide();
                    manager.CloseWindow(temp);
                }
            }

            foreach (var VARIABLE in removeKeyList)
            {
                windowIndex.Remove(VARIABLE);
            }
        }
Пример #6
0
        /// <summary>
        /// 初始化UGUI框架
        /// </summary>
        /// <param name="windowConfig">配置文件</param>
        public void InitUGUIFramework(UGUIWindowConfig windowConfig)
        {
            UGUICanvas = null;
            if (!GameObject.Find("UGUICanvas"))
            {
                Debug.LogError("UGUIFrameworkInitError: 未找到名称为UGUICanvas的物体,请将预制体拖放到场景中");
                return;
            }
            UGUICanvas = GameObject.Find("UGUICanvas").transform;

            //清除上一个配置
            Stack.InitStack();

            //清空窗口信息缓存列表
            for (int i = 0; i < cacheWindowInfos.Count;)
            {
                if (!cacheWindowInfos[i].DontClearOnChange)
                {
                    cacheWindowInfos.RemoveAt(i);
                }
                else
                {
                    i++;
                }
            }
            //清空索引字典
            List <Type> removeKeyList = new List <Type>();

            foreach (var VARIABLE in windowIndex)
            {
                UGUIWindowBase temp = VARIABLE.Value;
                if (!temp.windowInfo.DontClearOnChange)
                {
                    removeKeyList.Add(VARIABLE.Key);
                    temp.Hide();
                    CloseWindow(temp);
                }
            }

            foreach (var VARIABLE in removeKeyList)
            {
                windowIndex.Remove(VARIABLE);
            }

            if (windowConfig == null)
            {
                Debug.LogError("UGUIFrameworkInitError: 配置文件读取失败,配置文件为空!");
                return;
            }

            //加载配置文件
            foreach (var windowInfo in windowConfig.UIWindowInfoList)
            {
                if (GetUGUIWindowInfoByName(windowInfo.GameObjectName) != null)
                {
                    Debug.LogWarning("UGUIFrameworkInitWarning: 尝试加载" + windowInfo.GameObjectName + "窗体时发现该窗体已被缓存,窗体未被加载。");
                }
                else
                {
                    cacheWindowInfos.Add(windowInfo);
                }
            }
        }
Пример #7
0
 public void CloseWindow(UGUIWindowBase window)
 {
     window.CloseWindow();
     Destroy(window.gameObject);
 }