加载 AssetBundle 的四种方法

1、AssetBundle.LoadFromMemoryAsync(byte[] binary, uint crc = 0);

   返回AssetBundleCreateRequest.Use assetBundle property to get an AssetBundle once it is loaded.

  Compared to LoadFromMemory, this version will perform AssetBundle decompression on a background thread, and will not create the AssetBundle object immediately.

 IEnumerator LoadFromMemoryAsync(string path)

    {

        AssetBundleCreateRequest createRequest = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));

        yield return createRequest;

        AssetBundle bundle = createRequest.assetBundle;

        var prefab = bundle.LoadAsset.<GameObject>("MyObject");
Instantiate(prefab); }

2、AssetBundle.LoadFromFile(string path, uint crc = 0, ulong offset = 0);

  返回 AssetBundle

  This API is highly-efficient when loading uncompressed bundles from local storage. LoadFromFile will load the bundle directly from disk if the bundle is uncompressed or chunk (LZ4) compressed.

  Loading a fully compressed (LZMA) bundle with this method will first decompress the bundle before loading it into memory.

  Compared to LoadFromFileAsync, this version is synchronous and will not return until it is done creating the AssetBundle object.

public class LoadFromFileExample extends MonoBehaviour {
function Start() {
var myLoadedAssetBundle = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "myassetBundle"));
if (myLoadedAssetBundle == null) {
Debug.Log("Failed to load AssetBundle!");
return;
}
var prefab = myLoadedAssetBundle.LoadAsset.<GameObject>("MyObject");
Instantiate(prefab);
}
}

3、WWW.LoadFromCacheOrDownload

  Loading an AssetBundle from a remote location will automatically cache the AssetBundle. If the AssetBundle is compressed, a worker thread will spin up to decompress the bundle and write it to the cache. Once a bundle has been decompressed and cached, it will load exactly like AssetBundle.LoadFromFile.

  此方法会缓存,所以1:assetbundle尽量小。2:一次仅下载1个asset bundle。

  If the cache folder does not have any space for caching additional files, LoadFromCacheOrDownload will iteratively delete the least-recently-used AssetBundles from the Cache until sufficient space is available to store the new AssetBundle. If making space is not possible (because the hard disk is full, or all files in the cache are currently in use), LoadFromCacheOrDownload() will bypass Caching and stream the file into memory

  In order to force LoadFromCacheOrDownload the version parameter (the second parameter) will need to change. The AssetBundle will only be loaded from cache if the version passed to the function matches the version of the currently cached AssetBundle.

using UnityEngine;
using System.Collections; public class LoadFromCacheOrDownloadExample : MonoBehaviour
{
IEnumerator Start ()
{
while (!Caching.ready)
yield return null; var www = WWW.LoadFromCacheOrDownload("http://myserver.com/myassetBundle", );
yield return www;
if(!string.IsNullOrEmpty(www.error))
{
Debug.Log(www.error);
yield return;
}
var myLoadedAssetBundle = www.assetBundle; var asset = myLoadedAssetBundle.mainAsset;
}
}

4、public static Networking.UnityWebRequest GetAssetBundle(string uri, uint version, uint crc);

  After returning the request, pass the request object intoDownloadHandlerAssetBundle.GetContent(UnityWebRequest).

IEnumerator InstantiateObject()

    {
string uri = "file:///" + Application.dataPath + "/AssetBundles/" + assetBundleName; UnityEngine.Networking.UnityWebRequest request = UnityEngine.Networking.UnityWebRequest.GetAssetBundle(uri, );
yield return request.Send();
AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
GameObject cube = bundle.LoadAsset<GameObject>("Cube");
GameObject sprite = bundle.LoadAsset<GameObject>("Sprite");
Instantiate(cube);
Instantiate(sprite);
}

  The advantages of using UnityWebRequest is that it allows developers to handle the downloaded data in a more flexible manner and potentially eliminate unnecessary memory usage. This is the more current and preferred API over the UnityEngine.WWW class.

参考:

