- Home /
I wonder about AssetBundle Load
Hi, Unity. I need some help understand the way load assetbundles.
First, I refered how to load AssetBundle in https://docs.unity3d.com/kr/2019.4/Manual/AssetBundles-Native.html
So, I wrote like this.
.
using UnityEngine.Networking;
public class AssetBundleCtr : MonoBehaviour {
IEnumerator CallBundle()
{
string uri = "file/// + Application.dataPath + "AssetBundles/bundlename";
UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(uri);
yield return request.SendWebRequest();
AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
}
}
.
It worked well, but I made 4~5 bundles named "prefabs", "scenes", "sprites".... etc.
So, I have to repeat that 4~5 times. I don't like this situation. I searched and thought use other public class.
It's like this.
.
public class BundleData
{
public string bundlename{get; set;}
public string uri { get; set; }
public UnityWebRequest request { get; set; }
public AssetBundle bundle { get; set; }
}
public class AssetBundleCtr : MonoBehaviour{
List< BundleData> bundledata = new List< BundleData>();
path = "file/// + Application.dataPath;
void createbundlelist( string category = null, string name = null )
{
bundledata.Add(new BundleData() { bundlename = name, uri = path + "/AssetBundles/" + category + "/" + name }); }
IEnumerator CallBundle()
{
createbundlelist("basicsys", "prefabs"); bundledata[bundledata.Count-1].request = UnityWebRequestAssetBundle.GetAssetBundle(bundledata[bundledata.Count-1].uri, 0);
yield return bundledata[bundledata.Count - 1].request.SendWebRequest();
bundledata[bundledata.Count - 1].bundle = DownloadHandlerAssetBundle.GetContent(bundledata[bundledata.Count - 1].request);
}
}
.
But it didn't work. The error appeared.
Maybe "cannot connect destination host".
So, I searched again and again.
And I found what I lost. It was "DownloadHandler".
And I attached it in BundleData Class.
.
Finally, I attached below UnityWebRequest line like this
.
bundledata[bundledata.Count - 1].bundlehandler = new DownloadHandlerAssetBundle(bundledata[bundledata.Count - 1].request.url, 0); bundledata[bundledata.Count - 1].request.downloadHandler = bundledata[bundledata.Count - 1].bundlehandler;
yield return bundledata[bundledata.Count - 1].request.SendWebRequest();
bundledata[bundledata.Count - 1].bundle = bundledata[bundledata.Count - 1].bundlehandler.assetBundle;
.
The error disappeared. But I don't understand. why the error exsisted?
.
During Example, The sequence is
UnityWebrequest from uri -> yield return request.SendWebRequest -> AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);.
Why I have to make a new DonwloadHandler in class BundleData() ?
Your answer
Follow this Question
Related Questions
Android: Additional data download 0 Answers
i want to download assetbundle from server once, and load from local storage every other time 0 Answers
copy downloaded png to Documents folder? 0 Answers
Alternative to BuildStreamedSceneAssetBundle ? 0 Answers
Why download AssetBundle take so long? 0 Answers