描述
对于一个网络游戏来说,下载网络上面的文件一定是必不可少的一个功能,例如更新资源包。在Unity中,我们可以用系统的WWW或者HttpWebRequest来实现文件的下载。其中有些较大的文件下载需要断点续传的功能(即下载了一部分突然中断下载后,再次下载直接从上次下载的地方继续下载,而不是重新下载),需要使用HttpWebRequest。
这一篇我们主要就讲一讲这两种下载方式的实现(主要都是代码)。
基类
首先先创建一个基类,里面存放下载需要的一些数据,例如文件url,下载存放路径等等。
public abstract class DownloadItem {
/// <summary>
/// 网络资源url路径
/// </summary>
protected string m_srcUrl;
/// <summary>
/// 资源下载存放路径,不包含文件名
/// </summary>
protected string m_savePath;
/// <summary>
/// 文件名,不包含后缀
/// </summary>
protected string m_fileNameWithoutExt;
/// <summary>
/// 文件后缀
/// </summary>
protected string m_fileExt;
/// <summary>
/// 下载文件全路径,路径+文件名+后缀
/// </summary>
protected string m_saveFilePath;
/// <summary>
/// 原文件大小
/// </summary>
protected long m_fileLength;
/// <summary>
/// 当前下载好了的大小
/// </summary>
protected long m_currentLength;
/// <summary>
/// 是否开始下载
/// </summary>
protected bool m_isStartDownload;
public bool isStartDownload {
get {
return m_isStartDownload;
}
}
public DownloadItem(string url, string path) {
m_srcUrl = url;
m_savePath = path;
m_isStartDownload = false;
m_fileNameWithoutExt = Path.GetFileNameWithoutExtension(m_srcUrl);
m_fileExt = Path.GetExtension(m_srcUrl);
m_saveFilePath = string.Format("{0}/{1}{2}", m_savePath, m_fileNameWithoutExt, m_fileExt);
}
/// <summary>
/// 开始下载
/// </summary>
/// <param name="callback">下载完成回调</param>
public virtual void StartDownload(Action callback = null) {
if(string.IsNullOrEmpty(m_srcUrl) || string.IsNullOrEmpty(m_savePath)) {
return;
}
//若存放目录不存在则创建目录
FileTool.CreateDirectory(m_saveFi