Unity AssetBundle的几个加载方式
string path = @"AssetBundles/scene/cubewall.ab";
string cacheDownloadPath = @"file://D:\UnityWorkSpace\FifthMonthWork_Groups\AssetBundle_Demo\AssetBundles\scene\cubewall.ab";
string tempWebAddress = @"http://localhost/AssetBundles/scene/wall.ab";
//第一种加载AB的方式,异步进行加载从二进制文件中
IEnumerator LoadAB()
{
AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));
yield return request;
AssetBundle ab = request.assetBundle;
GameObject wallPrefab = ab.LoadAsset<GameObject>("CubeWall");
Instantiate(wallPrefab);
}
//第二种进行资源加载,同步加载
Instantiate(AssetBundle.LoadFromMemory(File.ReadAllBytes(path)).LoadAsset<GameObject>("CubeWall"));
//第三种加载AB的方式,LoadFromFile【从文件进行加载】
AssetBundle ab = AssetBundle.LoadFromFile("AssetBundles/scene/wall.ab");
GameObject wallPrefab = ab.LoadAsset<GameObject>("Wall");
Instantiate(wallPrefab);
//第四种加载AB的方式,LoadFromFileAsync【从文件进行异步加载】
IEnumerator LoadFileAsync()
{
AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(path);
yield return request;
AssetBundle ab = request.assetBundle;
Instantiate(ab.LoadAsset<GameObject>("CubeWall"));
}
//第五种加载AB的方式,WWW.LoadFromCacheOrDownload - 从缓存中加载和下载
IEnumerator LoadCacheOrDownloadFromFile(string path)
{
while (Caching.ready == false)
yield return null;
WWW www = WWW.LoadFromCacheOrDownload(path, 1);
yield return www;
if( !string.IsNullOrEmpty(www.error) )
{
Debug.Log(www.error);
yield break;
}
AssetBundle ab = www.assetBundle;
GameObject wallPrefab = ab.LoadAsset<GameObject>("CubeWall");
Instantiate(wallPrefab);
}
//第六种加载AB的方式,UnityWebRequest,网页请求进行加载【第一种方法】
IEnumerator UseUnityWebRequest(string path)
{
//1、使用UnityWebRequest.GetAssetBundle(路径)【服务器 / 本地都可以】 去获取到网页请求
UnityWebRequest request = UnityWebRequest.GetAssetBundle(path);
//2、等待这个请求进行发送完
yield return request.SendWebRequest();
//3、发送完请求之后,就要从DownloadHandlerAssetBundle进行获取一个request,得到出来的是一个AssetBundle类对象
AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);
//4、用获取到的AssetBundle对象去加载资源泛型是GameObject
GameObject obj = ab.LoadAsset<GameObject>("Wall");
//5、实例化出这个GameObject对象
Instantiate(obj);
}
//第六种加载AB的方式,UnityWebRequest,网页请求进行加载【第二种方法】
IEnumerator UseUnityWebRequest2(string path)
{
UnityWebRequest request = UnityWebRequest.GetAssetBundle(path);
yield return request.SendWebRequest();
AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
GameObject obj = ab.LoadAsset<GameObject>("Wall");
Instantiate(obj);
}
读取Manifest文件,获取它们的依赖关系并且加载出来
AssetBundle manifestAB = AssetBundle.LoadFromFile("AssetBundles/AssetBundles");
AssetBundleManifest manifest = manifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
string[] strArr = manifest.GetAllDependencies("scene/cubewall.ab");
foreach (var item in strArr)
{
AssetBundle.LoadFromFile("AssetBundles/" + item);
}
【待继续往后写】
Unity AssetBundle的几个加载方式的更多相关文章
- Unity AssetBundle的生成、加载和热更新
当前使用的是unity2018.2.6版本. 生成AssetBundle 这个版本生成AssetBundle有两种方式,一种是在资源的Inspector面板下边配置AssetBundle名称,然后调用 ...
- Unity资源加载路径及加载方式小结
Unity3D中的资源路径路径属性 路径说明Application.dataPath 此属性用于返回程序的数据文件所在文件夹的路径.例如在Editor中就是Assets了.Application.st ...
- AssetBundle资源打包与加载
AssetBundle资源打包 1.AssetLabels资源标签 文件名:资源打包成AssetBundle后的文件名,类似于压缩包的名字 后缀:自定义 文件名和后缀名都是小写格式(大写会自动转为小 ...
- 二、从GitHub浏览Prism示例代码的方式入门WPF下的Prism之Modules的几种加载方式
这一篇梳理Prism中07示例Module的几种加载方式. 07示例分为了5个,有5种不同的Module加载方式. 我们开始学习加载Modules 观察07-Modules-Appconfig示例 分 ...
- iOS 正确选择图片加载方式
正确选择图片加载方式能够对内存优化起到很大的作用,常见的图片加载方式有下面三种: //方法1 UIImage *imag1 = [UIImage imageNamed:@"image.png ...
- sql*loader的直接加载方式和传统加载方式的性能差异
1.确认数据库版本 2.数据准备 3.创建导入表及控制文件 4.直接加载方式演示 查看具体的日志: 5.传统加载方式演示 查看日志文件: 6.结论及两种方式的差异 经过比对direct比convent ...
- 浅谈Entity Framework中的数据加载方式
如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Arc ...
- log4j加载方式导致的bae和sae部署异常
这2天改在bae上部署代码,为了便于程序的功能测试,引入了log4j日志,但是问题来了..测试程序采用的是spring3.2.8框架搭建,web.xml引入日志代码为: <context-par ...
- 链接库lib和dl的概念,加载方式的区别
使用LR进行基于windows socket协议做接口测试,只提供了lr_load_dll方法来动态加载动态链接库.之前学习阶段,对TinyXML的学习,使用的静态链接库,当时在程序调用的时候方法也跟 ...
随机推荐
- SpringBoot@GeneratedValue 四种参数
按照大家学习SpringBoot的经验来看, SpringBoot的@GeneratedValue 是不需要加参数的,但是如果数据库控制主键自增(auto_increment), 不加参数就会报错.( ...
- Arrays类的运用,二分法,数组的复制,命令行参数的运用,二维数组,Object,equals
/*Arrays jdk中为了便于开发,给开发者提供了Arrays类, 其中包含了很多数组的常用操作.例如快速输出.排序.查找等.*/ import java.util.Arrays; public ...
- java 文件目录树
1. 目标格式,使用tree命令时,目录树格式如下. public class TreeTest { public static void main(String[] args) { File roo ...
- 分割字符串和截取字符串:split 和substring
//按“,”截取字符串 String id="123123,234534,453456"; String[] idArry = id.trim().split(",&qu ...
- C程序设计实验报告
试验项目:1.字符与ASCLL码 2.运算符与表达式的运用 3.顺序结构应用程序 4.数学函数的算法描述 5.鸡兔同笼的算法描述 6.确定坐标的算法描述 姓名:郭薪 实验地点:514实验室 试 ...
- L1-046 整除光棍 大数除法
L1-046 整除光棍(20 分) 这里所谓的"光棍",并不是指单身汪啦~ 说的是全部由1组成的数字,比如1.11.111.1111等.传说任何一个光棍都能被一个不以5结尾的奇数整 ...
- ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
1.之前搭建的kafka,过了好久,去启动kafka,发现报如下下面的错误,有错误就要解决了. 然后参考:https://blog.csdn.net/hello_world_qwp/article/d ...
- hiper工具查看页面加载时间
先需要下载 cnpm i hiper -g # 当我们省略协议头时,默认会在url前添加`https://` # 最简单的用法 hiper baidu.com # 如何url中含有任何参数,请使用双引 ...
- 使用Windows Service Wrapper快速创建一个Windows Service 如nginx
前言 今天介绍一个小工具的使用.我们都知道Windows Service是一种特殊的应用程序,它的好处是可以一直在后台运行,相对来说,比较适合一些需要一直运行同时不需要过多用户干预的应用程序,这一类我 ...
- JS-两个空数组为什么不相等?
var a = [], b = []; console.log(a==b); 控制台的打印结果是什么?答案是:false. 接下来看解析: 原始值的比较是值的比较: 它们的值相等时它们就相等(==) ...