译者前言:本章是关于从创建到加载,再到使用 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】一节。

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

【Unity3D技术文档翻译】第1.1篇 AssetBundle 工作流的更多相关文章

  1. 【Unity3D技术文档翻译】第1.9篇 使用 Unity AssetBundle Browser tool (AssetBundle系列完结)

    上一章:[Unity3D技术文档翻译]第1.8篇 AssetBundles 问题及解决方法 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced D ...

  2. 【Unity3D技术文档翻译】第1.6篇 使用 AssetBundle Manager

    上一章:[Unity3D技术文档翻译]第1.5篇 使用 AssetBundles 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced Develo ...

  3. 【Unity3D技术文档翻译】第1.4篇 AssetBundle 依赖关系

    上一章:[Unity3D技术文档翻译]第1.3篇 创建 AssetBundles 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced Develo ...

  4. 【Unity3D技术文档翻译】第1.8篇 AssetBundles 问题及解决方法

    上一章:[Unity3D技术文档翻译]第1.7篇 AssetBundles 补丁更新 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced Deve ...

  5. 【Unity3D技术文档翻译】第1.7篇 AssetBundles 补丁更新

    上一章:[Unity3D技术文档翻译]第1.6篇 使用 AssetBundle Manager 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced ...

  6. 【Unity3D技术文档翻译】第1.5篇 本地使用 AssetBundles

    上一章:[Unity3D技术文档翻译]第1.4篇 AssetBundle 依赖关系 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced Devel ...

  7. 【Unity3D技术文档翻译】第1.3篇 创建 AssetBundles

    上一章:[Unity3D技术文档翻译]第1.2篇 为打包 AssetBundles 准备资产 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced ...

  8. 【Unity3D技术文档翻译】第1.0篇 AssetBundles

    前言 "Unity圣典"是目前对官方文档翻译比较详细的,然而文档的最新更新日期是2013年,已经远远落后最新版本,参考意义有限.官方文档.脚本手册是学习Unity3D最直接有效的途 ...

  9. 【Unity3D技术文档翻译】第1.2篇 为打包 AssetBundles 准备资产

    本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced Development]→[AssetBundles]→[Preparing Assets f ...

随机推荐

  1. apache:侧重于http server tomcat:侧重于servlet引擎

    apache:侧重于http server tomcat:侧重于servlet引擎

  2. Linux入门——用户组管理

    Linux用户组的管理 简介 用户组用来控制操作权限,防止无关人员莫名 rm -rf 重要文件,导致文件无法恢复或者花费很大代价恢复,这不是一个系统管理员 想看到的结果,所以一般系统管理员都会给开发人 ...

  3. 理解rem实现响应式布局原理及js动态计算rem

    前言 移动端布局中,童鞋们会使用到rem作为css单位进行不同手机屏幕大小上的适配.那么来讲讲rem在其中起的作用和如何动态设置rem的值. 1.什么是rem rem是相对于根元素(html标签)的字 ...

  4. SpringMVC的filter怎么使用Autowired依赖注入bean

      有的时候根据我们业务的需要,我们需要在web项目中定义一个自己的filter,并想在这个filter中使用@Autowired注入bean供我们使用.如果直接使用的话是不行的,需要我们在xml文件 ...

  5. 捕获arm非托管磁盘虚拟机,并进行还原

    背景:非托管磁盘虚拟机"hlmcen69n1",附加了一块100GB的数据磁盘.由于arm非托管磁盘机器无法通过Portal界面直接"Capture",故只能通 ...

  6. MOOC网视频下载并视频倍速播放,超简单哒,亲测可用,( •̀ ω •́ )y

    由于视频在线播放太卡,想着下载看吧~~可是这个坑爹的网站没有下载按钮,难道就不可以下载视频了吗? 小白不甘心~ 于是动手查了一下,实验很成功,估计如果会爬虫的都不用像我一样一个一个自己去下了,奈何我知 ...

  7. mysql备份

    工具 mysql mysqldump 应用举例 导出 命令行下具体用法如下: mysqldump -u用戶名 -p密码 -d 数据库名 表名 脚本名; 1.导出数据库为dbname的表结构(其中用戶名 ...

  8. Electron应用使用electron-builder配合electron-updater实现自动更新(windows + mac)

    发客户端一定要做的就是自动更新模块,否则每次版本升级都是一个头疼的事.下面是Electron应用使用electron-builder配合electron-updater实现自动更新的解决方案. 1.安 ...

  9. C#之DataTable转List与List转Datatable

    闲来无事,只有写代码啦,以下为DataTable转List与List转DataTable的两个方法,主要技术点用到了反射原理: /// <summary> /// 模型转换类 /// &l ...

  10. HTML核心标签之表格标签(二)

    基本用法: <ul type="cir"> <li>显示数据</li> <li>显示数据</li> </ul> ...