译者前言:本章是关于从建立到加载,再到使用 AssetBundle 的整个流程的概述。阅读本章将对 AssetBundle 的工做流程有个简单而全面的了解。网络
本章原文所在章节:【Unity Manual】→【Working in Unity】→【Advanced Development】→【AssetBundles】→【AssetBundle Workflow】学习
能够按照下面的这些步骤来学习 AssetBundle。关于每一个步骤的详细内容,能够在本文档的其余章节中找到。ui
为了将一个资产配置到一个 AssetBundle,须要按照如下步骤:spa
1. 从你的 Project 面板里选择你想要分配到 AssetBundle 里的资源rest
2. 观察 Inspector 面板对象
3. 在 Inspector 面板的底部,能看到一块能够设置 AssetBundle 及其变量的区域blog
4. 左侧的下拉选项栏能够设置 AssetBundle,右侧的下拉选项栏用来设置变量游戏
5. 左侧的下拉选项栏默认显示“None”,点击后显示其余已经注册过的 AssetBundle 的名称选项图片
6. 若是没有注册过 AssetBundle,你会看到如图片所示的列表:资源
8. 输入你想要的 AssetBundle 名称。须要注意,AssetBundle 名称支持目录结构。想要添加子文件夹,只须要用“/”分隔文件名称便可。好比:若是 AssetBundle 名称是“environment/forest”,将会在“environment”文件下建立一个名为“forest” 的 AssetBundle
9. 一旦你选择或者建立了一个 AssetBundle 名称,接着你就能够在右边的下拉选项栏重复上述步骤,选择或者建立一个你想要的变量名称。变量名称对建立 AssetBundle 不是必须的。
想要阅读更多关于配置 AssetBundle 以及配置策略相关的内容,请看【为打包 AssetBundles 准备资产】一节。
在 Asset 文件夹下建立一个 Editor 文件夹,而后将包含如下代码的脚本文件放在 Editor 文件夹下:
这个脚本将会在“Assets”菜单的最底部,建立一个叫“Build AssetBundles”的按钮。当你点击该按钮,就会执行脚本中与之对应的方法,并出现一个构建进度条。接着,全部被你命名了的资产(assets)都会被构建成对应的 AssetBundle,并放置在你定义的路径下。在本章节中,该路径为:“Assets/Build AssetBundles”。
想要知道更多关于这段代码的细节,请看【建立 AssetBundle】一节。
这一步对每一个开发者都是不一样的,而不是 Unity 告诉你如何去作。若是你计划将你的 AssetBundles 部署到远程虚拟主机上,就须要继续学习相关内容。若是你是彻底的本地开发,并打算把你全部的 AssetBundles 都放在本地磁盘上,那么就能够跳过关于“远程仓库”的内容。
对于打算从“本地仓库”加载资源的开发者,你会对“ 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】一节。
若是本文对你有帮助的话,点个赞或者评论一下吧!