17 Resources AssetBundle资源打包
Resources
在Unity中可以使用www类加载远程文件或本地文件,或是在脚本中定义字段或数组从外部拖入.
在Unity中提供了Resources类读取资源
要通过Resources类读取的文件必须将要读取的文件放到Assets下创建的Resources(名字唯一)文件夹下.
在脚本中通过Resources类的方法可直接加载Resources文件夹中的数据

1.通过名称获取资源
Resources.Load("文件名");
2.通过名称获取指定类型的资源(泛型方法)
Resources.Load<Texture>("文件名");
3.通过名称获取指定类型的资源
Resources.Load("文件名",typeof(Texture)) as Texture;
//通过代码直接创建游戏对象
//CreatePrimitive,创建一个带有基本网格渲染器和相应放入碰撞器的游戏对象
GameObject cylinder = GameObject.CreatePrimitive (PrimitiveType.Cylinder);
cylinder.transform.position = new Vector3 (2f, 0, 0);
cylinder.GetComponent<MeshRenderer> ().material.color =
new Color (Random.value, Random.value, Random.value, Random.value);
注:通过此方法只能 创建几种系统指定的游戏物体(Cube,sphere...).

AssetBundle类资源打包
AssetBundle是Unity引擎提供的一种压缩资源文件,文件的扩展名通常为unity3d或assetbundle
可以使用AssetBundle打包多种类型的资源


Editor打包AssetBundle
早Assets下创建Editor文件夹,在里面创建一个用作打包的类



注:如果资源存在依赖关系,打包时需要连同依赖资源一起打包
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
/// <summary>
/// 编辑器类,用来实现AssetBundle打包
/// </summary>
public class AssetBundle
{
//MenuItem:可以在Unity编辑器的菜单栏中出现一个后面()中的选项,下面方法为编辑器点击响应的方法
//因为编辑器类是静态类,所以必须是静态方法,在方法中实现对选中的资源进行打包
[MenuItem ("AssetBundle/Build")]
static void BuildAssetBundle ()
{
BuildPipeline.BuildAssetBundles (Application.dataPath + "/AssetBundle",
BuildAssetBundleOptions.None,BuildTarget.StandaloneOSXIntel);
}
}
创建AssetBundle解压(加载)资源

