翻译原址:https://docs.unity3d.com/2017...

AssetBundle 工作流程

开始使用AssetBundles(以后我简称他AB),遵循以下步骤,更多关于更多工作流的细节信息都可以在本节的其他页面找到。

把资源赋值给AB

把资源赋值给AB遵循以下步骤(以下步骤简称打标记)

1.在Project View中选择你想要赋值给AB的资源
2.在Inspector中检查选中的对象
3.在Inspector的最低端,你可以看见一部分是赋值AB,另一个是变体(不知道该咋翻译这个单词,大家可以理解为一个文件的后缀名)
4.左边这个下拉菜单是给AB赋值的,而右边的则是给变体(真的这个翻译的好别扭,真想叫它后缀名)赋值的。
5.点击左边的下拉菜单,你看到的是None,这意味着当前AB注册的名字
6.如果还没有被创建,你会看到一个列表如上图(翻译的时候我反正是没找着在哪儿,我这里附赠一张)

7.点击 New去创建一个新的AB(严谨一点说这里应该是去创建一个菜单,待会儿用于打包可以选择性被标记)
8.输入你想要创建的AB名称。注意一下AB的名字是支持文件夹那样的写法“/”,这样就可以添加一个子文件夹,例如:environment/forest 这样就会创建一个bundle叫做forest的子文件夹在environment
9.只要你选择或者创建了一个AB名称,你就可以根据你所需在右边创建一个Variant(变种,我以后就叫后缀名吧)。后缀名不是像要求AB时那样,他是一个后缀当然更不用 “/”

想要关于AB和附带的策略信息,参见文档 “Preparing Assets for AssetBundles”(https://docs.unity3d.com/2017... )

构建AB

在Assets文件夹下创建一个文件夹叫做Editor(之所以接下来的代码要放在Editor文件夹下是因为我们要对unity进行拓展只能放在这下面编辑器内容参见( https://docs.unity3d.com/2017... )),并在这个文件夹内放置一个脚本(新建)

using UnityEditor;public class CreateAssetBundles
{[MenuItem("Assets/Build AssetBundles")]static void BuildAllAssetBundles(){string assetBundleDirectory = "Assets/AssetBundles";if(!Directory.Exists(assetBundleDirectory){Directory.CreateDirectory(assetBundleDirectory);}BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None,        BuildTarget.Standalone);}
}

这段脚本首先会创建一个菜单栏,在顶部的Assets菜单下就可以找到一个叫Build AssetBundles(代码中MenuItem就会就创建这样一个菜单)如果你点击它,就会执行被这个Tag(一个函数被一个东西(例如MenuItem)标记就有了其他的作用)所标记而定函数的代码,当你点击Build AssetBundles后一个对话框和进度条。这将会把你的标记了的资源和ab名称放到上面代码中的assetBundleDirectory,这样就打好了一个AB(资源包)

要想知道这段代码具体做了什么,请参见文档(我是很排斥这种设计的,为啥不现在就说,但是后来想想人家毕竟是官方Document,不是教程也可以理解) “Building AssetBundles”( https://docs.unity3d.com/2017... )

把AB上传到外部存储

如果用户打算,从本地存储去加载,相信你会对AssetBundles.LoadFromFile这个Api感兴趣,用法如下:

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);
}

}

LoadFromFile 需要一个路径参数

如果你自己管理AB,并需要下载到你的游戏,你或许会对UnityWebRequest API感兴趣,例子如下:

IEnumerator InstantiateObject()
{string uri = "file:///" + Application.dataPath + "/AssetBundles/" + assetBundleName; UnityEngine.Networking.UnityWebRequest request = UnityEngine.Networking.UnityWebRequest.GetAssetBundle(uri, 0);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);
}
看起来很方便的样子,不过我从来没用过

GetAssetBundle(string,int)需要一个AB包的URL(英文原版是uri)第二个参数是哪种版本的ab你需要(因为每个版本的资源会发生变化ab包的内容也不一样)在这个例子中,我们任然指向一个本地URL,当然你可以指向你存放ab的位置。

UnityWebRequest 有一个专门处理AB的 DownloadHandlerAssetBundle 可以从这里面获取请求

不管你用什么方法去得到AB包,现在你要从AB包里面获取object,需要使用LoadAsset<T>(string)可以从ab包中加载资源,他需要一个泛型T,指的是这个资源加载出来后是什么类型的资源(Sprite,Object...),参数是指的你的资源相对于你ab包的路径。你可以随意的使用返回,回来的东西,就像其他一切unity内置的object,例如你可以在场景中创建一个GameObject,你只需要调用Instantiate函数。

