コード例 #1
0
ファイル: UIManager.cs プロジェクト: JulyNine/JulyFrameWork
    public void OpenEnforceWindow(UIEnforceWindows windowKey)
    {
        //var windowKey = data.windowKey;
        //var args = data.args;

        // if (enforceWindowStack.Count != 0)
        // {
        // SetVisible(enforceWindowStack[enforceWindowStack.Count - 1].gameObject, false);
        // }
        // 注意释放该window变量
        var window = GetEnforceWindow(windowKey, null);

        // TODO UI转换效果
        var canvasGroup = window.GetComponent <CanvasGroup>();

        if (canvasGroup != null)
        {
            canvasGroup.alpha = 0;
            DOTween.To(() => canvasGroup.alpha, x => canvasGroup.alpha = x, 1f, 0.0f);
        }

        var requestWindow = window.GetComponent <UIEnforceWindow>();

        if (_enforceWindowStack.Contains(requestWindow))
        {
            _enforceWindowStack.Remove(requestWindow);
        }
        _enforceWindowStack.Add(requestWindow);
    }
コード例 #2
0
ファイル: UIManager.cs プロジェクト: JulyNine/JulyFrameWork
    private GameObject GetEnforceWindow(UIEnforceWindows windowKey, object args)
    {
        if (_enforceWindowPool == null)
        {
            _enforceWindowPool = new List <UIEnforceWindow>();
        }

        UIEnforceWindow requesetWindow = null;

        // 如果缓存池中有,则直接加载
        for (var i = 0; i < _enforceWindowPool.Count; i++)
        {
            if (_enforceWindowPool[i].windowKey == windowKey)
            {
                requesetWindow = _enforceWindowPool[i];
                requesetWindow.lastOpenTime = DateTime.Now;
                break;
            }
        }
        if (requesetWindow != null)
        {
            SetVisible(requesetWindow.gameObject, true);
            requesetWindow.Set(args);
        }
        else
        {
            // 如果缓存池中没有,则从硬盘加载
            var windowName   = Enum.GetName(typeof(UIEnforceWindows), windowKey);
            var resourcePath = UIEnforcewindowDir;
            var resourceName = resourcePath + windowName;

            // requesetWindow = GameObject.Instantiate(ResourceLoader.GetObjectDirectly<GameObject>(resourceName)).GetComponent<UIEnforceWindow>();
            requesetWindow = (Instantiate(Resources.Load(resourceName, typeof(GameObject))) as GameObject)
                             .GetComponent <UIEnforceWindow>();

            // windowObj.window = GameObject.Instantiate(ResourceLoader.GetObjectDirectly<UnityEngine.Object>(resourceName)) as GameObject;
            requesetWindow.transform.SetParent(UIRoot.transform);

            // 设置camera
            var canvases = requesetWindow.transform.GetComponentsInChildren <Canvas>();
            for (var i = 0; i < canvases.Length; i++)
            {
                canvases[i].worldCamera = UICamera;
            }
            var rect = requesetWindow.GetComponent <RectTransform>();
            rect.pivot         = new Vector2(0.5f, 0.5f);
            rect.localPosition = Vector3.zero;
            rect.localScale    = Vector3.one;
            rect.sizeDelta     = Vector2.zero;
            requesetWindow.Init(args);
            requesetWindow.lastOpenTime = DateTime.Now;
            _enforceWindowPool.Add(requesetWindow);

            // 如果超出缓存容量,删除最早打开的window
            if (_enforceWindowPool.Count > _poolCapacity)
            {
                var forDestroyWindow = _enforceWindowPool[0];
                for (var i = 1; i < _enforceWindowPool.Count; i++)
                {
                    if (_enforceWindowPool[i].lastOpenTime < forDestroyWindow.lastOpenTime)
                    {
                        forDestroyWindow = _enforceWindowPool[i];
                    }
                }
                LogManager.Log("Remove Window:" + forDestroyWindow.gameObject.name);
                _enforceWindowPool.Remove(forDestroyWindow);
                TryUnloadAtlas(forDestroyWindow);
                Destroy(forDestroyWindow.gameObject);
            }
        }

        return(requesetWindow.gameObject);
    }