美文网首页Unity3D
【转】Unity在各平台下读取StreamingAssets文件

【转】Unity在各平台下读取StreamingAssets文件

作者: 何三思 | 来源:发表于2019-03-08 14:19 被阅读2次

    作者:hundaxxx
    原文:Unity在各平台下读取StreamingAssets文件夹中的文件

    void Awake()
        {
            string path =
    #if UNITY_ANDROID && !UNITY_EDITOR
            Application.streamingAssetsPath + "/Josn/modelname.json";
    #elif UNITY_IPHONE && !UNITY_EDITOR
            "file://" + Application.streamingAssetsPath + "/Josn/modelname.json";
    #elif UNITY_STANDLONE_WIN||UNITY_EDITOR
            "file://" + Application.streamingAssetsPath + "/Josn/modelname.json";
    #else
            string.Empty;
    #endif
            StartCoroutine(ReadData(path));
        }
     
        IEnumerator ReadData(string path)
        {
            WWW www = new WWW(path);
            yield return www;
            while (www.isDone == false)
            {
                yield return new WaitForEndOfFrame();
            }
            yield return new WaitForSeconds(0.5f);
            string data = www.text;
            yield return new WaitForEndOfFrame();
        }
    

    踩过的坑:

    在移动平台下,Application.streamingAssetsPath是只读的,不能写入数据。Application.persistentDataPath 可以读取和写入数据。

    在PC下,可以用File类API(如File.ReadAllText)读写StreamingAssets文件夹中的文件;在IOS和Android平台下,不能用File类API读取。

    所有平台上都可以用www方式异步读取StreamingAssets文件夹,PC和IOS平台下,读取路径必须加上"file://",而安卓不需要。

    在IOS和Android下,还能用AssetBundle.LoadFromFile来同步读取数据。

    string path =
    #if UNITY_ANDROID
                 Application.dataPath + "!assets"+ "/";
    #else
                 Application.streamingAssetsPath + "/";
    #endif
     
    AssetBundle assetbundle = AssetBundle.LoadFromFile(path +"sprite.unity3d");
    Sprite sprite = assetbundle.LoadAsset<Sprite>("test");
    

    相关文章

      网友评论

        本文标题:【转】Unity在各平台下读取StreamingAssets文件

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