(个人)AR电子书系统创新实训第三周(1)

文件的导入与打包

为了能够方便地制作资源,我们需要制作一个桌面端的程序,用于导入图片和视屏资源,将资源绑定在一起,组成可被手机应用识别的数据包,并将数据包上传到服务器,最后得到数据包在服务器上地址的二维码,手机应用可以通过扫描二维码的形式下载该数据包。本周,我主要测试了一下Unity中文件导入和打包的功能。

文件导入

读取文件:在读取文件上,我用到了两个比较重要的东西。其一是Windows.Form,它是一个可以让Unity调用Windows接口的插件,我主要使用此插件来打开资源浏览器,用于给用户选取文件路径。

            OpenFileDialog opLog = new OpenFileDialog();
            opLog.InitialDirectory = UnityEngine.Application.dataPath;
            opLog.Filter = "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*";
            DialogResult result = opLog.ShowDialog();

获得了路径后,还需要将改路径的文件读入程序,这里所使用的是Unity自带的WWW类。WWW是一个十分简单实用的网络请求类,其可以发送Post和Get请求来实现资源的上传和下载,而除此之外,WWW还可以读入本地的文件,只需要在本地文件地址前填入“file://”协议即可。虽然WWW的导入过程需要写在协程函数中,在调试时无法打断点中断,但仍然还是十分方便的。

    //通过www读入本地文件。
    private IEnumerator opt(string path)
    {
        string str = "file:///" + path;
        string filename = path.Substring(path.LastIndexOf("\\") + 1);
        filename = filename.Substring(0, filename.LastIndexOf('.'));
        www = new WWW(@str);
        yield return www;
        if (www != null && string.IsNullOrEmpty(www.error))
        {
            //获取Texture
            //Texture texture = www.texture;

            string fullpath = UnityEngine.Application.dataPath + "/Resources/" + filename + ".png";
            Debug.Log(fullpath);
            testimage.canvasRenderer.SetTexture(txt);

            Debug.Log("加载成功");
        }
        else
        {
            Debug.Log(www.error);
        }
    }

写入文件:通过WWW导入文件后,便需要将文件写到特定的文件夹,以进行打包,说白了,这就是一个复制粘贴的过程。WWW虽然可以读取文件,但似乎没有写入文件的功能,因此需要使用到File类。
File类也就是文件流类,使用起来也比较简单,只需要调用其静态函数WriteAllBytes,以输出路径和文件的字节数据为参数就行了。

            byte[] data = www.texture.EncodeToPNG();
            File.WriteAllBytes(fullpath, data);

文件打包

Unity自身并没有什么可以方便动态打包的工具,因此,我使用了ICSharpCode.SharpZipLib库来进行zip打包。这个库和Zxing一样只是一个动态库文件,只需要拖入工程项目中就可以使用了。SharpZip的打包代码不是那么直观,因此需要做一下封装。具体代码比较多我就不放上来了,封装后的类是ZipUtility。

        string[] Array = new string[1];
        Array[0] = UnityEngine.Application.dataPath + "/Resources";
        ZipUtility.Zip(Array, UnityEngine.Application.dataPath + "/ZIPS/test.zip",null, cbk);

其中Zip函数的第一个参数是源文件的目录,第二个参数是输出路径,第三个参数是密码,第四个参数是一个自己写的回调函数,用于跟踪打包状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值