个人资料

主页 博客 留言板 搜索
跳过导航链接首页 > 博客列表 > 博客正文

从AssetBundle对象中加载Assets[六]

分类

当AssetsBundle文件加载到内存完成后,就可以将它所包含的Assets加载到内存中,Unity提供了6种加载API供我们使用。在unity脚本编辑器中,打出AssetsBuLoadAssetndle.后出现智能提示,前面带着load的六个接口就是。分别是loadAsset,loadAssetAsync,loadallasset,loadAllassetAsync,loadAll WithSubasset ,loadAllWithSubassetAsync。Unity在5.0以后不再支持直接加载组件类型,先使用加载游戏对象然后查找组件对象。以下是使用一个loadAssetAsync接口加载Asset的示例代码,我的资源包打包了两个资源,一个音乐片段musicClip和一个文本(xml),分别获取asset资源方法如下。

public static AudioClip[] musics = new AudioClip[10];
   public static TextAsset[] docs = new TextAsset[10];
   int musicIndex=1;
   IEnumerator Start()
   {
       WWW www = WWW.LoadFromCacheOrDownload("www.songshizhao.com/example/bundleName.bundleVarient", 0);
       //等待下载完成
       yield return www;
       if (www.error != null)
       {
           //警告
           Debug.Log(www.error);
           yield break;
       }
       else
       {
           int musicindex = PlayerPrefs.GetInt("MusicIndex");
           //从bytes数组中创建AssetBundle
           AssetBundle assetBundle = www.assetBundle;
 
           AssetBundleRequest request = assetBundle.LoadAssetAsync(sceneLoad.musicName[musicIndex], typeof(AudioClip));
           musics[musicIndex] = request.asset as AudioClip;
           AssetBundleRequest request2 = assetBundle.LoadAssetAsync(sceneLoad.xmlName[musicIndex], typeof(TextAsset));
           docs[musicIndex] = request2.asset as TextAsset;
 
       }
   }

注意事项:经过试验,读取assetBundle是文件名字应该包含后缀名,而根据assetBundle获取asset的时候则不能带有后缀名,另外不同平台的assetBundle确实是不能通用的,比如生成的IOS包在安卓版软件上是确实不能成功加载的。

下一篇:实战:在Loading界面加载assetBundle后在场景中加载Asset资源

songshizhao
最初发表2017/3/16 19:19:48 最近更新2017/3/16 19:19:48 3115
为此篇作品打分
10