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资源打包的更多相关文章

  1. AssetBundle资源打包与加载

    AssetBundle资源打包  1.AssetLabels资源标签 文件名:资源打包成AssetBundle后的文件名,类似于压缩包的名字 后缀:自定义 文件名和后缀名都是小写格式(大写会自动转为小 ...

  2. Unity5.4新版AssetBundle资源打包

    (1)新版本 唯一打包API Buildpipeline.BuildAssetBundle (2)在资源的Inpector界面最下方可设置该资源的assetbundleName, 每个assetbun ...

  3. Unity中AB资源打包简单的脚本

    脚本应该放在Editor文件夹下 using System.Collections; using System.Collections.Generic; using UnityEngine; usin ...

  4. 跟我从零基础学习Unity3D开发--资源打包篇(AssetBundle)

    好久没更新了,一直在加班敢项目进度.这里和关注我的博客的童鞋表示一下歉意!这里有我录的Unity3D从零开始的视频教程大家可以关注一下:http://www.imooc.com/view/555  视 ...

  5. AssetBundle系列——共享资源打包/依赖资源打包

    有人在之前的博客中问我有关共享资源打包的代码,其实这一块很简单,就两个函数: BuildPipeline.PushAssetDependencies():依赖资源压栈: BuildPipeline.P ...

  6. AssetBundle系列——游戏资源打包(二)

    本篇接着上一篇.上篇中说到的4步的代码分别如下所示: (1)将资源打包成assetbundle,并放到自定目录下 using UnityEditor; using UnityEngine; using ...

  7. AssetBundle系列——游戏资源打包(一)

    将本地资源打包,然后放到资源服务器上供游戏客户端下载或更新.服务器上包含以下资源列表:(1)游戏内容资源assetbundle(2)资源维护列表,包含每个资源的名字(完整路径名)和对应的版本号[资源名 ...

  8. [Unity Asset]AssetBundle系列——游戏资源打包

    转载:http://www.cnblogs.com/sifenkesi/p/3557231.html 将本地资源打包,然后放到资源服务器上供游戏客户端下载或更新.服务器上包含以下资源列表:(1)游戏内 ...

  9. Unity资源打包学习笔记(一)、详解AssetBundle的流程

    转载请标明出处:http://www.cnblogs.com/zblade/ 本文参照unity官网上对于assetBundle的一系列讲解,主要针对assetbundle的知识点做一个梳理笔记,也为 ...

随机推荐

  1. HashMap的应用

    HashMap <String,String> hsMap=new HashMap<String,String> hsMap.put("1","v ...

  2. PL-USB2-BLASTER 使用说明

    PL-USB2-BLASTER 使用说明 PL-USB2-BLASTER就是USB BLATER II烧录器.官方文档在https://www.intel.com/content/dam/www/pr ...

  3. Python 基础之生成器

    一.生成器表达式 生成器本质是迭代器,允许自定义逻辑的迭代器迭代器和生成器区别:迭代器本身是系统内置的,重写不了.而生成器是用户自定义的,可以重写迭代逻辑生成器可以用来钟方式创建:    (1)生成器 ...

  4. CSS - 滑动门技术

    1. 概念: 1.1 为了使各种特殊形状的背景能够自适应元素中文本内容的多少,出现了CSS滑动门技术. 1.2 使各种特殊形状的背景能够自由拉伸滑动,以适应元素内部的文本内容,可用性更强. 1.3 最 ...

  5. VUE 父子组件之间通信传值 props和 $emit

    1.父组件传值给子组件 $props,子组件传值给父组件 $emit 父组件          <div id="app" >               <tr ...

  6. Oracle查看正在执行的存储过程

    正在执行的存储过程 select owner,name from v$db_object_cache where type like '%PROCE%' and locks >0 and pin ...

  7. JavaAgent学习小结

    前言 最近因为公司需要,需要了解下java探针,在网上找资料,发现资料还是有很多的,但是例子太少,有的直接把公司代码粘贴出来,太复杂了,有的又特别简单不是我想要的例子, 我想要这样的一个例子: jvm ...

  8. 【React Native错误集】Android error “Could not get BatchedBridge, make sure your bundle is packaged properly” on start of app

    问题1:Android error “Could not get BatchedBridge, make sure your bundle is packaged properly” on start ...

  9. MyEclipse插件github安装使用

    MyEclipse插件github安装使用   网络上的介绍一堆堆的,但是自己尝试了下,发现问题很多,就动手做个教程. 大纲 1.git客户端安装 2.ssh配置 3.egit安装配置 4.参考资料 ...

  10. VS中MFC项目文件特别大的解决办法

    转 来自http://m.zhizuobiao.com/vc/vc-18082800177/ 自己插个眼 项目文件比较大因为 项目下有个隐藏文件夹.vs  下面是解决办法 本文主要向大家介绍了VC编程 ...