资源下载
DownloadMgr 普通类单例
AssetBundleDownload 继承mono单例
AssetBundleDownloadRoutine 继承mono的脚本
DownloadDataEntity 自定义数据实体
资源下载流程:
1.检查持久化路径下是否有版本文件,如果有检查资源更新,如果没有检查streaming路径是否有版本文件,如果没有检查资源更新,如果有将streaming路径下文件解压到持久化路径
public class DownloadDataEntity{public string FullName;public string MD5;public int Size;public bool IsFirstData;}private IEnumerator DownloadData() { if (NeedDownloadCount == 0) yield break; m_CurrDownloadData = m_List[0];//当前正在下载的实体 //服务器上的资源下载路径 string dataUrl = DownloadMgr.DownloadUrl m_CurrDownloadData.FullName; int index = m_CurrDownloadData.FullName.LastIndexOf('\\'); string shortPath = m_CurrDownloadData.FullName.Substring(0, index);//短路径 用于创建文件夹 string localFolderPath = Application.persistentDataPath "/" shortPath;//得到本地路径 即在客户端本地当前下载文件存放的文件夹路径 if (!Directory.Exists(localFolderPath)) { Directory.CreateDirectory(localFolderPath); } WWW www = new WWW(dataUrl); float timeout = Time.time; float progress = www.progress; while (www != null && www.isDone == false) { if (progress < www.progress) { timeout = Time.time; progress = www.progress; m_CurrDownloadSize = (int)(m_CurrDownloadData.Size * progress);//当前正在下载的文件 已经下载好的大小 } if ((Time.time - timeout) > DownloadMgr.DownloadTimeOut) { AppDebug.LogError("download fail!"); yield break; } yield return null;//一定要等一帧 否则会卡死 } yield return www; if (www != null && www.error == null) { using (FileStream fs = new FileStream(DownloadMgr.Instance.LocalFilePath m_CurrDownloadData.FullName, FileMode.Create, FileAccess.ReadWrite)) { fs.Write(www.bytes, 0, www.bytes.Length); } } //下载成功 m_CurrDownloadSize = 0;//当前正在下载的文件已经下载完毕 此刻没有正在下载的文件 m_DownloadSize = m_CurrDownloadData.Size;//总下载文件大小 加上刚刚下载完毕的文件大小 //写入本地版本文件 DownloadMgr.Instance.ModifyLocalData(m_CurrDownloadData); m_List.RemoveAt(0);//将已经下载完成的对象从需要下载列表移除 CompletedCount ;//已经下载完成的数量加一 if (m_List.Count == 0)//需要下载列表为空 { m_List.Clear(); } else//需要下载列表不为空 继续下载 { IsStartDownload = true; } }
赞 (0)