从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-03-16T07:19:48 访问量:2359
评论 [发表评论]