查看: 46102|回复: 200

[在unity中制作] 下载assetbundles

  [复制链接]

11

主题

11

帖子

292

积分

vip会员

Rank: 1

积分
292
发表于 2016-7-13 19:09:57 | 显示全部楼层 |阅读模式
下载assetbundles

本节假设你已经学会了如何建立资产包。如果你还没有,请看建筑assetbundles

有两种方式来下载资源包

非缓存。这是通过创建一个新的WWW的对象。在中是没有缓存到统一的缓存文件夹在本地存储设备。
缓存:这是通过使用www.loadfromcacheordownload呼叫。该资源包缓存到统一的缓存文件夹在本地存储设备。WebPlayer共享缓存允许多达50 MB的缓存的资源包。PC / Mac的独立应用程序和iOS和Android应用程序都有一个极限4 GB。网络播放器应用程序使用一个专用的高速缓存被限制在缓存许可协议中指定的字节数。请参阅脚本文档其他平台。
这是一个非缓存下载的一个例子:

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.LoadAsset(AssetName));
                   // Unload the AssetBundles compressed contents to conserve memory
                   bundle.Unload(false);

     } // memory is freed from the web stream (www.Dispose() gets called implicitly)
   }
}

推荐的方式是使用下载资源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.LoadAsset(AssetName));
                    // Unload the AssetBundles compressed contents to conserve memory
                    bundle.Unload(false);

        } // memory is freed from the web stream (www.Dispose() gets called implicitly)
    }
}

当你访问资源包。属性,下载的数据提取和资源对象被创建。在这一点上,你准备加载包含包中的对象。第二个参数传递给LoadFromCacheOrDownload指定下载哪个版本的资源包。如果该资源不存在缓存中或有一个版本低于要求,LoadFromCacheOrDownload将下载的资源包。否则将从缓存中加载资源包。

请注意,只有一个资源包下载完成每帧时,下载www.loadfromcacheordownload。

全部放在一起

现在,组件的地方是你可以建立一个场景,将允许你加载资源包和屏幕上显示的内容。
下载assetbundles
最终的项目结构
首先要创建一个空的游戏对象GameObject->CreateEmpty。拖动cachingloadexample脚本到空的游戏你刚刚创建的对象。然后在bundleurl字段类型的URL你的资源包。我们已经把这个目录中的项目你可以复制文件的目录位置和添加前缀文件:/ /,例如文件:/ / C:/ unityprojects / assetbundlesguide /资产/资源/ cube.unity3d

现在你可以在编辑器中点击播放,你应该看到立方体从资源包加载预置。

在编辑器加载资源包

在编辑器中工作时要求必须建立和加载可以减缓发展过程。例如,如果一个资源包资产改良这将需要的资源加以改造和生产环境中它是最有可能的,所有的资源都建在一起,因此在更新一个资源包一个冗长的操作过程。更好的方法是在编辑,将负载的资产而不是直接加载它资源包有一个单独的代码路径。这样做可以使用resources.loadassetatpath(编辑)。

// C# Example
// Loading an Asset from disk instead of loading from an AssetBundle
// when running in the Editor
using System.Collections;
using UnityEngine;

class LoadAssetFromAssetBundle : MonoBehaviour
{
    public Object Obj;

    public IEnumerator DownloadAssetBundle<T>(string asset, string url, int version) where T : Object {
        Obj = null;

#if UNITY_EDITOR
        Obj = Resources.LoadAssetAtPath("Assets/" + asset, typeof(T));
        yield return null;

#else
        // Wait for the Caching system to be ready
        while (!Caching.ready)
            yield return null;

        // Start the download
        using(WWW www = WWW.LoadFromCacheOrDownload (url, version)){
            yield return www;
            if (www.error != null)
                        throw new Exception("WWW download:" + www.error);
            AssetBundle assetBundle = www.assetBundle;
            Obj = assetBundle.LoadAsset(asset, typeof(T));
            // Unload the AssetBundles compressed contents to conserve memory
            bundle.Unload(false);

        } // memory is freed from the web stream (www.Dispose() gets called implicitly)

#endif
    }
}


回复

使用道具 举报

0

主题

855

帖子

2822

积分

vip会员

Rank: 1

积分
2822
发表于 2016-7-13 19:32:27 | 显示全部楼层
好东西,多些楼主分享
回复 支持 反对

使用道具 举报

0

主题

884

帖子

2921

积分

vip会员

Rank: 1

积分
2921
发表于 2016-7-13 19:32:28 | 显示全部楼层
这个必须顶,,,,
回复 支持 反对

使用道具 举报

0

主题

918

帖子

3025

积分

vip会员

Rank: 1

积分
3025
发表于 2016-7-13 19:47:04 来自手机 | 显示全部楼层
不错 可以下来研究研究
回复 支持 反对

使用道具 举报

0

主题

888

帖子

2927

积分

vip会员

Rank: 1

积分
2927
发表于 2016-7-13 20:25:47 | 显示全部楼层
我知道楼主一向黑~~~~~
回复 支持 反对

使用道具 举报

0

主题

851

帖子

2807

积分

vip会员

Rank: 1

积分
2807
发表于 2016-7-13 20:57:52 来自手机 | 显示全部楼层
恩,好资源~ 哈哈~
回复 支持 反对

使用道具 举报

0

主题

846

帖子

2781

积分

vip会员

Rank: 1

积分
2781
发表于 2016-7-13 21:48:11 来自手机 | 显示全部楼层
看看贵不贵,不贵就下
回复 支持 反对

使用道具 举报

0

主题

893

帖子

2895

积分

vip会员

Rank: 1

积分
2895
发表于 2016-7-13 22:09:16 | 显示全部楼层
好东西,所噶
回复 支持 反对

使用道具 举报

0

主题

833

帖子

2752

积分

vip会员

Rank: 1

积分
2752
发表于 2016-7-13 22:27:27 来自手机 | 显示全部楼层
看看价钱,然后考虑。
回复 支持 反对

使用道具 举报

0

主题

1191

帖子

3772

积分

vip会员

Rank: 1

积分
3772
发表于 2016-7-13 22:58:56 | 显示全部楼层
恩,好资源~ 哈哈~
回复 支持 反对

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部