首页 > 技术文章 > Unity 在 Android 平台下 使用 AssetBundle.CreatFromFile() 加载 AssetBundle,返回空值null。

tangyikejun 2015-08-19 22:52 原文

我只想说路径问题简直丧心病狂!

我们都知道在 Android 平台下使用 WWW 的加载方式十分的顺畅。一个路径类似于这样:jar:file:///data/app/[APP的名字].apk!/assets/AssetBundles/ABFile/

在使用 Win 或 Mac 测试的时候,我们也容易知道使用 CreateFromFile 使用的路径跟 WWW 相比只要把前面的 file:// 去掉。


在 Android 平台上就不是这么简单了,虽然说复杂不到哪里去,但是对于不熟悉的人来说,够喝一壶了。下面我要揭晓秘密了!

Application.streamingAssetsPath // 获得一个类似这样的路径 jar:file:///data/app/[APP的名字].apk!/assets
Application.dataPath // 获得一个类似这样的路径 /data/app/[APP的名字].apk


CreateFromFile 接受的路径是像这样 /data/app/[APP的名字].apk!assets/AssetBundles/ABFile。看起来似乎可以用 Application.streamingAssetsPath + relativeName去掉前面的 jar:file:// 获得。但是!请你仔细观察!
我们来对比下这种方式得到的路径跟使用 dataPath得到的路径。

Application.streamingAssetsPath.Replace("jar:file://","")+"/AssetBundles/ABFile";
Application.dataPath + "!assets/AssetBundles/ABFile";
/data/app/[APP的名字].apk!/assets/AssetBundles/ABFile    // not work
/data/app/[APP的名字].apk!assets/AssetBundles/ABFile     // work

我屮艸芔茻!看到没有,叹号后面少了一个斜杠!坑爹啊! 不知道是 Unity 坑还是 Android 坑,反正是坑得哥哥都快变成姐姐了!蛋碎啊有木有!