在移动端加载路径与Windwos或Mac上加载有一些区分,有时候资源文件找不到是在是查起来头疼。这里写一些推荐规范,从非开发角度就能避免这些问题。

路径大小写

在UNITY EDITOR下你不必关注路径大小写问题,⚠️ 注意:但是在移动端大小写是敏感的。

  • 建议所有AB包都保持小写的命名方式
  • 建议在加载文件的地方的留一个可以开关的宏定义用来查路径问题

StreamAssets目录的资源加载

StreamAsset目录中。在移动端File.IO不可用,⚠️ 注意:你需要使用www来加载当前目录下资源

你可以使用下面的代码块进行资源的同步加载,而不必非要放到携程里进行加载。

1
2
3
4
5
6
7
8
9
10
11
using (WWW www = new WWW(path))
{
while (!www.isDone)
{
}
using (var ms = new MemoryStream(www.bytes))
{
}
}

路径的隐含条件

  • 建议统一使用www加载,避免大量的逻辑判断(比如是否需要拼接”file://“)
  • 在StreamAsset目录下就不要使用 File.exsits 之类位于 System.IO命名空间下函数

//在android下
Application.streamingAssetsPath = “jar:file://“ + Application.dataPath + “!/assets/“

//在pc & mac端
Application.streamingAssetsPath = Application.dataPath + “/StreamingAssets”

//在iOS端
Application.streamingAssetsPath = Application.dataPath + “/Raw”

APK内StreamAsset目录结构

当然你可以使用下面的代码块直接进行www加载路径的拼接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string GetWWWLoadingPathAtStreamingAssetsFolder()
{
string path;
#if UNITY_EDITOR
path = "file:" + Application.dataPath + "/StreamingAssets";
#elif UNITY_ANDROID
path = "jar:file://"+ Application.dataPath + "!/assets/";
#elif UNITY_IOS
path = "file:" + Application.dataPath + "/Raw";
#else
//Desktop (Mac OS or Windows)
path = "file:"+ Application.dataPath + "/StreamingAssets";
#endif
return path;
}