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); }