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

2 篇文章 0 订阅
1 篇文章 0 订阅
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<Sprite>("test");

 

 

 

 

  • 18
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值