详解Unity3D中的StreamingAssets文件夹

前言

官方文档:https://docs.unity3d.com/Manual/StreamingAssets.html
这是一个只读、不可写的目录。
官方推荐使用Application.streamingAssetsPath来获得该文件夹的实际位置,其可以规避平台差异。
对于ios平台,其等价于:Application.dataPath + "/Raw";
对于android平台,其等价于:"jar:file://" + Application.dataPath + "!/assets/";

补充:
对于android平台
Application.streamingAssetsPath的详细格式形如:jar:file:///data/app/包名-1/base.apk!/assets
Application.dataPath的详细格式形如:/data/app/包名-1/base.apk

使用

读写

所有平台都不支持写入。(待求证)
常规读取方法为UnityWebRequest(WWW已废弃),该方法是异步的。

对于非Android平台,支持File或者Stream的同步读取。同时File或者Directory类的方法也都可用。但对于Android平台,File类,Direcotry类的方法,以及Stream方式的读取都不支持。
针对Android平台,如果有同步读取的需求,可以考虑在游戏运行时,把StreamingAssets下的文件写入persistentDataPath,后续的读取和写入都在persistentDataPath进行。另一种方法就是针对Android平台提供额外的jar,对StreamingAssets下的文件进行同步操作。

AB读取的特例

有一个特例,就是StreamingAssets目录下的AssetBundle资源,无论什么平台,都可以通过AssetBundle.LoadFromFile(string path)该接口(该接口亦可读取其它具体目录中的资源,不仅仅是StremingAssets目录)同步读取。
但是对于anroid平台,path参数需要使用Application.dataPath + "!assets/xxxx"的格式才能读取。
其它平台path参数使用Application.streamingAssetsPath+"/xxxxxx"即可读取

Tables文件夹

笔者遇到过,在StreamingAssets目录下,创建文件夹名字为Tables,通过jar的方式读取其内的文件,无法读取。改成其它名字即可。暂时还不知道是什么原因,有知道的大佬告诉一下~~

你可能感兴趣的:(Unity3D)