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

来源:互联网 发布:淘宝充的话费可以退吗 编辑:程序博客网 时间:2024/06/08 03:15

文件的导入与打包

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