在 Unity C# WWW 中显示进度条

2023-12-28

我有这段代码可以从服务器下载视频,但我需要显示进度条,这可能吗? 我知道我不能有 WriteAllBytes 的进度条

 private IEnumerator DownloadStreamingVideoAndLoad(string strURL)
{
    strURL = strURL.Trim();

    Debug.Log("DownloadStreamingVideo : " + strURL);

    WWW www = new WWW(strURL);

    yield return www;

    if (string.IsNullOrEmpty(www.error))
    {

        if (System.IO.Directory.Exists(Application.persistentDataPath + "/Data") == false)
            System.IO.Directory.CreateDirectory(Application.persistentDataPath + "/Data");

        string write_path = Application.persistentDataPath + "/Data" + strURL.Substring(strURL.LastIndexOf("/"));

        System.IO.File.WriteAllBytes(write_path, www.bytes);

    }
    else
    {
        Debug.Log(www.error);

    }

    www.Dispose();
    www = null;
    Resources.UnloadUnusedAssets();
}

1)对于WWW进度,可以使用WWW.progress属性,http://docs.unity3d.com/ScriptReference/WWW-progress.html http://docs.unity3d.com/ScriptReference/WWW-progress.html,代码是这样的:

private IEnumerator ShowProgress(WWW www) {
    while (!www.isDone) {
        Debug.Log(string.Format("Downloaded {0:P1}", www.progress));
        yield return new WaitForSeconds(.1f);
    }
    Debug.Log("Done");
}

private IEnumerator DownloadStreamingVideoAndLoad(string strURL)
{
    strURL = strURL.Trim();

    Debug.Log("DownloadStreamingVideo : " + strURL);

    WWW www = new WWW(strURL);

    StartCoroutine(ShowProgress(www));

    yield return www;

    // The rest of your code
}

2)如果你真的想要进步WriteAllBytes,分块写入文件,并报告每个块的进度,例如:

private void WriteAllBytes(string fileName, byte[] bytes, int chunkSizeDesired = 4096) {
    var stream = new FileStream(fileName, FileMode.Create);
    var writer = new BinaryWriter(stream);

    var bytesLeft = bytes.Length;
    var bytesWritten = 0;
    while(bytesLeft > 0) {
        var chunkSize = Mathf.Min(chunkSizeDesired, bytesLeft);
        writer.Write(bytes, bytesWritten, chunkSize);
        bytesWritten += chunkSize;
        bytesLeft -= chunkSize;

        Debug.Log(string.Format("Saved {0:P1}", (float)bytesWritten / bytes.Length));
    }
    Debug.Log("Done writing " + fileName);
}

话虽如此,我个人甚至不会费心这样做 - 与下载时间相比,写入时间微不足道,您实际上并不需要为此取得进展。

3)对于暂停按钮,没有办法用WWW类来实现。一般来说,这不是一件容易的事情,并且不适用于任何服务器。假设您使用 http,您将需要使用 If-Range 标头访问服务器(假设服务器支持此功能),以从您上次停止下载的位置获取文件部分。你可以从这里开始http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.27 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.27, 和这里,这里还有一些可能对您有帮助的示例:

在我的下载器中添加暂停和继续功能 https://stackoverflow.com/questions/15995705/adding-pause-and-continue-ability-in-my-downloader

请注意,在 Unity 中使用 System.Net 库可能无法在某些平台上运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Unity C# WWW 中显示进度条 的相关文章

  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • C# 方法重载决策不选择具体的泛型覆盖

    这个完整的 C 程序说明了这个问题 public abstract class Executor
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 当事件button.click发生时,如何获取按钮名称/标签?

    我以编程方式制作按钮并将它们添加到堆栈面板中 以便每次用户导航到页面时按钮都会发生变化 我正在尝试做这样的事情 当我单击创建的按钮时 它将获取按钮的标签并转到正确的页面 但是 我无法使用 RoutedEventHandler 访问按钮元素
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 已发布的 .Net Core 应用程序警告安装 .Net Core,但它已安装

    我制作了一个 WPF 和控制台应用程序 供某人在我无法访问的私人服务器上使用 我使用 Visual Studio 2019 的内置 发布向导 来创建依赖于框架的单文件应用程序 当该人打开 WPF 应用程序时 他们会看到标准警告 他们单击 是
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 在 C 中使用枚举而不是 #defines 作为编译时常量是否合理?

    在 C 工作了一段时间后 我将回到 C 开发领域 我已经意识到 在不必要的时候应该避免使用宏 以便让编译器在编译时为您做更多的工作 因此 对于常量值 在 C 中我将使用静态 const 变量或 C 11 枚举类来实现良好的作用域 在 C 中
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 将函数参数类型提取为参数包

    这是一个后续问题 解包 元组以调用匹配的函数指针 https stackoverflow com questions 7858817 unpacking a tuple to call a matching function pointer
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • 为什么空循环使用如此多的处理器时间?

    如果我的代码中有一个空的 while 循环 例如 while true 它将把处理器的使用率提高到大约 25 但是 如果我执行以下操作 while true Sleep 1 它只会使用大约1 那么这是为什么呢 更新 感谢所有精彩的回复 但我

