Android平台下的StreamingAsset路径
这两天给一个游戏做移植的时候,踩了一个巨大的坑(准确的说是被源码坑了):Android平台下不要通过FILE访问StreamAsset! 游戏刷不出小怪,找了两三天才发现是小怪的配置文件没加载成功。
首先,Unity下常用的路径大概有四个:
-
dataPath
-
persistentDataPath
-
streamingAssetsPath
-
temporaryCachePath
具体在各个操作系统下对应的路径大家可以具体到unity文档中查。
首先,这四个路径全部为只读,意思是其内容不会因为游戏更新而改变,因此常用于存放持久数据。比如玩家的游戏存档就可以放在persistentDataPath下(单机游戏)。
对于StreamingAssetPath,无法用C#的File方式在WebGL和Android平台下访问此文件夹。如果想在这两个平台下访问,应当使用UnityWebRequest类(或使用WWW类,但UnityWebRequest正是unity平台下WWW类的升级版,因此建议使用UnityWebRequest)。
使用方法如下:
#if UNITY_ANDROID
UnityWebRequest webRequest = UnityWebRequest.Get(filePath);
webRequest.SendWebRequest();
if (webRequest.error == null)
{
while (!webRequest.downloadHandler.isDone){}
x = webRequest.downloadHandler.text;
}
else
{
Debug.LogError("Cannot open file: " + filePath);
return;
}
#else
上面是用阻塞方式读取。较大文件的加载应当使用协程:
#if UNITY_ANDROID
UnityWebRequest webRequest = UnityWebRequest.Get(filePath);
yield return webRequest.SendWebRequest();
if(www.isNetworkError || www.isHttpError) {
//exception处理
}
else{
x = webRequest.downloadHandler.text;
}
#else
其中,上面的filepath建议使用System.Uri类进行构造。