Skip to the content.

目录

下载网络文件

unity自带的WWW类下载文件的时候,只能将文件整个缓存到内存。如果下载的文件过大,会对内存造成很大的开销。为了节省内存,我们对更底层的System.Net.WebRequest进行了封装用来直接将文件从网络下载到硬盘上,并且只需要占用很少的内存。

单个文件的下载

通过使用Jing.Downloader类,可以将网络文件下载到本地。使用方法可以参考Zero.SettingUpdate类。使用方法和WWW类几乎一致,都通过isDone、progress、error等属性来判断下载的状况。只是初始化的方法略有不同。

/// <summary>
/// 初始化下载类
/// </summary>
/// <param name="url">下载文件的URL地址</param>
/// <param name="savePath">保存文件的本地地址</param>
/// <param name="version">URL对应文件的版本号</param>
public Downloader(string url, string savePath, string version = null)

多个文件的队列下载

通过使用Jing.GroupDownloader,我们可以将一组资源按照添加的顺序依次下载。使用方法可以参考Zero.ResUpdate类。

//实例化一个资源组下载器
GroupDownloader groupLoader = new GroupDownloader();
foreach (var itemName in itemSet)
{
    string localVer = Runtime.Ins.localResVer.GetVer(itemName);
    var netItem = Runtime.Ins.netResVer.Get(itemName);

    if (localVer != netItem.version)
    {
        //将要下载的文件依次添加入下载器
        groupLoader.AddLoad(Runtime.Ins.netResDir + itemName, Runtime.Ins.localResDir + itemName, netItem.version, OnItemLoaded, netItem);
    }
}
//启动下载器开始下载
groupLoader.StartLoad();

//判断是否所有资源下载完成,如果没有,返回一个下载的进度(该进度表示的整体进度)
do
{
    _onProgress.Invoke(groupLoader.progress);
    yield return new WaitForEndOfFrame();
}
while (false == groupLoader.isDone);

//判断下载是否返回错误
if (null != groupLoader.error)
{
    Log.E("下载出错:{0}", groupLoader.error);
    yield break;
}

Zip文件解压

当我们在本地存在一个Zip文件,需要将其中的内容解压出来使用的时候,可以使用Zero.ZipHelper类对文件进行解压。

你可以直接解压压缩文件数据

/// <summary>
/// 解压文件
/// </summary>
/// <param name="bytes">二进制数据</param>
/// <param name="targetDir">解压目录</param>
public void UnZip(byte[] bytes, string targetDir)

也可以通过指定文件的地址进行解压

/// <summary>
/// 解压文件
/// </summary>
/// <param name="zipFile">压缩文件路径</param>
/// <param name="targetDir">解压目录</param>
public void UnZip(string zipFile, string targetDir)

具体使用方法可以参考Zero.PackageUpdate类

ZipHelper zh = new ZipHelper();
zh.UnZip(www.bytes, Runtime.Ins.localResDir);
while (false == zh.isDone)
{
    onProgress((zh.progress * 0.5f) + 0.5f);
    yield return new WaitForEndOfFrame();
}

Log打印

Zero为了方便自己封装了Zero.Log类来打印内容。并且可通过Preload配置Runtime的LogEnable属性来控制打印的开关。

你也可以方便的合成含有颜色的文字内容。