Unity教程之-unity3d关于断点下载和整个下载(用于更新)

 

断点续传和断点下载想必大家都熟悉,那么在unity中有啥用处呢,比如有时候我们在做更新的时候,数据包比较大,如果网络不稳定很容易造成下载中断,那么这个时候断点下载就可以派上用场了,那么本节unity教程我们就来学习下unity中文件断点下载的实现,废话不说,贴上代码!


//unity3d 关于断点下载和整个下载(用于更新),有需要的朋友可以参考下。

stringt="";
//整体下载
IEnumeratordownfile(stringurl,stringLocalPath,UILabelDesLable)
{
Uriu=newUri(url);
HttpWebRequestmRequest=(HttpWebRequest)WebRequest.Create(u);
mRequest.Method="GET";
mRequest.ContentType="application/x-www-form-urlencoded";

HttpWebResponsewr=(HttpWebResponse)mRequest.GetResponse();

StreamsIn=wr.GetResponseStream();
FileStreamfs=newFileStream(LocalPath,FileMode.Create,FileAccess.Write);

longlength=wr.ContentLength;
longi=0;
decimalj=0;

while(i<length)
{
byte[]buffer=newbyte[1024];
i+=sIn.Read(buffer,0,buffer.Length);
fs.Write(buffer,0,buffer.Length);

if((i%1024)==0)
{
j=Math.Round(Convert.ToDecimal((Convert.ToDouble(i)/Convert.ToDouble(length))*100),4);
t="当前下载文件大小:"+length.ToString()+"字节当前下载大小:"+i+"字节下载进度"+j.ToString()+"%";
DesLable.text=t.ToString();
}
else
{
t="当前下载文件大小:"+length.ToString()+"字节当前下载大小:"+i+"字节";
DesLable.text=t.ToString();
}

yieldreturnfalse;


}

sIn.Close();
wr.Close();
fs.Close();

}
string downloadString="已经下载";
//断点下载
IEnumeratorFPointDown(stringuri,stringsaveFile,UILabelDesLable,UISpriteLoadSprite)
{
//打开网络连接
System.Net.HttpWebRequestrequest=(System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(uri);
System.Net.HttpWebRequestrequestGetCount=(System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(uri);
longcountLength=requestGetCount.GetResponse().ContentLength;

//打开上次下载的文件或新建文件
longlStartPos=0;
System.IO.FileStreamfs;
if(System.IO.File.Exists(saveFile))
{
fs=System.IO.File.OpenWrite(saveFile);
lStartPos=fs.Length;
if(countLength-lStartPos<=0)
{
fs.Close();
t="已经";
DesLable.text=t.ToString();
yieldbreak;
}
fs.Seek(lStartPos,System.IO.SeekOrigin.Current);//移动文件流中的当前指针
}
else
{
fs=newSystem.IO.FileStream(saveFile,System.IO.FileMode.Create);
}


if(lStartPos>0)
{
request.AddRange((int)lStartPos);//设置Range值
print(lStartPos);
}

//向服务器请求,获得服务器回应数据流
System.IO.Streamns=request.GetResponse().GetResponseStream();
intlen=1024*8;

byte[]nbytes=newbyte[len];
intnReadSize=0;
nReadSize=ns.Read(nbytes,0,len);
while(nReadSize>0)
{
fs.Write(nbytes,0,nReadSize);
nReadSize=ns.Read(nbytes,0,len);
t=downloadString+":"+fs.Length/1024+"kb/"+countLength/1024+"kb"+"----"+((double)fs.Length/countLength).ToString()+"%";


yieldreturnfalse;
}
ns.Close();
fs.Close();
//这里放更新安装代码,或者可以测试这个下载的包有没有出错,验证sha和md5


}

好了,本节unity教程到此结束,感谢您的围观!希望您喜欢