IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> unity 断点续传 -> 正文阅读

[游戏开发]unity 断点续传

需求:当前需求是 需要客户端更新 ab 包的时候可以断点续传

原理:原理就是请求特定的 字节区域,比如:下载一个文件,第一次请求区域为0-10M的字节,第二次为10M-20M,这个区域跨度自己设置就行。当你第三次没下载完关闭app,再次下载的时候,只需要读取你没下载完成的文件(边下载变存本地的文件)字节长度,从这个长度开始请求下载就可以了

使用:用的是http协议下载,HTTP 方面,Apache 或 Ngnix 默认都是支持 Accept-Ranges 的,别的服务器需要你自己去处理。

核心代码:

????????string _url = "";
????????Dictionary<string, string> httpHead = new Dictionary<string, string>();
????????httpHead.Add("Range", "bytes=" + 请求其实位置+ "-" + 请求结束位置);
????????WWW?m_iWWW = new WWW(_url, null, httpHead);

实例:

?? ?void Start() {
????????StartCoroutine(RunWithContinue());
????}

????private WWW m_iWWW = null;
????private const int CHUNK_SIZE = 10 * 1024 * 1024; ?//断点续传时,每次请求10M
????private long m_nChunk = 0; ??????????????//在分段下载中,记录当前下载段的长度
????private long m_nContinueDownloaded = 0; ?//在分段下载中,记录当前下载文件已下载长度
????private IEnumerator RunWithContinue()
????{
????????int nStartPos = 0;
????????long nFileTotalLength = 102627178;

????????System.IO.FileStream fsTmpFile = System.IO.File.Create(@"E:\UnitySpace\Test\Assets\abc.zip");

????????while (nFileTotalLength > nStartPos)
????????{
????????????string _url = "";

????????????Dictionary<string, string> httpHead = new Dictionary<string, string>();
????????????httpHead.Add("Range", "bytes=" + nStartPos.ToString() + "-" + (nStartPos + CHUNK_SIZE).ToString());

????????????m_iWWW = new WWW(_url, null, httpHead);
????????????yield return StartCoroutine(WaitForWWWWithTimeOut(m_iWWW, 10)); // 替换成带超时的版本 [3/11/2014 yao]

????????????if (!m_iWWW.isDone || (m_iWWW.error != null && m_iWWW.error.Length > 0))
????????????{
????????????????Debug.Log("nStartPos:" + nStartPos + " CHUNK_SIZE:" + CHUNK_SIZE + " total:" + (nStartPos + CHUNK_SIZE));
????????????????Debug.LogError("error======" + m_iWWW.error);
????????????}

????????????try
????????????{
????????????????fsTmpFile.Write(m_iWWW.bytes, 0, m_iWWW.bytes.Length);
????????????}
????????????catch (System.Exception ex)
????????????{
????????????????Debug.LogError("Exception======");
????????????????break;
????????????}

????????????nStartPos += m_iWWW.bytes.Length;
????????????m_nContinueDownloaded = nStartPos;
????????????m_iWWW.Dispose();
????????????m_iWWW = null;
????????}

????????fsTmpFile.Close();
????????fsTmpFile = null;
????????Debug.LogError("结束");
????}

????private IEnumerator WaitForWWWWithTimeOut(WWW iWWW, float fTimeOut)
????{
????????float fWait = 0;
????????float fProgress = 0;
????????do
????????{
????????????//判断是否完成并等待
????????????if (iWWW.isDone)
????????????{
????????????????yield break;
????????????}
????????????yield return new WaitForSeconds(0.1f);

????????????//累计超时时间
????????????fWait += 0.1f;
????????????if (fWait > fTimeOut)
????????????{
????????????????yield break;
????????????}

????????????//如果进度走动了,则重新判断超时时间
????????????if (m_iWWW.progress > fProgress)
????????????{
????????????????fProgress = m_iWWW.progress;
????????????????fWait = 0;
????????????}
????????} while (true);
????}

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-10-28 12:39:48  更:2021-10-28 12:40:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 0:51:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码