我用的是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上也問了,一直沒有得到明確的答案,新人求大神相助!!!!!!!
uj5u.com熱心網友回復:
你可以用vs斷點除錯,除錯的時候看一下assetBundle里的所有資源名字另外,Unity5.x,在AssetBundle里面的資源一般都是小寫吧
比如Assets/Textures/A.png,Load的時候是Assets.LoadAssets<Texture>("assets/textures/a.png")
uj5u.com熱心網友回復:
manifestBundle 中應該保存的是依賴關系吧。有可能是因為依賴的原因導致你實體化失敗。cube依賴的資源沒有加載進來,所有不能實體化cube。uj5u.com熱心網友回復:
我沒用過5.x的打包,但是4.x的這種情況我遇到過,打包成功,加載成功,但是當你在運行時訪問asset時,發現他是null,很可能的一個原因是你打包的時候沒注意打到哪里了,打包方法有2個引數,一個是用來提供同步加載的asset,一個是用來異步加載的陣列,這兩個你一定得搞清楚啊轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/74253.html
標籤:Unity3D
