Esempio n. 1
0
 /// <summary>
 /// 设置UI遮罩背景
 /// </summary>
 void SetBg(UIToolData data)
 {
     mBgUI = data;
     Background.planeDistance = data.MyCanvas.planeDistance + BackgroundDis;    //设置遮罩层位置
     Background.sortingOrder  = UIMaxDepth - (int)Background.planeDistance;
     Background.gameObject.SetActive(true);
 }
Esempio n. 2
0
    /// <summary>
    /// 隐藏UI
    /// </summary>
    void MyHideUI(UIToolData _data)
    {
        if (!_data.IsShowed)
        {
            return;
        }
        _data.IsShowed = false;         //设置标记
        //播放此UI关闭动画

        //先隐藏UI
        if (_data.ConfigTable.IsHide == 1)
        {
            _data.MyCanvas.gameObject.SetActive(false);
        }
        //调整同层UI深度
        ResetUILocation(_data);
        //还原上个UI的背景
        if (_data.ConfigTable.IsNeedBackground == 1)
        {
            //需要所有UI的深度调整完毕后,背景才能进行还原
            SetBackground(_data);
            //还原完毕后当前UI的前UI背景ID清空
            _data.LinkedListBreak();
        }
        //判断此UI是否关闭销毁
        if (_data.ConfigTable.DestroyType == 2)
        {
            //PoolTool.RemoveGameObject(_data.MyCanvas.transform, true);     //销毁UI(不走池了)
            DestroyImmediate(_data.MyCanvas.gameObject);
            _AllUI.Remove(_data.Id);    //将彻底隐藏的UI进行销毁
        }
    }
Esempio n. 3
0
    /// <summary>
    /// 设置UI父物体
    /// </summary>
    void SetUIParent(uint id)
    {
        if (_AllUI.ContainsKey(id))
        {
            UIToolData _data  = _AllUI[id];
            Transform  _trans = _data.MyCanvas.transform;
            switch (_data.ConfigTable.Hierarchy)
            {
            case "HUD":
                _trans.SetParent(HUDTrans, false);
                break;

            case "Joystick":
                //_trans.parent = JoystickTrans;
                _trans.SetParent(JoystickTrans, false);
                break;

            case "Normal":
                //_trans.parent = NormalTrans;
                _trans.SetParent(NormalTrans, false);
                break;

            case "Fixation":
                //_trans.parent = FixationTrans;
                _trans.SetParent(FixationTrans, false);
                break;

            case "PopUp":
                //_trans.parent = PopUpTrans;
                _trans.SetParent(PopUpTrans, false);
                break;

            case "Guide":
                //_trans.parent = GuideTrans;
                _trans.SetParent(GuideTrans, false);
                break;

            case "Loading":
                //_trans.parent = LoadingTrans;
                _trans.SetParent(LoadingTrans, false);
                break;

            case "PopTop":
                //_trans.parent = PopTopTrans;
                _trans.SetParent(PopTopTrans, false);
                break;

            default:
                break;
            }
            _trans.localScale    = Vector3.one;
            _trans.localPosition = Vector3.zero;
        }
    }
Esempio n. 4
0
 /// <summary>
 /// 添加一个自己的前置数据
 /// </summary>
 public void LinkedListAddBefor(UIToolData _data)
 {
     BgBefore = _data;
     if (_data != null)
     {
         if (_data.BgLater != null)
         {
             _data.BgLater.BgBefore = this;
         }
         BgLater       = _data.BgLater;
         _data.BgLater = this;
     }
 }
Esempio n. 5
0
 /// <summary>
 /// 自己从链表中出去
 /// </summary>
 public void LinkedListBreak()
 {
     if (BgLater != null)
     {
         BgLater.BgBefore = BgBefore;
     }
     if (BgBefore != null)
     {
         BgBefore.BgLater = BgLater;
     }
     BgLater  = null;
     BgBefore = null;
 }
Esempio n. 6
0
 /// <summary>
 /// C#调用
 /// 关闭UI。并传入是否播放关闭动画(优先级高于配置)
 /// </summary>
 public void HideCSUI(uint id, bool isAnim = false, Action <GameObject> callback = null)
 {
     if (_AllUI.ContainsKey(id))
     {
         LoggerHelper.Debug("一个UI隐藏了:    " + _AllUI[id].ConfigTable.Name);
         UIToolData _data = _AllUI[id];
         MyHideUI(_data);        //隐藏UI方法
         //发送MVC消息
         Facade.Instance.SendNotification(string.Concat(_data.ConfigTable.Name, MVCNameConst.UI_UIHide));
         if (callback != null)
         {
             callback.Invoke(_data.MyCanvas.gameObject);
         }
     }
 }
