Unity在各平台下读取StreamingAssets文件夹中的文件(Unity5版本适用)

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();
    }

踩过的坑:

  1. 在移动平台下,Application.streamingAssetsPath只读的,不能写入数据。Application.persistentDataPath 可以读取和写入数据。
  2. 在PC下,可以用File类API(如File.ReadAllText)读写StreamingAssets文件夹中的文件;在IOS和Android平台下,不能用File类API读取。
  3. 所有平台上都可以用www方式异步读取StreamingAssets文件夹,PC和IOS平台下,读取路径必须加上"file://",而安卓不需要。
  4. 在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("test");

 

 

 

 

你可能感兴趣的:(unity,StreamingAssets,IOS)