[Unity3D]AssetBundles的使用

简介:

 一共有两种方法下载AssetBundles数据资源:

  1. 无缓存:这种方法使用将创建一个WWW类,下载完的数据无法在本地unity3d的缓存目录中进行保存。

  2. 有缓存:使用WWW.LoadFromCacheOrDownload的方法,下载完的数据将在unity3d的本地缓存目录中进行保存。Web浏览器通常允许缓存大小达到50MB,PC和MAC的本地应用,IOS和Android应用都允许缓存达到4GB大小。

   下面是不含缓存的代码:

using System;

using UnityEngine;

using System.Collections; class NonCachingLoadExample : MonoBehaviour {

  public string BundleURL;

  public string AssetName;

  IEnumerator Start() {

  // Download the file from the URL. It will not be saved in the Cache

  using (WWW www = new WWW(BundleURL)) {

  yield return www;

  if (www.error != null)

  throw new Exception("WWW download had an error:" + www.error);

  AssetBundle bundle = www.assetBundle;

  if (AssetName == "")

  Instantiate(bundle.mainAsset);

  else

  Instantiate(bundle.Load(AssetName));

                  // Unload the AssetBundles compressed contents to conserve memory

                  bundle.Unload(false);

  }

  }

}

   下面是含缓存的代码,系统建议利用WWW.LoadFromCacheOrDownload类进行下载:

using System;

using UnityEngine;

using System.Collections;

 

public class CachingLoadExample : MonoBehaviour {

public string BundleURL;

public string AssetName;

public int version;

 

void Start() {

StartCoroutine (DownloadAndCache());

}

 

IEnumerator DownloadAndCache (){

// Wait for the Caching system to be ready

while (!Caching.ready)

yield return null;

 

// Load the AssetBundle file from Cache if it exists with the same version or download and store it in the cache

using(WWW www = WWW.LoadFromCacheOrDownload (BundleURL, version)){

yield return www;

if (www.error != null)

throw new Exception("WWW download had an error:" + www.error);

AssetBundle bundle = www.assetBundle;

if (AssetName == "")

Instantiate(bundle.mainAsset);

else

Instantiate(bundle.Load(AssetName));

               // Unload the AssetBundles compressed contents to conserve memory

               bundle.Unload(false);

}

}

}

   这样,下载之前系统会现在缓存目录中查找, WWW.LoadFromCacheOrDownload函数的第二个参数表示版本号,当要下载的数据在缓存目录中不存在,或者存在,但版本号比较低时,系统才会下载新的数据资源,并替换到缓存中的原数据资源。

   现在来完成上一篇中的实例,在项目视图(Projection View)中,建立Script目录,利用上面的两段源代码,分别创建名为CachingLoadExample和NonCachingLoadExample的C#脚本,如下图所示:


   在unity3d编辑器中创建空物体,菜单GameObject - CreateEmpty,把CachingLoadExample脚本拖动到GameObject上。在层级视图中(Hierarchy View)选中GameObject,在右边的监视视图(Inspector View)中,把CachingLoadExample脚本的BundleURL变量值指定到Cube.unity3d文件所在位置(输入绝对路径,需根据自己存放的目录手动修改),例如:file://C:/UnityProjects/AssetBundlesGuide/Assets/AssetBundles/Cube.unity3d,现在运行unity3d,就能够实现动态加载Cube物体了。

   实例文件下载地址:http://download.csdn.net/detail/s10141303/6496017





















本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366238,如需转载请自行联系原作者

相关文章
|
6月前
|
IDE 持续交付 vr&ar
Unity编辑器扩展
Unity编辑器扩展
|
11月前
|
JSON C# 图形学
Unity——LitJSON的安装
Unity——LitJSON的安装
505 0
|
数据可视化 JavaScript 前端开发
unity
Unity是一款广泛应用于游戏开发和虚拟现实领域的强大游戏引擎,它提供了一个全面的开发工具集,使开发者能够创建出令人惊叹的交互式体验。本文将介绍Unity引擎的特点、功能和应用领域,并探讨其为游戏开发者和创作者带来的潜力。
|
图形学
Unity 之 超级实用的小技巧
你不知道却超好用的使用Unity使用技巧
171 0
Unity 之 超级实用的小技巧
|
图形学 容器
有趣而又被忽略的Unity技巧
一个常见的工作情景是我们在调整场景内的某些组件参数时,没有注意到自己是在Play Mode的模式下进行的,从而导致修改没有被保存下来。这个问题的关键在于是我们没有意识到自己已经处在Play Mode,如果我们能够在修改参数的时候,清楚的意识到自己处于Play Mode,那么我们自然可以通过Copy Component来保存数据或者是选择在Editor Mode进行修改。
990 0
|
算法 测试技术 图形学
unity的一些重要技巧
统一所有的模型的面朝向(Z轴正向或者反向) 对于所有具有面朝向的对象(例如角色)都应该遵守这一条。在统一面朝向的前提下,很多算法可以简化。 在开始就把Scale搞正确 请美术把所有导入的缩放系数设置为1,并且把他们的Transform的Scale设置为1,1,1。
982 0
|
图形学 Windows
Unity小技巧介绍
技巧一为字段声明的代码中加上[Tooltip(“XX”)]属性声明,在检视面板中,当鼠标悬停在字段名上,会出现Tooltip中指定的提示信息,让策划人员能更好地理解字段代表的意思。技巧二在层级视图中选中游戏对象,按快捷键Shift + Alt + A可以快速设置对象激活状态。
1239 0
|
图形学 Ubuntu