unity3d从streamingassets拷贝到persistentassets

来源:互联网 发布:amd表面格式优化 编辑:程序博客网 时间:2024/04/30 08:41

一、图


二、代码码 (注释很详细)

using UnityEngine;using UnityEngine.UI;using System.Collections;using System.IO;using System.Runtime.Serialization.Formatters.Binary;public class main : MonoBehaviour{    public string fileName = "img.png";    public Image img_persistent;    public Image img_streaming;    public Button btn_copy;    public Button btn_clear;    public Button btn_close;    //public Text txt_info;    // Use this for initialization    void Start()    {        img_persistent.sprite = null;        img_streaming.sprite = null;        LoadImage_from_Streaming(fileName, img_streaming);        btn_copy.onClick.AddListener(() =>        {            Debug.Log("click btn copy!");            if (img_persistent.sprite == null)            {                StartCoroutine(copy(fileName));            }        });        btn_clear.onClick.AddListener(() =>        {            clear();        });        btn_close.onClick.AddListener(() =>        {            Application.Quit();        });    }    /// <summary>    /// 将streaming path 下的文件copy到对应用    /// 为什么不直接用io函数拷贝,原因在于streaming目录不支持,    /// 不管理是用getStreamingPath_for_www,还是Application.streamingAssetsPath,    /// io方法都会说文件不存在    /// </summary>    /// <param name="fileName"></param>    IEnumerator copy(string fileName)    {        string src = getStreamingPath_for_www() + fileName;        string des = Application.persistentDataPath + "/" + fileName;        Debug.Log("des:" + des);        Debug.Log("src:" + src);        WWW www = new WWW(src);        yield return www;        if (!string.IsNullOrEmpty(www.error))        {            Debug.Log("www.error:" + www.error);        }        else        {            //des = Application.persistentDataPath + "/" + fileName;            if (File.Exists(des))            {                File.Delete(des);            }            FileStream fsDes = File.Create(des);            fsDes.Write(www.bytes, 0, www.bytes.Length);            fsDes.Flush();            fsDes.Close();            LoadImage_from_Persistent(fileName, img_persistent);        }        www.Dispose();    }    void clear()    {        img_persistent.sprite = null;        string des = Application.persistentDataPath + "/" + fileName;        if (File.Exists(des))        {            File.Delete(des);        }    }    /// <summary>    /// Load Image from Persistent folder    /// </summary>    /// <param name="path"></param>    /// <param name="uiImg"></param>    void LoadImage_from_Persistent(string path, UnityEngine.UI.Image uiImg)    {        path = getPersistentPath_for_www() + path;        Debug.Log("persistent path:" + path);        StartCoroutine(wwwLoadImage(path, uiImg));    }    /// <summary>    /// Load Image from Streaming folder    /// </summary>    /// <param name="path"></param>    /// <param name="uiImg"></param>    void LoadImage_from_Streaming(string path, UnityEngine.UI.Image uiImg)    {        path = getStreamingPath_for_www() + path;        Debug.Log("streaming path:" + path);        StartCoroutine(wwwLoadImage(path, uiImg));    }    IEnumerator wwwLoadImage(string path, UnityEngine.UI.Image uiImg)    {        WWW www = new WWW(path);        yield return www;        if (!string.IsNullOrEmpty(www.error))        {            Debug.Log("www.error:" + www.error);        }        uiImg.sprite = Sprite.Create(www.texture, new Rect(new Vector2(0, 0), new Vector2(www.texture.width, www.texture.height)), Vector2.zero);        www.Dispose();    }    //void LogToText(string log)    //{    //    Debug.Log(log);    //    txt_info.text += "\n" + log;    //}    string getStreamingPath_for_www()    {        string pre = "file://";#if UNITY_EDITOR        pre = "file://";#elif UNITY_ANDROID        pre = "";#elif UNITY_IPHONE    pre = "file://";#endif        string path = pre + Application.streamingAssetsPath + "/";        return path;    }    string getPersistentPath_for_www()    {        string pre = "file://";#if UNITY_EDITOR || UNITY_STANDALONE_WIN        pre = "file:///";#elif UNITY_ANDROID        pre = "file://";#elif UNITY_IPHONE        pre = "file://";#endif        string path = pre + Application.persistentDataPath + "/";        return path;    }}

三、demo下载

http://download.csdn.net/detail/anyuanlzh/9111411


0 0
原创粉丝点击