随机推荐

  • 如何防止 Tkinter 窗口在被调用之前打开?

    当我运行此脚本时 会出现两个窗口 一个用于文件选择 另一个窗口用于 Tkinter 窗口 如何更改此设置 以便 Tkinter 窗口仅在选择文件后打开 谢谢 def main my file askopenfilename stage1 d
  • 在通过桥接的 docker 容器中时无法访问 SSL IP。获取 SSL_ERROR_SYSCALL

    我在通过 IP TLS 连接到任何服务器时遇到问题 但仅在 默认 网桥中运行时从 Docker 容器内连接 我总是得到 OpenSSL SSL connect SSL ERROR SYSCALL in connection to W X Y
  • C# 中的 IPC,将文本从一个 exe 发送到另一个 exe

    我想将消息从 WPF 应用程序的文本框发送到打开的记事本 我的意思是 单击文本框旁边的按钮后 我希望将内容写入记事本 如何在两个不同的应用程序之间发送消息 DllImport user32 dll EntryPoint FindWindow
  • 有没有办法在运行时加载类 jar 和包?

    我想知道是否有办法在运行时加载类和jar 绝对 创建一个合适的ClassLoader实例 例如使用URL类加载器 http java sun com javase 6 docs api java net URLClassLoader htm
  • Pandas - Python - 如何减去两个不同的日期列

    尝试用今天的日期减去created date列来填充列 但出现以下错误 TypeError unsupported operand type s for str and str import datetime now datetime da
  • 连接 Haskell 和 C++

    我想在 C 程序中调用一些 Haskell 函数 为此 我已申请these https github com jarrett cpphs说明并将其调整为我的代码和系统 我目前所掌握的内容如下 主程序 cpp 共享头文件和cpp文件 make
  • 在 setup.cfg 中嵌套或组合 setuptools 的 extras_require

    是否可以重用已在中指定的依赖项 options extras require 对于其他条目 options extras require 举例来说 一个开发团队正在使用mypy在开发过程中检查它们的类型注释 以及black自动格式化他们的代
  • 我在哪里可以获得 VB6 IDE [重复]

    这个问题在这里已经有答案了 可能的重复 如何编译旧版 VB6 代码 https stackoverflow com questions 229868 how to compile legacy vb6 code 在哪里可以找到 VB6 的
  • 生成拼写错误的单词(打字错误)

    我已经实现了模糊匹配算法 我想使用一些带有测试数据的示例查询来评估其召回率 假设我有一个包含文本的文档 text The quick brown fox jumps over the lazy dog 我想看看是否可以通过测试诸如 sox
  • 如何在 CentOS 7 中安装 pip?

    CentOS 7 EPEL 现在包含 Python 3 4 yum install python34 然而 当我尝试这样做时 即使 Python 3 4 安装成功 它似乎也没有安装 pip 这很奇怪 因为pipPython 3 4 应该默认
  • 谷歌财经 API 从 2017 年 9 月 6 日起不再工作

    我使用谷歌金融 API 来获取股票报价并在我的网站上显示内容 从 2017 年 9 月 6 日起 此功能突然停止工作 我用来获取股票报价的网址是 以前 我使用的是雅虎财经 API 它不一致 所以 我切换到了谷歌金融API 你能帮我解决这个问
  • 在功能组件中使用回调来响应 setState

    我在类组件中编写了一个非常简单的示例 setErrorMessage msg this setState error message msg gt setTimeout gt this setState error message 5000
  • 更改 valueBoxes 的字体大小

    我想更改值的字体大小和副标题valueBoxes 以下是我的尝试 但对于如何以类似于默认外观的方式更改它的任何建议 我将不胜感激 下面是我的可重现的例子 require shinydashboard valueBox2 lt functio
  • 将表达式树解析为嵌套列表

    我对 F 比较陌生 在解析包含嵌套列表的表达式树时确实遇到了困难 根据网上的零碎资料 我拼凑了以下内容 我的标准类型定义为 type Return Real of float Func of string Return list 我对外部应
  • 将 bcrypt 添加到 package.json 时,如何解决使用 docker node alpine Image 时“找不到任何可使用的 Python 安装”的问题?

    在我将 bcrypt 添加到 package json 之前 一切正常 现在 我收到以下错误消息 这是我的 package json 的摘录 dependencies bcrypt 3 0 6 express 4 17 1 mongodb
  • 自定义属性:必须是明显我做错的事情

    我一直在添加不同实体的部分类 以毫无问题地添加各种有用的方法 根据我见过的示例 尝试添加属性似乎很简单 但我的失败得很惨 Updated例子 public List
  • 在javascript中识别firefox浏览器的选定选项卡URL

    我正在开发一个网络应用程序 我有兴趣获取选定的选项卡 URL 我正在使用火狐浏览器 我通过执行以下 javascript 语句实现了这一点 Get the URL of page which is currently loaded in a
  • 带 CASE 条件和 SUM() 的 SELECT 查询

    我目前正在使用这些sql语句 我的表有 CPaymentType 字段 其中包含 现金 或 支票 我可以通过执行 2 个 SQL 语句来汇总付款金额 如下所示 在这种情况下 用户甚至不会注意到执行2条sql语句或仅执行1条sql语句时的速度
  • JS原型与继承

    在业余时间我尝试学习一点 JS 但我还是坚持主题中的主题 var person new Person Bob Smith 52 var teacher new Teacher Adam Greff 209 function Humans f
  • 在 Unity C# WWW 中显示进度条

    我有这段代码可以从服务器下载视频 但我需要显示进度条 这可能吗 我知道我不能有 WriteAllBytes 的进度条 private IEnumerator DownloadStreamingVideoAndLoad string strU