public void DelRef() { this.m_RefCount--; if (0 >= this.m_RefCount) { this.m_RefCount = 0; } AssetLogger.Debug(string.Format("DelRef[{0}]:{1}", this.m_RefCount, this.URL)); }
/// <summary> /// 释放已经加载的资源 /// </summary> /// <param name="value"></param> protected void Dispose(bool value) { //如果已经释放了,就说明也不做 if (this.m_isDispose) { return; } if (value) { LocalAssetResource.s_hashSetAssetURL.Remove(this.URL); string text = Path.GetFileName(this.URL.ToLower()); //取得指定url路径的文件名+后缀名 if (!LocalAssetResource.s_hashSetAssetName.Remove(text)) //移除失败 { AssetLogger.Error("s_hashSetAssetName.Remove(strAssetName) == false: " + text); } if (this.m_AssetBunle != null) { if (LocalAssetResource.m_dicAllAssetResource.ContainsKey(this.m_url)) { LocalAssetResource.m_dicAllAssetResource.Remove(this.m_url); } Debug.Log("Assetbundle卸载完全"); this.m_AssetBunle.Unload(true); //卸载assetbundle上所有的资源 this.m_AssetBunle = null; this.m_MainAsset = null; //设置MainAsset为null,过段时间会被回收 AssetLogger.Debug(string.Format("Unload:[{0}]", this.URL)); //卸载成功 } else { if (this.m_MainAsset != null) { if (this.m_MainAsset is GameObject || this.m_MainAsset is Component) { UnityEngine.Object.DestroyImmediate(this.m_MainAsset, true); } } else { Resources.UnloadAsset(this.m_MainAsset); } this.m_MainAsset = null; } if (this.m_www != null) { this.m_www.Dispose();//释放www的资源 this.m_www = null; } this.m_bCancel = true; } this.m_isDispose = true;//设置释放成功 }
public IAssetRequest CreateAssetRequest(ResourceData resourceData, List <ResourceData> depResourceList, AssetRequestFinishedEventHandler callback, AssetPRI assetPRI) { if (resourceData == null) { return(null); } AssetLogger.Debug("CreateAssetRequest:" + resourceData.mResourceName); if (string.IsNullOrEmpty(resourceData.mPath)) { return(null); } LocalAssetCollectDepResource depResource = null; if (this.m_dicAssetCollectDepResource.TryGetValue(resourceData.mPath, out depResource)) { return(new LocalAssetRequest(depResource, callback)); } depResource = LocalAssetCollectDepResource.Create(); depResource.URL = resourceData.mPath; this.m_dicAssetCollectDepResource.Add(depResource.URL, depResource); if (depResourceList != null) { depResource.SetDepSize(depResourceList.Count);//初始化depAssetResource[],引用资源的数组 for (int i = 0; i < depResourceList.Count; i++) { ResourceData resourceData2 = depResourceList[i]; Debug.Log(resourceData2.mResourceName); LocalAssetResource assetResource = this.CreateAssetResource(resourceData2, new AssetLoadFinishedEventHandler(depResource.AssetComplete), assetPRI); depResource.AddDep(assetResource, i);//赋值depAssetResource[] Debug.Log(assetResource == null); } } LocalAssetResource asset = this.CreateAssetResource(resourceData, new AssetLoadFinishedEventHandler(depResource.AssetComplete), assetPRI); depResource.SetAsset(asset); depResource.EndCreate(); return(new LocalAssetRequest(depResource, callback)); }
public void DetectComplete() { if (!this.m_HasCallBack && this.DetectAllHasFinished()) { if (this.m_assetResource != null) { AssetLogger.Debug("Asset: DetectComplete:" + this.m_assetResource.URL); } else { AssetLogger.Error("Asset: DetectComplete: null == m_assetResource"); } this.m_HasCallBack = true; //设置加载完成 this.DebugError(); //打印出出错的资源 this.LoadMainAsset(); /*Debug.Log("Main:" + this.m_assetResource.MainAsset); * for (int j = 0; j < this.m_depAssetResources.Length; j++) * { * Debug.Log("dep:" + this.m_depAssetResources[j].MainAsset); * } */ try { for (int i = 0; i < this.m_listAssetRequest.Count; i++) { LocalAssetRequest request = this.m_listAssetRequest[i]; request.OnAssetRequestFinishedHandler(this.m_assetResource);//执行资源加载完成之后的委托 } } catch (Exception e) { AssetLogger.Fatal(e.ToString()); } this.UnloadAssetBundle(); } }
/// <summary> /// 增加被引用次数 /// </summary> public void AddRef() { this.m_RefCount++; AssetLogger.Debug(string.Format("AddRef[{0}]:{1}", this.m_RefCount, this.URL)); }
/// <summary> /// 开始加载assetbundle,通过本地url从内存中加载 /// </summary> public void BeginDownload() { this.m_dataBeginLoadTime = DateTime.Now; try { AssetLogger.Debug("BeginDownLoad:" + this.URL); this.m_isBeginDownload = true; if (LocalAssetResource.s_hashSetAssetURL.Contains(this.URL))//已经加载过了 { AssetLogger.Error("s_hashSet.Contains(m_strAssetUrl) == true: " + this.URL); this.m_isDone = true; } else { string text = Path.GetFileName(this.URL).ToLower(); //取得要加载的资源名(小写) if (!LocalAssetResource.s_hashSetAssetName.Add(text)) //添加资源名到资源名集合中 { AssetLogger.Error(string.Format("s_hashSetAssetName.Add(strAssetName) == false:{0}", text)); //添加失败 } if (!this.m_url.EndsWith(".unity3d")) { string text2 = this.URL; if (this.URL.IndexOf("file:///") == 0) { text2 = this.URL.Substring(8); } FileInfo fileInfo = new FileInfo(text2); if (fileInfo.Exists) { /*FileStream fileStream = fileInfo.OpenRead();//打开文件流 * Debug.Log("doload"+fileStream.Length); * byte[] array = new byte[fileStream.Length]; * fileStream.Read(array, 0, (int)fileStream.Length);//读取资源 * fileStream.Close(); * this.m_AssetBunle = AssetBundle.CreateFromMemoryImmediate(array);//从内存中创建assetbundleCreateRequest,这个比较占内存,虽然是异步的 */ this.m_AssetBunle = AssetBundle.CreateFromFile(text2); if (!LocalAssetResource.m_dicAllAssetResource.ContainsKey(this.m_url)) { LocalAssetResource.m_dicAllAssetResource.Add(this.m_url, this); if (LocalAssetResource.m_dicAllAssetResource.Count == 200) { AssetLogger.Debug(string.Format("AssetBundle count Exceed 200, it is dangerous!", new object[0])); } } this.m_isDone = true; } else { //不存在文件资源,报错 AssetLogger.Error(string.Format("fileInfo.Exists == false:{0}", text2)); this.m_isDone = true; } } else { //如果平台不是windows,那么就用www来加载资源 AssetLogger.Debug("Scene: BeginDownLoad:" + this.URL); this.m_www = new WWW(this.URL); } LocalAssetResource.s_hashSetAssetURL.Add(this.URL);//加载完成之后,把资源的url添加到url集合中 } } catch (Exception e) { AssetLogger.Fatal(e.ToString()); this.m_isDone = true; } }