简介
StreamingAssets目录必须在Assets根目录下,该目录下所有资源也会被打包到游戏里,不同于Resources目录,该目录下的资源不会进行压缩,同样是只读不可写的。Unity基本也没有提供从该路径下直接读取资源的方法,只有www可以加载audioClip、texture和二进制文件,但Unity提供了从该目录加载AssetBundle的方法。
加载路径
可以通过Application.streamingAssetsPath
来获得该文件夹的实际位置。
↑ 等同于 ↓
-
Unity Editor, Win, Linux, PS4, Xbox, NS :
Application.dataPath + "/StreamingAssets"
-
macOS :
Application.dataPath + "/Resources/Data/StreamingAssets"
-
iOS :
Application.dataPath + "/Raw"
-
Android :
"jar:file://" + Application.dataPath + "!/assets"
!!注意!!
对于anroid平台,path参数需要使用
Application.dataPath + "!assets/xxxx"
的格式才能读取。 其它平台path参数使用Application.streamingAssetsPath+"/xxxxxx"
即可读取。
详细格式:
-
Unity Editor, Win, Linux, PS4, Xbox, NS:
E:/myProj/Assets/StreamingAssets
-
macOS :
/myProj/Assets/StreamingAssets
-
iOS:
/var/containers/Application/E5543D66-83F3-476D-8A8F-49D5332B3763/myProj.app/Data/Raw
-
Andorid:
jar:file:///data/app/包名-1/base.apk!/assets
加载方式
- 非Android:支持File或者Stream的读取
- Android:必须用WWW加载,和jar:file://这个前缀有关,不支持File或者Stream的读取
平台区分方式
利用宏定义
string filePath =
#if UNITY_ANDROID && !UNITY_EDITOR
"jar:file://" + Application.dataPath + "!/assets/" + flodername + "/";
#elif UNITY_IPHONE && !UNITY_EDITOR
Application.dataPath + "/Raw/";
#elif UNITY_STANDALONE_WIN || UNITY_EDITOR
"file://" + Application.dataPath + "/StreamingAssets" + "/" + flodername + "/";
#else
string.Empty;
#endif
利用RuntimePlatform
private static string StreamingAssetsDataPath
{
get
{
if (Application.platform == RuntimePlatform.Android)
return "jar:file://" + Application.dataPath + "!/assets/";
else if (Application.platform == RuntimePlatform.IPhonePlayer)
return Application.dataPath + "/Raw/";
else
return "file://" + Application.dataPath + "/StreamingAssets/";
}
}