资源路径问题
unity作为通用平台,资源读取在各个平台有差异,尤其是移动端和PC端。untiy不同的资源与不同的路径对应,一下依次分析:
1)Application.dataPath
对应于Assets文件最在的目录,在pc端即为工程目录下的Assets路径,如(unity工程名称为Empt,存放在d盘test目录下):D:/test/Empty/Assets。移动端则为apk路径,路径所示可看最后附图的第一条。
2)Application.streamingAssetsPath
此路径对应于StreamingAssets目录,StreamingAssets目录为unity保留路径,即手动建立的StreamingAssets目录unity也会特殊处理。在移动端,此目录下资源文件会包打包处理,外部无法手动打开访问。pc端可以通过C#的File等类进行读取,但是在移动端只能通过www类来加载。在移动端无法用File类来读取,而且File.Exists(Path.Combine(Application.streamingAssetsPath, "******"));始终返回false,所以只能通过www来加载。
此路径与Application.dataPath有如下关系"jar:file://" + Application.dataPath + "!/assets/";
在此说一下Resources目录,Resources也是unity保留路径,不过Resources里面资源unity会进行相关处理(如去掉没有应用的,以及压缩等文件等),而StreamingAssets下的文件则不会进行处理。获取Resources下的文件时通过Resources.Load()方法来加载,如通过string str = Resources.Load("hello").ToString()来获取hello.txt下的文本;通过Texture2D t =(Texture2D) Resources.Load(Path.GetFileNameWithoutExtension(imageName))获取imageName图片。如果Resources下有子目录可以采用相对路径(Texture2D)Resources.Load("BB/aa");即获取Resources下BB目录下的aa资源。Resources.Load获取资源时,资源名称不用带后缀。
3)Application.temporaryCachePath
此路径为一个临时路径目录,在移动端只能通过www类获取,不能用C#File类来读取。
4)Application.persistentDataPath
此路径是一个unity开放的文件路径,此路径下的文件可以随意更改删除,在移动端存放在可公开的SDCard上,具体路径可看附图中的第二条。此路径下的资源既可以通过www类来读取,也可以通过File类来读取。通过www读取时需要在路径开头添加 "file://"
来实现协议,也可以采用C# system下的uri类(如new System.Uri(“路径”).AbsoluteUri),如WWW w = new WWW(new System.Uri(“路径”).AbsoluteUri);
PS:相关资料显示ios系统移动端均可采用file类来读取文件(未测试);
附图: