Unity5.4 Assetbundles官方说明四(AssetBundles的下载和加载)

转载请注明出处!
  前面三篇文章主要介绍AssetBundle的简单打包和基本原理,接下来几篇文章将介绍AssetBundles下载方面的内容。本篇假设你已基本了解了创建AssetBundles的操作,如果还不清楚,请先查看我的第一篇文章: Unity5.4 AssetBundles官方说明一(AssetBundle打包详解)
说明:本篇只说明基本的下载和加载,不包含依赖资源,所以有依赖的资源会丢失。例如一个Cube使用了一个名为Mat的材质,那么加载Cube会导致这个Cube的Mat材质丢失,不会显示。依赖资源的加载将会在后面的文章中讲解。
一、Downloading AssetBundles(下载资源包)
    这里有两种方式下载AssetBundles:
    1、非缓存方式下载:通过创建一个WWW类对象来下载(WWW www = new WWW(url)),这种方式不会缓存到本地存储的文件中。
    2、缓存方式下载:通过使用WWW.LoadFromCacheOrDownload()进行下载,这种方式会自动缓存在本地存储设备的Unity缓存文件夹中。PC/MAC独立应用程序以及IOS/Android应用程序都有4GB的大小限制。对于其他平台,可以查看相关的脚本文档。

下面是官方的非缓存下载的例子脚本:

using System;
using UnityEngine;
using System.Collections;

class NonCachingLoadExample : MonoBehaviour {
public string BundleURL; //下载地址
public string AssetName; //资源名
IEnumerator Start() {
// 从URl地址下载文件,它会被临时保存在缓存中
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.LoadAsset(AssetName));//创建资源名为
AssetName的资源
// 记得要从缓存中清除(
Unload

bundle.Unload(false);

} // 自动从Web流中释放内存(使用using()会隐式WWW.Dispose()进行释放)
}
}


    官方推荐的下载AssetBundles方式是使用WWW.LoadFromCacheOrDownload(),它的工作原理是先通过(版本号和下载地址)先在本地去找看有没有这个Assetbundle,如果有直接返回对象,如果没有的话,在根据这个下载地址重新从服务器或者本地下载。这里版本号起到了很重要的作用,举个例子,同一下载地址版本号为1的时候已经下载到本地,此时将版本号的参数改成2 那么它又会重新下载,如果还保持版本号为1那么它会从本地读取,因为本地已经有版本号为1的这个Assetbundle了。你不用担心你的资源本地下载过多,也不用自己手动删除他们,这一切的一切Unity会帮我们自动完成,它会自动删除掉下载后最不常用的Assetbundle ,如果下次需要使用的话只要提供下载地址和版本后它会重新下载。脚本例子如下

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 (){
//等待缓存系统
完成缓存准备

while (!Caching.ready)
yield return null;

//如果本地缓存中存在相同版本号的Assetbundle资源,就会从本次返回对象

//否则会根据版本号从BundleURL下载资源并保存在缓存中
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.LoadAsset(AssetName));
//
记得要从缓存中清除(Unload
bundle.Unload(false);

}
// 自动从Web流中释放内存(使用using()会隐式WWW.Dispose()进行释放)
}
}


请注意:当使用WWW.LoadFromCacheOrDownload下载时,每一帧最多只有一个Assetbundle完成下载。

一、使用脚本下载资源的 例子 (不包含依赖资源)
项目中文件如下图:
Unity5.4 Assetbundles官方说明四(AssetBundles的下载和加载) - IQ007伟哥 - IQ007伟哥的博客
 
    首先创建一个空物体,将 Non CachingLoadExample 脚本拖到刚刚创建的空物体上,然后在空物体的 Non CachingLoadExample 组件下输入 BundleURL路径,注意Windows平台上要给路径地址加上前缀“file://”,例如: file://C:/UnityProjects/AssetBundlesGuide/Assets/AssetBundles/Cube.unity3d 。然后运行程序即可下载。当然实际项目中可根据自己的需要来进行下载。
另一种使用 CachingLoadExample 脚本的方式与 Non CachingLoadExample 基本一致,在这里不再赘述。本篇中如有不当的地方,希望大家指出,我会积极改正,嘿嘿,最后祝大家学习愉快!
   我将在第十一篇中给出完整的项目源码(包括资源的打包、下载资源包、加载资源包、获取资源几依赖资源、使用资源等)。 下一篇将讲解从AssetBundle中加载和释放资源对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值