消息关闭
    暂无新消息!
我用的是unity5.2.0,做新版本的assetbundle测试,我的prefab就是一个最简单的cube,打包后文件生成成功,其中cube的打包文件大小为45KB,用WWW下载时www.error也没有报错,但是在instantiate时告诉我结果为null,我一直在想是不是打包时出现了问题。

大家帮我看一下,这是我打包的代码:

SelectedAsset是我在Project面板中选中的prefab,遍历后将路径赋给resoucesAssets
for (int i = 0; i < SelectedAsset.Length; i++)
{
    sourcePath = AssetDatabase.GetAssetPath(SelectedAsset[i]);
    resoucesAssets[i] = sourcePath;
}


然后直接打包,这里我没有用AssetBundleBuild[]数组,不知道是不是这个问题。
BuildPipeline.BuildAssetBundles(targetPath);


接下来是我的解包代码:

首先是下载完整的manifest文件,这里print(www.error);没有报错
WWW www = WWW.LoadFromCacheOrDownload(mainUrl, 0);
yield return www;

AssetBundleManifest manifest = new AssetBundleManifest();

if (!string.IsNullOrEmpty(www.error))
{
    print(www.error);
}
else
{
    AssetBundle manifestBundle = www.assetBundle;
    manifest = manifestBundle.LoadAsset("AssetBundleManifest") as AssetBundleManifest;
    manifestBundle.Unload(false);
}



然后下载cube打包文件,print(wwwGoal.error);也没有报错,但是就是这里Instantiate(goal);告诉我结果为null。
WWW wwwGoal = WWW.LoadFromCacheOrDownload(path + realName + extension, manifest.GetAssetBundleHash(realName + extension), 0);
yield return wwwGoal;
if (!string.IsNullOrEmpty(wwwGoal.error))
{
    print(wwwGoal.error);
}
else
{
    AssetBundle ab = wwwGoal.assetBundle;
    GameObject goal = ab.LoadAsset(realName + extension) as GameObject;
    if (goal != null)
    {
        Instantiate(goal);
        ab.Unload(false);
    }
}


有没有这种可能,打包能成功,大小45KB也正常,我看过总的那个manifest文件,info里也有cube文件名,但是事实上cube却没有被打包进去?
被这个问题困扰了好几天,stackoverflow上也问了,一直没有得到明确的答案,新人求大神相助!!!!!!!

3个回答

︿ 2
manifestBundle 中应该保存的是依赖关系吧。有可能是因为依赖的原因导致你实例化失败。cube依赖的资源没有加载进来,所有不能实例化cube。
︿ 0
我没用过5.x的打包,但是4.x的这种情况我遇到过,打包成功,加载成功,但是当你在运行时访问asset时,发现他是null,很可能的一个原因是你打包的时候没注意打到哪里了,打包方法有2个参数,一个是用来提供同步加载的asset,一个是用来异步加载的数组,这两个你一定得搞清楚啊
︿ 0
你可以用vs断点调试,调试的时候看一下assetBundle里的所有资源名字
另外,Unity5.x,在AssetBundle里面的资源一般都是小写吧
比如Assets/Textures/A.png,Load的时候是Assets.LoadAssets<Texture>("assets/textures/a.png")