Esempio n. 7
0
    /// <summary>
    /// UI关闭时,重置同层UI的位置
    /// </summary>
    void ResetUILocation(UIToolData data)
    {
        float _baseDis    = data.MyCanvas.planeDistance;    //获取当前深度
        float _depthSpeed = data.ConfigTable.DepthSpeed;    //获取此UI占用深度

        //将此层所有显示的UI进行深度排序
        UIToolData[] _items = _AllUI.Values.Where(p => p.IsShowed && p.ConfigTable.Hierarchy == data.ConfigTable.Hierarchy).ToArray();
        int          _count = _items.Length;

        //将所有同层的UI的深度,进行调整
        for (int i = 0; i < _count; i++)
        {
            float _nowDis = _items[i].MyCanvas.planeDistance;
            if (_nowDis < _baseDis)
            {
                _items[i].MyCanvas.planeDistance = _nowDis + _depthSpeed;
            }
        }
    }
Esempio n. 8
0
    /// <summary>
    /// 显示UI
    /// </summary>
    void MyShowUI(uint id)
    {
        SetUILocation(id);      //设置自己所在层的位置
        //播放此UI打开动画


        UIToolData _data = _AllUI[id];

        if (_data.IsShowed)
        {
            return;
        }
        _data.IsShowed = true;
        _data.MyCanvas.gameObject.SetActive(true);
        if (_data.ConfigTable.IsNeedBackground == 1)
        {
            _data.LinkedListAddBefor(mBgUI); //新建背景时,需要赋值自己打开时,上个有背景的UI的值
            SetBg(_data);                    //设置背景遮罩
        }
    }
Esempio n. 9
0
 /// <summary>
 /// 设置UI遮罩背景
 /// </summary>
 void SetBackground(UIToolData _data)
 {
     if (_data.BgBefore != null)
     {
         //如果当前id对应的UI尚未关闭,则设置到对应的UI下,否则直接隐藏
         if (_data.BgBefore.MyCanvas.gameObject != null && _data.BgBefore.MyCanvas.gameObject.activeSelf)
         {
             SetBg(_data.BgBefore);
         }
         else
         {
             Debug.LogError("出现了一个隐藏的界面,但链表中没有去掉");
         }
     }
     else
     {
         //隐藏背景
         Background.gameObject.SetActive(false);
         mBgUI = null;
     }
 }
Esempio n. 10
0
    //-----------------内部方法------------------
    #region 内部方法
    /// <summary>
    /// UI加载成功后,会直接调用对应UI的创建成功方法
    /// </summary>
    void LoadUIBack(PoolLoadData _data)
    {
        //将加载完的UI,放在临时存储中
        UIConfigTable tData     = _data.data as UIConfigTable;
        UIToolData    tToolData = new UIToolData(tData.Id, _data.transform, tData);

        tToolData.MyCanvas.renderMode  = RenderMode.ScreenSpaceCamera;
        tToolData.MyCanvas.worldCamera = UICamera;
        //设置父物体
        _AllUI.Add(tToolData.Id, tToolData);
        SetUIParent(tToolData.Id);
        //显示UI
        MyShowUI(tToolData.Id);
        //创建成功后,将obj传过去
        if (_Callback.ContainsKey(tData.Id))
        {
            _Callback[tData.Id].Invoke(_data.transform.gameObject);
            _Callback.Remove(tData.Id);
        }
        //发送MVC消息
        Facade.Instance.SendNotification(string.Concat(_data.transform.gameObject.name, MVCNameConst.UI_UIShow));
    }
Esempio n. 11
0
    /// <summary>
    /// UI打开时,设置自己在同层UI位置
    /// </summary>
    void SetUILocation(uint id)
    {
        if (_AllUI.ContainsKey(id))
        {
            UIToolData   _data       = _AllUI[id];
            UIToolData[] _items      = _AllUI.Values.Where(p => p.IsShowed && p.ConfigTable.Hierarchy == _data.ConfigTable.Hierarchy).ToArray();
            float        _minDis     = 0;
            float        _depthSpeed = 0;
            int          _count      = _items.Length;
            if (_count != 0)    //此层有UI
            {
                for (int i = 0; i < _count; i++)
                {
                    float _nowDis = _items[i].MyCanvas.planeDistance;
                    if (_minDis == 0 || _nowDis < _minDis)
                    {
                        _minDis     = _nowDis;
                        _depthSpeed = _items[i].ConfigTable.DepthSpeed;
                    }
                }
            }
            else    //此层无显示的UI,直接设置为基础层
            {
                switch (_data.ConfigTable.Hierarchy)
                {
                case "HUD":
                    _minDis = HUDPos;
                    break;

                case "Joystick":
                    _minDis = JoystickPos;
                    break;

                case "Fixation":
                    _minDis = FixationPos;
                    break;

                case "Normal":
                    _minDis = NormalPos;
                    break;

                case "PopUp":
                    _minDis = PopUpPos;
                    break;

                case "Guide":
                    _minDis = GuidePos;
                    break;

                case "Loading":
                    _minDis = LoadingPos;
                    break;

                case "PopTop":
                    _minDis = PopTopPos;
                    break;

                default:
                    break;
                }
            }
            _data.MyCanvas.planeDistance = _minDis - _depthSpeed;                          //将其设置在最高层
            _data.MyCanvas.sortingOrder  = UIMaxDepth - (int)_data.MyCanvas.planeDistance; //设置orderInLayer实属无奈,错开order是为了防止同order的ScreenSpace-Camera类型canvas点击穿透
        }
    }