Ejemplo n.º 1
0
        /// <summary>
        /// 初始化UIPrefab
        /// </summary>
        /// <param name="ui"></param>
        /// <param name="uiObj"></param>
        /// <param name="name"></param>
        /// <param name="resource"></param>
        /// <param name="paramList"></param>
        void InitPrefab(BaseUI ui, GameObject uiObj, string name, AssetAddress resource = AssetAddress.AssetBundle, params object[] paramList)
        {
            if (uiObj == null)
            {
                Debug.Log("创建窗口Prefagb失败:" + name);
                return;
            }

            //添加到所有UI字典中去
            if (!m_AllUIDic.ContainsKey(name))
            {
                m_AllUIDic.Add(name, ui);
            }

            ui.GameObject = uiObj;
            ui.Transform  = uiObj.transform;
            ui.Name       = name;
            ui.Resource   = resource;

            //设置UI的挂在节点
            SetUIRoot(ui);

            //设置UI的显示模式
            SetUIShowMode(ui);

            ui.Awake(paramList);

            ShowUI(ui, paramList);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 初始化UIPrefab
        /// </summary>
        /// <param name="ui"></param>
        /// <param name="uiObj"></param>
        /// <param name="name"></param>
        /// <param name="resource"></param>
        /// <param name="paramList"></param>
        void InitFairyGUIPanel(BaseUI ui, string name, AssetAddress resource = AssetAddress.AssetBundle, params object[] paramList)
        {
            //添加到所有UI字典中去
            if (!m_AllUIDic.ContainsKey(name))
            {
                m_AllUIDic.Add(name, ui);
            }
            //创建一个Window
            ui.wnd = new FairyGUI.Window();

            //设置UI的显示模式
            SetUIShowMode(ui);

            ui.Awake(paramList);

            ShowUI(ui, paramList);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 打开UI
        /// </summary>
        /// <param name="name">注册的时候给的名称</param>
        /// <param name="bTop"></param>
        /// <param name="resource"></param>
        /// <param name="para1"></param>
        /// <param name="para2"></param>
        /// <param name="para3"></param>
        /// <returns></returns>
        public void OpenUI <T>(string name, Action <bool, T> callback = null, AssetAddress resource = FrameConstr.UseAssetAddress, params object[] paramList) where T : BaseUI
        {
            Debug.Log(string.Format("UIName:{0},AssetAddress:{1},paramList:{2}", name, resource, paramList));
            //开启遮罩避免开启UI的时候接收了操作出现异常
            SetMask(true);
            BaseUI ui = FindUIByName <BaseUI>(name);

            if (ui == null)
            {
                System.Type tp = null;
                if (m_RegisterDic.TryGetValue(name, out tp))
                {
                    ui = System.Activator.CreateInstance(tp) as BaseUI;
                    ui.Init();
                }
                else
                {
                    Debug.LogError("找不到窗口对应的脚本,注册的窗口名称是:" + name);
                }
                //FGUI 用Addressable好困难,先用AssetBundle实现功能先,实现后看怎么优化让Addressable也能和FGUI融合
                if (ui.m_UIType == UIType.FariyGUI)
                {
                    if (!FairyGUIManager.Instance.m_PreFairyGUIList.ContainsKey(ui.UIResourceName))
                    {
                        //没有预加载过的Fairy包,我们就加载这个包
                        if (resource == AssetAddress.AssetBundle)
                        {
                            string abName;
                            if (FairyGUIManager.Instance.m_FairyGUIList.TryGetValue(ui.UIResourceName, out abName))
                            {
                                AssetBundle ab = AssetBundleManager.Instance.LoadAssetBundle(abName);
                                UIPackage.AddPackage(ab);
                                InitFairyGUIPanel(ui, name, resource, paramList);
                            }
                        }
                        else if (resource == AssetAddress.Addressable)
                        {
                            //string abName;
                            //没有预加载过的Fairy包,我们就加载这个包
                            //if (FairyGUIManager.Instance.m_FairyGUIList.TryGetValue(ui.UIResourceName, out abName))
                            //{
                            //string desname = ui.UIResourceName + "_fui.bytes";
                            //Debug.Log("desname" + desname);
                            //加载FairyGUI Package
                            //AddressableManager.Instance.AsyncLoadResource<TextAsset>(desname, (TextAsset text) =>
                            //{
                            //    Debug.Log("desLoadSuc");
                            //    UIPackage.AddPackage(
                            //        text.bytes,
                            //        "BackPack",
                            //        async (string fairyname, string extension, Type type, PackageItem ite) =>
                            //        {
                            //            Debug.Log($"{fairyname}, {extension}, {type.ToString()}, {ite.ToString()}");

                            //            AddressableManager.Instance.AsyncLoadResource<Texture>(fairyname, (Texture tex) =>
                            //            {
                            //                ite.owner.SetItemAsset(ite, tex, DestroyMethod.Custom);
                            //                InitFairyGUIPanel(ui, name, resource, paramList);
                            //            });
                            //        });
                            //});
                            //}
                        }
                        else
                        {  //其他模式从本地加载
                            UIPackage.AddPackage(ui.UIResourceName);
                            InitFairyGUIPanel(ui, name, resource, paramList);
                        }
                    }
                }
                else
                {
                    GameObject uiObj = null;
                    if (resource == AssetAddress.Resources)
                    {
                        //从resource加载UI
                        uiObj = UnityEngine.Object.Instantiate(Resources.Load <GameObject>(ui.UIResourceName.Replace(".prefab", ""))) as GameObject;
                        InitPrefab(ui, uiObj, name, resource, paramList);
                    }
                    else if (resource == AssetAddress.AssetBundle)
                    {
                        //从AssetBundle加载UI
                        ObjectManager.Instance.InstantiateObjectAsync(m_UIPrefabPath + ui.UIResourceName, (string path, UnityEngine.Object obj, object[] paramArr) =>
                        {
                            uiObj = obj as GameObject;
                            InitPrefab(ui, uiObj, name, resource, paramList);
                        }, LoadResPriority.RES_HIGHT, false, false);
                    }
                    else if (resource == AssetAddress.Addressable)
                    {
                        AddressableManager.Instance.AsyncInstantiate(m_UIPrefabPath + ui.UIResourceName, (GameObject obj) =>
                        {
                            uiObj = obj;
                            InitPrefab(ui, uiObj, name, resource, paramList);
                        });
                    }
                }
            }
            else
            {
                //设置UI的显示模式
                SetUIShowMode(ui);
                ShowUI(ui, paramList);
            }
        }