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