相信大家会经常遇到在游戏中需要WWW从本地或者服务器上获取数据,而我们通常容易会犯下面这种个错误:当数据较少或者网速较好时程序运行正常。而当数据较大或者网速不好时程序会出错误。比如卡住。

所以我们要使数据完全读完后再进行数据操作。本宝宝曾经在网上找到了貌似可以的代码:

         //检测文件是否存在
if (!File.Exists(appDBPath))
{
//如果文件不存在 拷贝数据库
StartCoroutine(CopyDataBase());
} private bool boo = true;
/// <summary>
/// 拷贝数据库
/// </summary>
IEnumerator CopyDataBase()
{
#if UNITY_STANDALONE_WIN || UNITY_EDITOR
//WWW 可以从本地或者服务器上获取数据
WWW loadDB = new WWW(Application.streamingAssetsPath + "/ARPG.db");
#elif UNITY_IPHONE
WWW loadDB = new WWW(Application.dataPath + "/Raw/" + "/ARPG.db");
#elif UNITY_ANDROID
WWW loadDB = new WWW("jar:file://" + Application.dataPath + "!/assets" + "/ARPG.db");
#endif
//返回loadDB
yield return loadDB;
//进行循环判断 假如boo为真 执行
while (boo)
{
//判断是否加载完毕 如果没完进入
if (loadDB.isDone)
{
//写入
File.WriteAllBytes(appDBPath, loadDB.bytes);
boo = false;
}
}
}

然而宝宝试过后发现并没有什么卵用   代码看起来很有逻辑 但是仔细想想,当在你开启协程后(5),代码会继续向下做,不管你协程里写的天花乱坠,然而和后面的代码毫无关系。

其实不用这么麻烦,双协程可以很好的解决这个问题:

 IEnumerator Start()
{
appDBPath = Application.streamingAssetsPath + "/ARPG.db";//地址
StartCoroutine(CopyDataBase());
yield return null;
} /// <summary>
/// 拷贝数据库
/// </summary>
public IEnumerator CopyDataBase()
{
#if UNITY_STANDALONE_WIN || UNITY_EDITOR
//WWW 可以从本地或者服务器上获取数据
WWW loadDB = new WWW(Application.streamingAssetsPath + "/ARPG.db");
#elif UNITY_IPHONE
WWW loadDB = new WWW(Application.dataPath + "/Raw/" + "/ARPG.db");
#elif UNITY_ANDROID
WWW loadDB = new WWW("jar:file://" + Application.dataPath + "!/assets" + "/ARPG.db");
#endif
//判断是否完成
while (loadDB.isDone)
{
yield return loadDB;
File.WriteAllBytes(appDBPath, loadDB.bytes);
}
}

是不是很简单啊 双协程中只有第二个协程结束后 第一个协程才会继续向下(个人理解 如果那里有错,请前辈们指正哦!)

Unity3d 通过协程来实现文件的全部加载后执行的更多相关文章

  1. UNITY所谓的异步加载几乎全部是协程,不是线程;MAP3加载时解压非常慢

    实践证明,以下东西都是协程,并非线程(thread): 1,WWW 2,AssetBundle.LoadFromFileAsync 3,LoadSceneAsync 其它未经测试 此问题的提出是由于一 ...

  2. IDEA -01 -忽略指定文件夹 -防止加载Vue-cli执行"npm install"命令后的项目时卡死

    问题描述 Vue的"npm install" 命令执行后,会生成一个很大的目录层次的"node_modules",文件十分繁多; idea加载这个项目下的文件夹 ...

  3. Unity3d之协程自实现测试

    using UnityEngine; using System.Collections; public class TestStartCoroutine : MonoBehaviour { IEnum ...

  4. 使用getScript()方法异步加载并执行js文件

    使用getScript()方法异步加载并执行js文件 使用getScript()方法异步请求并执行服务器中的JavaScript格式的文件,它的调用格式如下所示: jQuery.getScript(u ...

  5. 如何使用 require.js ,实现js文件的异步加载,避免网页失去响应,管理模块之间的依赖性,便于代码的编写和维护。

    一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载.下面的网页代 ...

  6. Javascript 文件的同步加载与异步加载

    HTML 4.01 的script属性 charset: 可选.指定src引入代码的字符集,大多数浏览器忽略该值.defer: boolean, 可选.延迟脚本执行,相当于将script标签放入页面b ...

  7. profile文件的错误加载与基本命令间的映射

    一.绪论 [因为这篇心得是原创的,所以如果有哪处总结或者意见不足的地方,欢迎各位大神的批评和意见,共同学习,谢谢了!] 早些时候,需要在centos6.4系统中配置单机版和集群版单节点的hadoop ...

  8. vue第七单元(vue的单文件组件形式-单文件组件的加载原理-vue-cli构建的开发环境以及生命周期)

    第七单元(vue的单文件组件形式-单文件组件的加载原理-vue-cli构建的开发环境以及生命周期) #课程目标 掌握安装 vue-cli 命令行工具的方法,掌握使用命令行在本地搭建开发环境,使用命令行 ...

  9. 本地修改配置hosts文件解决Github加载慢问题

    本地修改配置hosts文件解决Github加载慢问题 手动方式 hosts 文件在每个系统的位置不一,详情如下: Windows 系统:C:\Windows\System32\drivers\etc\ ...

随机推荐

  1. WEB Application Development Integrator : 应用设置

    1.1.       系统安装 应用 Oracle EBS WEB Application Development Integrator WEB ADI在Oracle EBS 11.5.10.* 版本 ...

  2. 自绘Tab控件

    自绘tab按钮效果图如下: 使用例子: MyTabControl *tabControl = NULL; tabControl = new MyTabControl();tabControl-> ...

  3. MyBitis(iBitis)系列随笔之五:多表(一对多关联查询)

    MyBitis(iBitis)系列随笔之一:MyBitis入门实例 MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM) MyBitis(iBitis ...

  4. android加载更多的图片

    这是昨天改进后的,我测试了下,可以加载图片到5万张,估计5万以上也是没问题的,我只试到5万,其实也没必要这么高,现实中1000左右就差不多了,不过我的应用到100就差不多了, package com. ...

  5. 【G-BLASTN 1.0正式发布】

    [G-BLASTN 1.0正式发布]G-BLASTN使用GPU来加速NCBI-BLAST里的BLASTN模块,单块GTX780比四核CPU平均快6倍. http://www.comp.hkbu.edu ...

  6. 关于group by的一段SQl语句——Oracle

    select cc.fformulacode, cc.rangedate, dd.fpervalue from (select n1.fformulacode, max(n1.frangedate) ...

  7. Java日期计算之Joda-Time

    http://rensanning.iteye.com/blog/1546652 Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time.可以利用它把JDK D ...

  8. 浅谈Spring(三)

    一.基础Spring的标准测试 1.导入spring与junit继承的jar 2.引入注解 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfig ...

  9. BZOJ 1066: [SCOI2007]蜥蜴( 最大流 )

    结点容量..拆点然后随便写 --------------------------------------------------------------- #include<cstdio> ...

  10. mvn command is not recognized as an internal or external command

    even though I have configured %m2_home% and %path% correctly, the command "mvn" is still n ...