public void OpenUIAsync(string name, System.Action <GameObject> callback)
        {
            string   path   = PathData.UI_PATH + name;
            UIBuffer buffer = uiBuffersGet(path);

            if (buffer != null)
            {
                int index = uiBuffersIndexOf(buffer);//更新使用排序
                uiBuffersMoveToEnd(index);
                if (buffer.buffer.activeSelf == false)
                {
                    buffer.buffer.SetActive(true);
                }
                if (callback != null)
                {
                    callback(buffer.buffer);                  //执行回调
                }
            }
            else
            {
                gbb.GetResourcesManager.LoadAsync <Object>(path, (asset) => {
                    //使用资源
                    buffer = createUIBuffer(path, asset.obj);
                    //删除资源
                    gbb.GetResourcesManager.Remove(path);
                    if (callback != null)
                    {
                        callback(buffer.buffer);                  //执行回调
                    }
                });
            }
        }
        //打开界面
        public GameObject OpenUI(string name)
        {
            string   path   = PathData.UI_PATH + name;
            UIBuffer buffer = uiBuffersGet(path);

            if (buffer != null)
            {
                int index = uiBuffersIndexOf(buffer);//更新使用排序
                uiBuffersMoveToEnd(index);
                if (buffer.buffer.activeSelf == false)
                {
                    buffer.buffer.SetActive(true);
                }
            }
            else
            {
                //加载资源
                Object obj = gbb.GetResourcesManager.Load <Object>(path).obj;
                //使用资源
                buffer = createUIBuffer(path, obj);
                //删除资源
                gbb.GetResourcesManager.Remove(path);
            }
            return(buffer.buffer);
        }
 //获取UIBuffer元素索引
 private int uiBuffersIndexOf(UIBuffer buffer)
 {
     for (int i = 0; i < _size; i++)
     {
         if (_uiBuffers[i].Equals(buffer))
         {
             return(i);
         }
     }
     return(-1);
 }
        //创建一个新的UIBuffer
        private UIBuffer createUIBuffer(string path, Object obj)
        {
            UIBuffer buffer = new UIBuffer(path, (GameObject)Instantiate(obj));

            buffer.buffer.name                    = buffer.buffer.name.Replace("(Clone)", "");
            buffer.buffer.transform.parent        = _uiContainer;//设置父节点
            buffer.buffer.transform.localPosition = Vector3.zero;
            buffer.buffer.transform.localScale    = Vector3.one;
            uiBuffersAdd(buffer);//加入缓存列表
            return(buffer);
        }
 //添加UIBuffer到列表最后面,如果空间不够移除第一个空间
 private void uiBuffersAdd(UIBuffer uiBuffer)
 {
     if (_size == _uiBuffers.Length)
     {
         uiBuffersRemoveAt(0);
         _uiBuffers[_size - 1] = uiBuffer;
     }
     else
     {
         _uiBuffers[_size] = uiBuffer;
         _size++;
     }
 }
 //将UIBuffer索引元素移动到末尾
 private void uiBuffersMoveToEnd(int index)
 {
     if (index > -1 && index < _size)
     {
         UIBuffer buffer = _uiBuffers[index];
         int      num    = _size - 1;
         for (int n = index; n < num; n++)
         {
             _uiBuffers[n] = _uiBuffers[n + 1];
         }
         _uiBuffers[num] = buffer;
     }
 }
 private bool uiBuffersContains(UIBuffer buffer)
 {
     return(uiBuffersContains(buffer.buffer));
 }
 private void uiBuffersRemove(UIBuffer buffer)
 {
     uiBuffersRemove(buffer.buffer);
 }