脚本如下:
//解压资源包的协程方法
IEnumerator LoadAsset ()
{
//配置打包后的资源所在文件夹
string assetPath = "file://" + Application.dataPath + "/AssetBundle/";
//总的Manifest文件名
string manifestName = "AssetBundle";
//要加载的目标资源的名字
string targetAssetName = "Cube"; //LoadFromCacheOrDownload:从缓存中加载一个带有特定版本号的资源包
//如果该资源包没有缓存,就会通过路径加载,他将自动下载并存储在高速缓存中,一遍下次从本地读取
WWW wwwManifest = WWW.LoadFromCacheOrDownload (assetPath + manifestName, 0);
//等待资源下载完成
yield return wwwManifest; //判断如果下载没有出错
if (wwwManifest.error == null) {
Debug.Log ("下载没问题");
//得到AssetBundle的包
UnityEngine.AssetBundle maniFestBundle = wwwManifest.assetBundle; //通过清单得到manifest文件对于资源的说明,以及各个资源的依赖关系
AssetBundleManifest manifest = (AssetBundleManifest)maniFestBundle.LoadAsset ("AssetBundleManifest");
//根据总的资源清单获取目标资源
string[] dps = manifest.GetAllDependencies (targetAssetName);
//保存所有的依赖资源
UnityEngine.AssetBundle[] abs = new UnityEngine.AssetBundle[dps.Length];
//遍历所有资源
for (int i = 0; i < dps.Length; i++) {
//找到各个依赖资源所在的位置
string durl = assetPath + dps [i];
//根据路径下载资源
WWW dwww = WWW.LoadFromCacheOrDownload (durl, 0);
//等待下载完成
yield return dwww;
//将下载的目标资源从头到尾存放到资源集合中
abs [i] = dwww.assetBundle;
}
//加载目标文件
WWW cubewww = WWW.LoadFromCacheOrDownload (assetPath + targetAssetName, 0);
//等待下载完成
yield return cubewww;
if (cubewww.error == null) {
//得到Cube的资源列表
UnityEngine.AssetBundle cubeBundle = cubewww.assetBundle;
//通过资源包获取相对应的资源
GameObject cube = cubeBundle.LoadAsset (targetAssetName) as GameObject;
//创建对象
Instantiate (cube, Vector3.zero, Quaternion.identity);
}
}
}
什么是AssetBundle,可以包含哪些文件,它们如何在开发过程中使用?
1、AssetBundles 是有 Unity 编辑器在编辑环境中创建的一些列的文件,这些文件可以被用在项目的运行环境中(run-time)。
2、AssetBundles 可以包括的资源文件有模型文件(models)、材质(materials)、纹理(textures)和场景(scenes)。
3、具体来说,一个 AssetBundle 就是把一系列的资源文件或者场景文 件以某种方式紧密保存的一个文件。这个 AssetBundle 文件可以被单独加载到可执行的应用程序中。
4、AssetBundles 可以由被 Unity 构建的游戏或者应用按需加载使用。这允许对像模型、纹理、音频、甚至是整个的游戏场景这样的资源进行流式加载和异步加载。
5、AssetBundles 可以预缓存和存储在本地,这样在运行时就可以立即加载它们。但是 AssetBundles 技术的主要的目的是在需要的时候能够从远端的服务器上按需请求特定的资源,并加载到游戏中。
描述AssetBundle 和 Reousrces 的区别
1、Resources是动态内部调用,Resources在编辑环境下是project窗口的一个文件夹,调用里面的资源,可以用Resources类,比如Resources.Load,打包后这个文件夹是不存在的,会统一生成assets资源。
2、AssetBundle 是外部调用,要用AssetBundle 首先要先把资源打包为.assetbundle文件,再动态的去加载这个文件,本地或者网络服务器都可以使用。
17 Resources AssetBundle资源打包的更多相关文章
- AssetBundle资源打包与加载
AssetBundle资源打包 1.AssetLabels资源标签 文件名:资源打包成AssetBundle后的文件名,类似于压缩包的名字 后缀:自定义 文件名和后缀名都是小写格式(大写会自动转为小 ...
- Unity5.4新版AssetBundle资源打包
(1)新版本 唯一打包API Buildpipeline.BuildAssetBundle (2)在资源的Inpector界面最下方可设置该资源的assetbundleName, 每个assetbun ...
- Unity中AB资源打包简单的脚本
脚本应该放在Editor文件夹下 using System.Collections; using System.Collections.Generic; using UnityEngine; usin ...
- 跟我从零基础学习Unity3D开发--资源打包篇(AssetBundle)
好久没更新了,一直在加班敢项目进度.这里和关注我的博客的童鞋表示一下歉意!这里有我录的Unity3D从零开始的视频教程大家可以关注一下:http://www.imooc.com/view/555 视 ...
- AssetBundle系列——共享资源打包/依赖资源打包
有人在之前的博客中问我有关共享资源打包的代码,其实这一块很简单,就两个函数: BuildPipeline.PushAssetDependencies():依赖资源压栈: BuildPipeline.P ...
- AssetBundle系列——游戏资源打包(二)
本篇接着上一篇.上篇中说到的4步的代码分别如下所示: (1)将资源打包成assetbundle,并放到自定目录下 using UnityEditor; using UnityEngine; using ...
- AssetBundle系列——游戏资源打包(一)
将本地资源打包,然后放到资源服务器上供游戏客户端下载或更新.服务器上包含以下资源列表:(1)游戏内容资源assetbundle(2)资源维护列表,包含每个资源的名字(完整路径名)和对应的版本号[资源名 ...
- [Unity Asset]AssetBundle系列——游戏资源打包
转载:http://www.cnblogs.com/sifenkesi/p/3557231.html 将本地资源打包,然后放到资源服务器上供游戏客户端下载或更新.服务器上包含以下资源列表:(1)游戏内 ...
- Unity资源打包学习笔记(一)、详解AssetBundle的流程
转载请标明出处:http://www.cnblogs.com/zblade/ 本文参照unity官网上对于assetBundle的一系列讲解,主要针对assetbundle的知识点做一个梳理笔记,也为 ...
随机推荐
- 【PAT甲级】1031 Hello World for U (20 分)
题意: 输入一个字符串长度为5~80,以'U'型输出,使得底端一行字符数量不小于侧面一列,左右两列长度相等. trick: 不把输出的数组全部赋值为空格为全部答案错误,可能不赋值数组里值为0,赋值后是 ...
- java 实现图片上传功能
1:jsp 页面上传图片按钮在这里我就写相关的代码 <div class="control-group"> <label class="control- ...
- [经验] Linux 怎么连接 Xshell?
(1) 首先, 你要先有一个可以正常运行的 Linux 系统, 当然一般情况下我们是把这个系统放在虚拟机里的, 我所使用的是 ubuntu-18.04.2-live-server-amd64.iso ...
- 「luogu2633」Count on a tree
「luogu2633」Count on a tree 传送门 树上主席树板子. 每个节点的根从其父节点更新得到,查询的时候差分一下就好了. 参考代码: #include <algorithm&g ...
- Centos7 nginx的负载均衡概念与配置
一.负载均衡概念 负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台 ECS 的流量分发控制服务.负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单 ...
- centos7搭建svn服务器及客户端设置
centos7搭建svn服务器及客户端设置 centos7貌似预装了svn服务(有待确认),因此我们直接启动该服务即可 一.svn服务端配置(服务器IP假设为192.168.100.1) 步骤1:创建 ...
- VBS 脚本对象
Dictionary对象(1) 1. 属性: a) compareMode b) count c) key d) item 2. ...
- Python中安装框架如何换源以及升级
想安装tornado框架,但总是有奇怪错误,如下: 如果按照默认的下载源,就会死活不成功,出现 Traceback (most recent call last): File "e:\pyt ...
- SpringMVC:自定义视图及其执行过程
一:自定义视图 1.自定义一个实现View接口的类,添加@Component注解,将其放入SpringIOC容器 package com.zzj.view; import java.io.PrintW ...
- Vue下URL地址栏参数改变却不能刷新界面
在完成毕业设计(基于Vue的信息资讯展示与管理平台)的过程中,处理如下图所示的 点击左侧栏目列表跳转到对应文章列表 的问题时,初次点击可以跳转到对应的页面,但是当第二次点击时,虽然地址栏的参数改变了, ...