unitycsharpC#

[Unity 3d] ZipReader For Unity

2019-06-11  本文已影响2人  雨落随风

GitHub 上的工程多如繁星,有些好的仓库,但凡不经意间错过了就很难找回,故稍作采撷,希望能帮助到有心人。
本文集以一个小的功能点为单位行文,也便于拾取罢!

简介:

笔者今天推荐的仓库叫 ZipReaderForUnity
从名字上看,就轻松知道它是 zip 读取工具啦,不过这个仓库有点硬核,因为它里面仅仅有一个脚本。
不过笔者推荐它,是希望对zip 解压有兴趣的可以以此为入口,开启你的大神学习之旅。

功能:

使用:

  1. 创建实例。
  2. 调用 Load()加载zip文件,使用 LoadFile() 加载zip中指定的文件。
  3. 使用 如下 API 获取zip文件内部结构:
    • .numFiles - 获取文件数
    • .getFiles() - 获取文件列表
    • .getFileRecord() - 获取文件记录
    • .getFileIndex() - 获取文件索引

演示:

zipReader

Tips:

以下为演示代码:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using UnityEngine;
using Zip;

public class TestReadZip : MonoBehaviour
{
    ZipReader reader;
    public string zipName;
    public bool printFileName = false;
    void Start()
    {
        reader = new ZipReader();
    }

    public void JieYa()
    {
        Debug.Log("Begin");
        reader.load(Path.Combine(Application.dataPath, zipName + ".zip"));
        Debug.Log(reader.numFiles);
        ListFileNames();
    }

    bool finish= false;
    public void JieyaAsyn()
    {
        Debug.Log("Begin");
        finish = false; //重置标识位
        string path = Path.Combine(Application.dataPath, zipName + ".zip");
        Thread thread = new Thread(() =>
        {
            reader.load(path);
            finish = true;
        });
        thread.Start();
        StartCoroutine(PrintIfFinished());
    }

    IEnumerator PrintIfFinished()
    {
        yield return 0; //延迟到下一帧,线程开的有点慢
        while (!finish)
        {
            print("解压中..."); //注意:如果没释放zip就点了异步加载zip ,会一直输出 ‘解压中’ ,哈哈哈~~
            yield return null;
        }
        Debug.Log("Finish");
        Debug.Log(reader.numFiles);
        ListFileNames();
    }

    private void ListFileNames() //枚举文件名
    {
        if (printFileName)
        {
            List<string> files = reader.getFiles();
            for (int i = 0; i < files.Count; i++)
            {
                if (i % 8 == 0) //输出数据采取抽查模式,避免大数据输出导致的卡顿
                {
                    Debug.Log("File :" + files[i]);
                }
            }
        }
    }
    public void Close()
    {
        Debug.Log("释放文件!");
        reader.Dispose(); //释放zip文件。避免被占用
    }

    public void ShowFiles()
    {
        printFileName = !printFileName;
        Debug.Log(printFileName?"输出文件列表":"不输出文件列表");
    }

    Vector3 vector = new Vector3(0, 1, 0);
    void Update()
    {
        transform.Rotate(vector, Space.Self);
    }
}

方法名必须很任性。

链接:

NegInfinity/ZipReaderForUnity: Basic Zip file reader, originally written for unity engine.

结语:

all the data used for creating the writer was taken off wikipedia article about zip files. - 所有关于 zip 解压的数据来自于 wiki 百科。
所以推荐大家瞅瞅,向这个仓库作者学习学习怎么拾取人家的知识变为自己的。

本文集持续更新ing,喜欢记得点赞关注哦!

上一篇 下一篇

猜你喜欢

热点阅读