译者前言:本章是关于从创建到加载,再到使用 AssetBundle 的整个流程的概述。阅读本章将对 AssetBundle 的工作流程有个简单而全面的了解。

本章原文所在章节:【Unity Manual】→【Working in Unity】→【Advanced Development】→【AssetBundles】→【AssetBundle Workflow】

AssetBundle 工作流

可以按照下面的这些步骤来学习 AssetBundle。关于每个步骤的详细内容,可以在本文档的其他章节中找到。

将资产(Assets)配置到 AssetBundles

为了将一个资产配置到一个 AssetBundle,需要按照以下步骤:

1. 从你的 Project 面板里选择你想要分配到 AssetBundle 里的资源

2. 观察 Inspector 面板

3. 在 Inspector 面板的底部,能看到一块可以设置 AssetBundle 及其变量的区域

4. 左侧的下拉选项栏可以设置 AssetBundle,右侧的下拉选项栏用来设置变量

5. 左侧的下拉选项栏默认显示“None”,点击后显示其他已经注册过的 AssetBundle 的名称选项

6. 如果没有注册过 AssetBundle,你会看到如图片所示的列表:

 
7. 点击“New...”选项来创建一个新的 AssetBundle

8. 输入你想要的 AssetBundle 名称。需要注意,AssetBundle 名称支持目录结构。想要添加子文件夹,只需要用“/”分隔文件名称即可。比如:如果 AssetBundle 名称是“environment/forest”,将会在“environment”文件下创建一个名为“forest” 的 AssetBundle

9. 一旦你选择或者创建了一个 AssetBundle 名称,接着你就可以在右边的下拉选项栏重复上述步骤,选择或者创建一个你想要的变量名称。变量名称对创建 AssetBundle 不是必须的。

想要阅读更多关于配置 AssetBundle 以及配置策略相关的内容,请看【为打包 AssetBundles 准备资产】一节。

创建 AssetBundles

在 Asset 文件夹下创建一个 Editor 文件夹,然后将包含以下代码的脚本文件放在 Editor 文件夹下:

这个脚本将会在“Assets”菜单的最底部,创建一个叫“Build AssetBundles”的按钮。当你点击该按钮,就会执行脚本中与之对应的方法,并出现一个构建进度条。接着,所有被你命名了的资产(assets)都会被构建成对应的 AssetBundle,并放置在你定义的路径下。在本章节中,该路径为:“Assets/Build AssetBundles”。

想要知道更多关于这段代码的细节,请看【创建 AssetBundle】一节。

将 AssetBundles 更新到远程仓库

这一步对每个开发者都是不同的,而不是 Unity 告诉你如何去做。如果你计划将你的 AssetBundles 部署到远程虚拟主机上,就需要继续学习相关内容。如果你是完全的本地开发,并打算把你所有的 AssetBundles 都放在本地磁盘上,那么就可以跳过关于“远程仓库”的内容。

加载 AssetBundles 和 资产(Assets)

对于打算从“本地仓库”加载资源的开发者,你会对“ AssetBundles.LoadFromFile ”这个 API 感兴趣。比如下面这段代码:

LoadFromFile 的参数是 AssetBundle 的路径。

如果你将 AssetBundles 部署在你自己的虚拟主机上,并且需要在游戏中下载它们,那么你会对“ UnityWebRequest ”这个 API 感兴趣。比如下面这个例子:

GetAssetBundle(string, int) 的参数有两个,一个是 AssetBundle 位置的路径,另一个是你想要下载的 AssetBundle 的版本。在上面这个例子中,我们指向的是一个本地文件。我们也可以将本地路径替换成任何网络链接,以指向部署在虚拟主机上的 AssetBundles。

UnityWebRequest 有个处理 AssetBundles 的特定方法句柄:DownloadHandlerAssetBundle。这个方法句柄可以从网络请求(request)中获取 AssetBundles。

无论你用的是哪个方法,你现在都可以获取 AssetBundle 对象了。为了获取 AssetBundle 对象,你可以使用 LoadAsset<T>(string) 方法。该方法有两个参数,参数T是你尝试去加载的资源的类型;string 参数是 AssetBundle 中你想要加载的对象的名称。这个方法会返回你从 AssetBundle 中加载的任何对象。你可以使用这些返回的对象,就像使用 Unity 中的其他任何对象一样。 比如:如果你想要在场景中创建一个对象,你只需要调用 Instantiate(gameObjectFromAssetBundle) 即可(gameObjectFromAssetBundle 代指你从 AssetBundle 中加载的对象)。

想要了解更多关于加载 AssetBundles 的 APIs 的信息,请看【使用本地 AssetBundle】一节。

如果本文对你有帮助的话,点个赞或者评论一下吧!

最新文章

  1. foxmail邮箱,签名中如何添加当前日期
  2. 关于Docker目录挂载的总结
  3. linux下的apache配置文件详解
  4. centos 7 python2.7.5升级到3.5.2
  5. react-native 计算时间差
  6. 通用窗口类 Inventory Pro 2.1.2 Demo1(下续篇 ),物品消耗扇形显示功能
  7. 数据库与SQL语言
  8. 第二百零七天 how can I坚持
  9. 对于android触摸事件模型的一些理解
  10. 【转】jsoncpp在xcode中的使用
  11. Android有效的治疗方法Bitmap,减少内存
  12. web代理进行跨域访问
  13. mybatis 一对多和多对一关联查询
  14. JavaScript学习笔记(一)——数据类型和变量
  15. 将配置文件appsetting中的值转换为动态对象调用
  16. Unity 个人用过的地面检测方案总结
  17. composer更改源为国际
  18. LightOJ 1355 :Game of CS(树上green博弈)
  19. js正则表达式----replace
  20. mysql安装管理 -&gt; 编译&amp;yum_02

热门文章

  1. OpenCV3.0 HDR(高动态范围)示例代码以及用法
  2. 【问题解决】Eclipse中 ctrl+空格 content assist
  3. Mezzanine (Windows10下)安装配置与修改(更新中)
  4. volatile特性及内存语义
  5. gRPC实战
  6. -bash: warning: setlocale: LC_CTYPE: cannot change locale (EN_US.UTF-8): No such file or directory
  7. linkin大话设计模式--观察者模式
  8. 长整形 Unix系统毫秒时间 (long类型) 转换为时间格式
  9. MySQL刷新事务日志级别设置
  10. Struts2是什么?