美文网首页unitycsharpC#
[Unity 3d] ZipReader For Unity

[Unity 3d] ZipReader For Unity

作者: 雨落随风 | 来源:发表于2019-06-11 23:06 被阅读2次

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

简介:

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

功能:

  • It does not support zip64.
  • It only supports compression method 0x8 which is deflate.
  • 由于这个脚本依赖System.IO.Compression.DeflateStream,所以不需要引入其他第三方库。

使用:

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

演示:

zipReader

Tips:

  • 演示了读取一个 248MB的 zip 文件。
  • 演示了 输出文件名 API
  • 演示了 常规读取 和 开线程读取。
  • 演示了 释放文件 的API:Dispose (如果不是为了演示谁愿意手动点击释放呢?)

以下为演示代码:

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,喜欢记得点赞关注哦!

相关文章

  • [Unity 3d] ZipReader For Unity

    GitHub 上的工程多如繁星,有些好的仓库,但凡不经意间错过了就很难找回,故稍作采撷,希望能帮助到有心人。本文集...

  • Unity 3D 创建项目

    Unity 3D 下载 要安装 Unity 3D 游戏引擎的最新版,可以访问 Unity 官方网站 https:/...

  • [unity3d源码] Unity 3D 《farm busin

    Unity 3D 《farm business》农场模拟经营游戏源码下载 1、Unity 3D 《farm bus...

  • 2019-05-14

    unity 3D使用教程 软件简介 Unity3D是由Unity Technologies开发的一个让玩家轻松创建...

  • 是时候该了解下Unity3D了

    现在的 Unity 已经发展到了 Unity 5,使用 Unity 可以创建 2D 或 3D 游戏、建筑格式化、实...

  • Unity基础(12)-物理系统

    1.什么是Unity物理系统 Unity是一款3D引擎软件,内置NVIDIA PhysX物理引擎,使3D物体具备物...

  • [Unity]如何安装破解Unity

    Unity是一款公司推出的3D游戏动画开发工具,随着Unity 5.6正式版发布结束了5.x产品周期,Unity ...

  • Unity迷你卡通风格3D模型精选

    本文介绍Unity Asset Store中迷你卡通风格的优质3D模型素材。整个Unity Asset Store...

  • C# 变量

    参考Unity 3D C# 脚本基础[https://www.w3cschool.cn/unity3d_jc/un...

  • unity3d培训班去哪好

    u3d是unity 3D的简称,u3d游戏开发去哪好? Unity对游戏行业的贡献是无可非议的,Unity发展角度...

网友评论

    本文标题:[Unity 3d] ZipReader For Unity

    本文链接:https://www.haomeiwen.com/subject/uqxhfctx.html