Пример #1
0
    public static void ShowTranstion(SceneTransType type = SceneTransType.Null, System.Action inAction = null, System.Action holdAciton = null)
    {
        if (type != SceneTransType.Null)
        {
            //FieldInfo fieldInfo = type.GetType().GetField(type.ToString());
            //object[] attribArray = fieldInfo.GetCustomAttributes(false);
            //if (attribArray.Length > 0)
            //{
            //    DescriptionAttribute attrib = (DescriptionAttribute)attribArray[0];
            //    //通过枚举描述来判断生成类型
            //    if (attrib.Description == GUI)
            //    {
            //        SMTransition smtranstion = GameObject.Instantiate(Resources.Load<GameObject>(sceneDic[type])).GetComponent<SMTransition>();
            //        smtranstion.InAction = inAction;
            //        smtranstion.HoldAction = holdAciton;
            //    }
            //    else
            //    {
            //        SMPostEffectsTransition smpostransition = GameObject.Instantiate(Resources.Load<GameObject>(sceneDic[type])).GetComponent<SMPostEffectsTransition>();
            //        smpostransition.ShaderName = type.ToString();
            //        smpostransition.InAction = inAction;
            //        smpostransition.HoldAction = holdAciton;
            //    }
            //}

            if (sceneDic.ContainsKey(type))
            {
                SMTransition smtranstion = GameObject.Instantiate(Resources.Load <GameObject>(sceneDic[type])).GetComponent <SMTransition>();
                smtranstion.InAction   = inAction;
                smtranstion.HoldAction = holdAciton;
            }
            else
            {
                string path = UguiNormalPath;
                if (type == SceneTransType.MaskTexWipe)
                {
                    path = UguiMaskTexPath;
                }
                SMPostEffectsTransition smpostransition = GameObject.Instantiate(Resources.Load <GameObject>(path)).GetComponent <SMPostEffectsTransition>();
                smpostransition.ShaderName = type.ToString();
                smpostransition.InAction   = inAction;
                smpostransition.HoldAction = holdAciton;
            }
        }
        else
        {
            if (holdAciton != null)
            {
                holdAciton();
            }
        }
    }
Пример #2
0
        public void ShowUI(EUiId nextUiId, SceneTransType transType = SceneTransType.Null, Transform parent = null, string EventTypeName = null, params object[] param)
        {
            Resources.UnloadUnusedAssets();
            GC.Collect();
            if (isInit)
            {
                AudioManager.Instance.PlayAudio();
            }
            if (!isInit)
            {
                isInit = true;
            }

            BaseUI currentUI = GetBaseUI(CurrentId);

            SceneTransition.ShowTranstion(transType,
                                          () =>
            {
                if (transType == SceneTransType.Newspaper)
                {
                }
            },
                                          () =>
            {
                if (currentUI != null && parent == null)
                {
                    //父级baseUI
                    EUiId parentUiId = EUiId.NullUI;
                    BaseUI parentUI  = currentUI.transform.GetComponentUpwards <BaseUI>();
                    if (parentUI != null)
                    {
                        parentUiId = parentUI.UiId;
                    }

                    BaseUI[] childUI = currentUI.GetComponentsInFirstHierarchyChildren <BaseUI>(true);

                    //如果父级有baseUI并且直接打开的是别的UI的话就删除
                    if (parentUiId != EUiId.NullUI && nextUiId != parentUiId)
                    {
                        Destroy(parentUI.gameObject);
                    }
                    else
                    {
                        Destroy(currentUI.gameObject);
                    }

                    RemoveUiId(CurrentId);
                    if (childUI != null)
                    {
                        for (int i = 0; i < childUI.Length; i++)
                        {
                            EUiId chiidUiId = childUI[i].UiId;
                            RemoveUiId(chiidUiId);
                        }
                    }
                    if (parentUiId != EUiId.NullUI && nextUiId != parentUiId)
                    {
                        RemoveUiId(parentUiId);
                    }
                }

                BaseUI baseUI = JudgeShowUI(nextUiId, parent);
                if (baseUI != null)
                {
                    baseUI.HideUI();
                    if (EventTypeName != null)
                    {
                        SwanEngine.Events.Dispatcher.Instance.DispathEvent(EventTypeName, param);
                    }
                    //CurrentId = nextUiId;
                    baseUI.ShowUI();

                    /* 到时候可能要改成这样,因为在OnEnable的时候Enable还为false,不能调用协程
                     * baseUI.ShowUI();
                     * if (EventTypeName != null)
                     *  SwanEngine.Events.Dispatcher.Instance.DispathEvent(EventTypeName, param);
                     */
                }
                CurrentId = nextUiId;
            });
            Resources.UnloadUnusedAssets();
            GC.Collect();
        }