更多信息关于加载AB,参见Using AssetBundles Natively(https://docs.unity3d.com/2017...)

AssetBundle Workflow相关推荐

  1. 「翻译」Unity中的AssetBundle详解(一)

    AssetBundles AssetBundle是一个存档文件,其中包含平台在运行时加载的特定资产(模型,纹理,预制,音频剪辑,甚至整个场景).AssetBundles可以表示彼此之间的依赖关系;例如 ...

  2. assetbundle能不能删除_Unity3d爬坑篇(2)之Assetbundle、Shader和Keyword

    本系列基于:BDFramework .Unity3D 2018.4.0 BDFramework:Simple! Easy! Beautiful! This is a powerful Unity3d ...

  3. 跟踪workflow instance 状态

    场景是这样的: 1.workflowruntime启动了持久化和监听服务 2.workfllowruntime创建多个实例,并启动,一些会长时间延时,一些会中途暂停,会不同的执行状态(业务状态) 3. ...

  4. [小明爬坑系列]AssetBundle原理介绍

    一.简介 Assetbundle 是Unity Pro提供提供的功能,它可以把多个游戏对象或者资源二进制文件封装到Assetbundle中,提供了封装与解包的方法使用起来很便利. 二.移动平台特点 A ...

  5. Captaris Workflow 6.0 EventService 执行效率低下的排除。

    如果您的Captaris Workflow Event Task执行的间隔时间超过30分钟,客户可能向您抱怨流程效率太低了,这时候你可以准备一个只包含Event Task的模型(我已经做了一个,点击此 ...

  6. oozie调度中的重试和手工rerun一个workflow

    在oozie中有Bundle.Coordinator和Workflow三种类型的job,他们之间可以有以下包含关系. Bundle > Coordinator > Workflow. 1. ...

  7. 混合云备份利用自定义Workflow保护MySQL的实践

    众所周知数据库的保护面临着诸多问题,其中之一就是维护数据底层文件的一致性.除了与数据库应用的深度集成的备份方案(如SAP HANA Backint等),松耦合的通用备份软件较难做到完美的数据库的一致性 ...

  8. 初步尝试Teamplate Workflow Web Part for SharePoint Portal Server

    试用了一天,记录一些使用体会,今天继续尝试.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:offi ...

  9. Unity5 AssetBundle系列——简单的AssetBundleManager

    一个AssetBundle同时只能加载一次,所以实际使用中一般会伴随着AssetBundle包的管理. 下面是一个简单的AssetBundle管理器,提供了同步和异步加载函数: using Unity ...

最新文章

  1. linux 源码安装e1000e,linux安装网卡e1000e
  2. python八大选择排序_Python实现选择排序
  3. JavaScript———从setTimeout与setInterval到AJAX异步
  4. 企服创业必修课丨神策数据与红杉中国联合发布规模化营销获客体系建设指南...
  5. (原创)c#学习笔记05--变量的更多内容01--类型转换01--隐式转换
  6. why there is always popup window for HANA
  7. 华为重磅反击,鸿蒙来了!
  8. PLSQL连接oracel数据库_用户无法登陆_oci.dll_配置问题
  9. mysql的安装、启动和基础配置 —— mac版本
  10. html5权威指南 预读,《HTML5权威指南》
  11. MyISAM的key_buffer_size和InnoDB的innodb_buffer_pool_size
  12. Android学习笔记---26_网络通信之资讯客户端,使用pull解析器,解析,从网络中获得的自定义xml文件
  13. 初识HTML5(一)
  14. ThinkPHP第七天(F函数使用,项目分组配置,项目分组模板文件放置规则配置)
  15. EGE基础入门篇(一):绘图基础知识
  16. HWSD土壤数据集下载及打开方法
  17. PrizmDoc HTML5文档查看器和Web API
  18. AlphaGo Zero 强化学习算法原理深度分析
  19. 计算机内部复制粘贴文件速度慢,电脑复制粘贴速度慢为什么
  20. 黑金开发板液晶显示图片

热门文章

  1. data transformation python_Python 编码为什么那么蛋疼?
  2. Python 中的 if __name__ == '__main__' 该如何理解
  3. jquery-11 如何制作鼠标右键菜单
  4. 元素或为1或为-1的行列式的值的估计
  5. 信号 应用场景 内置信号 内置信号操作 自定义信号
  6. 《Python编程:从入门到实践 》[Eric Matthes著] 中文pdf非扫描版
  7. C# 中xml数组的序列和反序列化方法
  8. C# Marshal的使用,非托管内存中分配内存注意的问题
  9. C#中Monitor和Lock的用法区别
  10. Android USB串口开发