Unity游戏资源解压

Unity2017;ICSharpCode.SharpZipLib.Zip;

using UnityEngine;
using System.Collections;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;

public class ZipTest : MonoBehaviour
{

    private WWW www;
    private bool isUnzipped = false;

    // Use this for initialization
    void Start()
    {
        string url = "http://54.193.6.32:8080/U3dFileToServer/upLoad/WFJ/StreamingAssets.zip";
        StartCoroutine(DownLoadZip(url));
    }

    // Update is called once per frame
    IEnumerator DownLoadZip(string url)
    {
        WWW www = new WWW(url);
        yield return www;

        if (www.isDone && !isUnzipped)
        {
            Debug.Log("Load zip complete");
            byte[] data = www.bytes;

            string persistentPath = Application.persistentDataPath;
            string zipName = "StreamingAssets.zip";
            string docPath;
            docPath = persistentPath + "/" + zipName;
            Debug.Log("docPath=" + docPath);

            System.IO.File.WriteAllBytes(docPath, data);

            UnZip(docPath, persistentPath, "");
        }
    }

    /// <summary>
    /// ZIP:解压一个zip文件
    /// add yuangang by 2016-06-13
    /// </summary>
    /// <param name="ZipFile">需要解压的Zip文件(绝对路径)</param>
    /// <param name="TargetDirectory">解压到的目录</param>
    /// <param name="Password">解压密码</param>
    /// <param name="OverWrite">是否覆盖已存在的文件</param>
    void UnZip(string ZipFile, string TargetDirectory, string Password, bool OverWrite = true)
    {
        //如果解压到的目录不存在,则报错
        if (!System.IO.Directory.Exists(TargetDirectory))
        {
            throw new System.IO.FileNotFoundException("指定的目录: " + TargetDirectory + " 不存在!");
        }
        //目录结尾
        if (!TargetDirectory.EndsWith("\\")) { TargetDirectory = TargetDirectory + "\\"; }

        using (ZipInputStream zipfiles = new ZipInputStream(File.OpenRead(ZipFile)))
        {
            zipfiles.Password = Password;
            ZipEntry theEntry;

            while ((theEntry = zipfiles.GetNextEntry()) != null)
            {
                string directoryName = "";
                string pathToZip = "";
                pathToZip = theEntry.Name;

                if (pathToZip != "")
                    directoryName = Path.GetDirectoryName(pathToZip) + "\\";

                string fileName = Path.GetFileName(pathToZip);

                Directory.CreateDirectory(TargetDirectory + directoryName);

                if (fileName != "")
                {
                    if ((File.Exists(TargetDirectory + directoryName + fileName) && OverWrite) || (!File.Exists(TargetDirectory + directoryName + fileName)))
                    {
                        using (FileStream streamWriter = File.Create(TargetDirectory + directoryName + fileName))
                        {
                            int size = 2048;
                            byte[] data = new byte[2048];
                            while (true)
                            {
                                size = zipfiles.Read(data, 0, data.Length);

                                if (size > 0)
                                    streamWriter.Write(data, 0, size);
                                else
                                    break;
                            }
                            streamWriter.Close();
                        }
                    }
                }
            }
            zipfiles.Close();
        }
        //
        File.Delete(ZipFile);
    }
}

 

转载于:https://www.cnblogs.com/JimmyCode/p/7536763.html

Unity游戏启动流程包括加载默认资源和执行各个模块的操作。首先,在启动时,Unity会加载一些默认的资源,包括Texture、Shader、Mesh等等。接下来,根据给出的代码示例,游戏启动流程可以分为以下几个步骤: 1. 初始化:在初始化阶段,游戏会创建并初始化一些模块,如资源解压模块(UnPackAssetBundle)和热更新模块(HotUpdate)。这些模块会接收一些回调函数用于显示登录进度和在流程结束时执行特定操作。 2. 注册流程:在注册流程阶段,将各个模块连接起来,以确保它们按照正确的顺序执行。在给出的示例中,资源解压模块(UnPackAssetBundle)和热更新模块(HotUpdate)通过注册流程的方式进行连接。 3. 启动流程:在启动流程阶段,调用资源解压模块(UnPackAssetBundle)的DoStart方法,该方法会触发资源解压模块的开始操作。 以上是Unity游戏启动流程的一般概述,具体的流程可能会根据具体游戏的需求而有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Unity游戏启动时都干了些啥](https://blog.csdn.net/a958832776/article/details/80105563)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Unity游戏开发-游戏热更新以及登录流程](https://blog.csdn.net/FlyToCloud/article/details/115075246)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值