加载 AssetBundle 的四种方法的更多相关文章

  1. (一)JQuery动态加载js的三种方法

    Jquery动态加载js的三种方法如下: 第一种: $.getscript("test.js"); 例如: <script type="text/javascrip ...

  2. JavaScript实现判断图片是否加载完成的3种方法整理

    JavaScript实现判断图片是否加载完成的3种方法整理 有时候我们在前端开发工作中为了获取图片的信息,需要在图片加载完成后才可以正确的获取到图片的大小尺寸,并且执行相应的回调函数使图片产生某种显示 ...

  3. js 动态加载事件的几种方法总结

    本篇文章主要是对js 动态加载事件的几种方法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助   有些时候需要动态加载javascript事件的一些方法往往我们需要在 JS 中动态添 ...

  4. VUE 动态加载组件的四种方式

    动态加载组件的四种方式: 1.使用import导入组件,可以获取到组件 var name = 'system'; var myComponent =() => import('../compon ...

  5. PHP自动加载SPL的四种处理方式

    libs目录下有3个类文件: Test.class.php <?php class Test { public function __construct() { echo "Loadi ...

  6. 异步加载js的三种方法

    js加载时间线 : 它是根据js出生的那一刻开始记录的一系列浏览器按照顺序做的事,形容的就是加载顺序,可以用来优化什么东西,理论基础,背下来. 1.创建Document对象,开始解析web页面.解析H ...

  7. Java加载资源文件几种方法

    from: http://andyzhu.blog.51cto.com/4386758/775836/ import java.net.URL; import org.springframework. ...

  8. flask开启debug模式的两种方法、加载配置文件的两种方法、URL传参的四种方法

    from flask import Flask app = Flask(__name__) # app.config.update(DEBUG=True)#开启debug模式 #加载配置文件方法一 # ...

  9. jQuery页面加载初始化的3种方法

    jQuery 页面加载初始化的方法有3种 ,页面在加载的时候都会执行脚本,应该没什么区别,主要看习惯吧,本人觉得第二种方法最好,比较简洁. 第一种: $(document).ready(functio ...

随机推荐

  1. python3.5安装Numpy、mayploylib、opencv等额外库

    安装Python很简单,但是安装额外的扩展库就好麻烦,没有了第三方库的Python就是一个鸡肋~~  我们现在安装NumPy库 1. 首先这里假设你已经安装了Python了,不会的去看我的另一篇博文( ...

  2. oracle 服务名 数据库名 实例名

    服务名 show parameter service_name 实例名 show parameter instance 数据库名 show parameter db conn username/pas ...

  3. hadoop distcp 命令& 不同hadoop 版本cp

    # 1 版本相同 hadoop distcp -m 10 -bandwidth 150 hdfs://ns1/user/hive/warehouse/public.db/public_oi_fact ...

  4. SPring cloud (3)A Ribbon 负载均衡 配置初步

    1.引用pom <dependency> <groupId>org.springframework.cloud</groupId> <artifactId&g ...

  5. beego orm操蛋问题:操作都需要主键

    查看bee generate appcode自动生成的代码,会发现orm操作都是以主键为依据的. 如果我不想根据主键怎么操作?用 ORM.Raw(cmd).Exec()吧,cmd=[你的mysql语句 ...

  6. 着色器shaders

    着色器(shader)是运行在GPU上的小程序,为图形渲染管线某个特定部分而运行. 着色器也是一种非常独立的程序,它们之间不能相互通信,它们之间唯一沟通只有通过输入输出. GLSL是为图形计算量身定制 ...

  7. 尚硅谷springboot学习18-日志使用

    默认配置 SpringBoot默认帮我们配置好了日志 //记录器 Logger logger = LoggerFactory.getLogger(getClass()); @Test public v ...

  8. MOBA项目问题记录

    1,动态变化的文本,使用较多时,耗时大,原因:只要字符串发生改变就会重绘,原理:每个字符的宽度不一样 项目中使用了网上写的一个文本控件,大概类型UGUI的东西,实现了字符缓存,绘制过的字符就不会再重建 ...

  9. UNITY Profiler 真机调试

    1,WIFI方式, 2,ADB方式WIFI方式:数据通过WIFI在手机和电脑间传输,且手机和电脑必须在一个网段ADB方式如下:数据通过数据线在手机和电脑间传输.显然ADB方式速度快,无网段限制,比较好 ...

  10. Java 指针or引用?

    由一个问题引出:Java到底是传引用还是传值? 如果是传引用,那么为何badSwap函数并没有如预想的那样交换变量? public void badSwap(int var1, int var2) { ...