/// <summary> /// 移除数据AB对象,释放WWW /// </summary> /// <param name="path"></param> /// <param name="isForceUnload">是否强制Unload。强制释放,不计数引用计数</param> /// <param name="unloadUsedObjects">是否Unload 所有资源 包括正在使用的</param> public void RemoveAssetBundle(string path, bool isForceUnload = false, bool unloadUsedObjects = false) { if (this._dataList == null || !this._dataList.ContainsKey(path)) { return; } VOAssetInfo resInfo = this._dataList[path]; if (resInfo != null) { if (LoadThreadManager.showDebug) { Log.info("ResDataManager::RemoveAssetBundle 清除资源!path " + path); } // 释放引用的资源 if (resInfo.www != null && resInfo.www.assetBundle != null) { resInfo.www.assetBundle.Unload(unloadUsedObjects); } resInfo.Dispose(); resInfo = null; } this._dataList.Remove(path); }
/// <summary> /// 直接加载Audio的获取方式 /// </summary> /// <param name="path"></param> /// <param name="isClear"></param> /// <returns></returns> public AudioClip GetAudioClip(string path, bool isClear = true) { #region 走本地读取 if (!ResLoadTool.isByWWWLoad && this._editorDataDict.ContainsKey(path)) {//如果是Bytes if (ResTypeEnum.AUDIO == GetResType(path)) { AudioClip audio = this._editorDataDict[path] as AudioClip; return(audio); } } #endregion if (this._dataList == null || !this._dataList.ContainsKey(path)) { return(null); } VOAssetInfo resInfo = this._dataList[path]; AudioClip clip = null; if (resInfo != null) { clip = resInfo.www.audioClip; if (isClear) { this.RemoveAssetBundle(path, true); } } return(clip); }
/// <summary> /// 直接加载txt 获取字符串 /// </summary> /// <param name="path"></param> /// <param name="isClear"></param> /// <returns></returns> public string GetDataText(string path, bool isClear = true) { #region 走本地读取 if (!ResLoadTool.isByWWWLoad && this._editorDataDict.ContainsKey(path)) {//如果是文本 if (ResTypeEnum.TEXT == GetResType(path)) { TextAsset txtAsset = this._editorDataDict[path] as TextAsset; if (txtAsset != null) { this._editorDataDict.Remove(path); return(txtAsset.text); } } } #endregion if (this._dataList == null || !this._dataList.ContainsKey(path)) { return(""); } string data = ""; VOAssetInfo resInfo = this._dataList[path]; if (resInfo != null) { data = resInfo.www.text; if (isClear) { this.RemoveAssetBundle(path, true); } } return(data); }
/// <summary> /// 加载完成后操作 /// </summary> /// <param name="resLoader"></param> /// <param name="www"></param> private void LoaderOperater(ResLoader resLoader, WWW www) { if (resLoader == null) { return; } ResLoaderOrder resLoaderOrder = this.GetWwwLoaderOrderByOrderName(resLoader.ownerId); if (resLoaderOrder == null) { return; } bool existsStatus = ResDataManager.instance.ExistWWWData(resLoader.stResPath.path); if (!existsStatus) { VOAssetInfo resInfo = new VOAssetInfo(www, resLoader.stResPath.path, resLoader.stResPath.tag); if (www != null) { ResDataManager.instance.InsertWWWData(resInfo); } else { if (LoadThreadManager.showDebug) { Log.info("ResLoaderManager::InsertWWWData www is Null!!"); } } } //刷新队列加载情况 resLoaderOrder.UpdateLoaderOrderState(resLoader.stResPath); //加载完成,析构resLoader,解除loaderItem监听 resLoader.UnLoader(this.OnProgressHandler, this.OnCompleteHandler, this.OnErrorHandler, false); //更新当前队列进度 UpdateListProgressHanler(resLoaderOrder); //触发单个文件完成 resLoaderOrder.InvokeLoaderFileComplete(resLoader.stResPath.path); //如果队列完成通知结束 if (resLoaderOrder.IsFinished()) { this._orderList.Remove(resLoaderOrder); resLoaderOrder.InvokeLoaderListComplete(); resLoaderOrder.Dispose(); resLoaderOrder = null; } //next LoadThreadManager.instance.CheckQueue(); }
/// <summary> /// 获取资源tag /// </summary> /// <param name="path"></param> /// <returns></returns> private ResTag GetResTagByPath(string path) { if (this._dataList == null || !this._dataList.ContainsKey(path)) { return(ResTag.None); } VOAssetInfo resInfo = this._dataList[path]; if (resInfo != null) { return(resInfo.tag); } return(ResTag.None); }
/// <summary> /// 添加数据到缓存 /// </summary> /// <param name="wwwData">Www data.</param> public void InsertWWWData(VOAssetInfo resInfo) { if (resInfo == null) { if (LoadThreadManager.showDebug) { Log.info("ResDataManager::InsertWWWData resInfo is Null!"); } return; } if (LoadThreadManager.showDebug) { Log.info("ResDataManager::InsertWWWData " + resInfo.path); } this._dataList.Add(resInfo.path, resInfo); }
/// <summary> /// 获取 AssetBundle 对象 (不对外公开此方法) /// </summary> /// <returns>The data asset bundle.</returns> /// <param name="path">Path.</param> /// <param name="loaderTypeEnum">Loader type enum.</param> private AssetBundle GetDataAssetBundle(string path) { if (this._dataList == null || !this._dataList.ContainsKey(path)) { //if (LoadThreadManager.showDebug) Log.info("ResDataManager:: dataList containsKey is False, key:" + path); return(null); } VOAssetInfo resInfo = this._dataList[path]; if (resInfo != null) { if (resInfo.www == null) { //if (LoadThreadManager.showDebug) Log.info("ResDataManager:: resInfo.www is Null!"); return(null); } return(resInfo.www.assetBundle); } //if (LoadThreadManager.showDebug) Log.info("ResDataManager:: resInfo is Null!"); return(null); }
/// <summary> /// 直接加载bytes 获取 Bytes 对象 /// </summary> /// <param name="path"></param> /// <param name="isClear"></param> /// <returns></returns> public byte[] GetDataBytes(string path, bool isClear = true) { #region 走本地读取 if (!ResLoadTool.isByWWWLoad && this._editorDataDict.ContainsKey(path)) {//如果是Bytes if (ResTypeEnum.BTYES == GetResType(path)) { TextAsset txtAsset = this._editorDataDict[path] as TextAsset; if (txtAsset != null) { byte[] bytesTmp = new byte[txtAsset.bytes.Length]; Array.Copy(txtAsset.bytes, 0, bytesTmp, 0, txtAsset.bytes.Length); this._editorDataDict.Remove(path); return(bytesTmp); } } } #endregion if (this._dataList == null || !this._dataList.ContainsKey(path)) { return(null); } byte[] bytesNew = null; VOAssetInfo resInfo = this._dataList[path]; if (resInfo != null) { bytesNew = new byte[resInfo.www.bytes.Length]; Array.Copy(resInfo.www.bytes, 0, bytesNew, 0, resInfo.www.bytes.Length); if (isClear) { this.RemoveAssetBundle(path, true); } } return(bytesNew); }