作者: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");
网友评论