Unity之AssetBundles

来源:互联网 发布:三国乱世神石强化数据 编辑:程序博客网 时间:2024/06/03 22:54

  第一次见AssetBundles的应用场景是在公司的一个项目中,由于加入时,这个项目已经大致完成,所以后期并没有做关于这方面的事情。不过幸好Unity有相当健全的官方文档,所以花了一些时间了解了AssetBundles的应用场景以及具体应用,下面先介绍一下AssetBundle的应用场景。

  1)这是一个打包的过程,首先想到的场景是一些网络游戏需要热更新时,可以将资源打包成AssetBundles,然后本地下载此包,实现资源的动态更新。其次,可以将场景中所需资源在本地打包,然后用代码控制着加载资源,由于打包后所占空间极小,所以这种情况也比较常见。

  2)虽官方文档已经介绍得相当清楚,但记录下来,以便以后需要时可以随时查阅也是极好的,首先说一下如何将资源打包。

  1>几乎所有的资源都可以打包,Prefab、纹理图、音效、视频等。点击资源,最Inspector的最下方有个AssetBundle的选项,点击之后,创建一个新的AssetBundle名。这样,这个资源就是这个名字下面的资源了,在以后加载的时候,需要时刻注意这个路径问题。

  2>下面列出创建AssetBundles的脚本。

using UnityEditor;using System;public class pack {    [MenuItem("Assets/Build AssetBundles")]    static void BuildAssetBundles()    {        //这里是填得路径,父路径为该项目的路径,即Assets的父路径        BuildPipeline.BuildAssetBundles("AssetBundles");    }}
  注:此文件夹倒不必必须叫AssetBundles,只是官方这样叫,且这样比较明了。

  3>创建了AssetBundles之后,就可以在脚本中动态地加载资源并进行使用了,下面贴出加载AssetBundles的代码。

 public void Start()    {        //由于AssetBundles文件夹和Assets文件夹同级,所以去掉/Assets路径,并添加上/AssetBundles路径        BundleURL = "file:///" + Application.dataPath.Replace("/Assets", "") + "/AssetBundles";    }

IEnumerator LoadAssetBundle()    {        while (!Caching.ready)            yield return null;        //..  /image是AssetBundles文件夹下AssetBundle的名称,里面装着资源        using(WWW www = WWW.LoadFromCacheOrDownload(BundleURL + "/image",version))        {            yield return null;            if (www.error != null)                throw new Exception("WWW download had an error," + www.error);            AssetBundle bundle = www.assetBundle;            if(AssetName == "")            {                Debug.Log(bundle.mainAsset);            }            else            {                Debug.Log(bundle);                Debug.Log(bundle.LoadAsset(AssetName));                bundle.Unload(false);            }        }    }  
注:Unity版本不同,所用的API也不同。


此外,我的Unity版本是5.3.4。


0 0