今天小生继续献丑来和大家讨论讨论关于Asset Bundle的打包方法。说到Asset Bundle的相关基础入门介绍,还请详见小生的前一篇文章[浅尝Unity 3D的Asset Bundle知识(一)], 小生就不在这里多多赘述。前几篇开头说得都太啰嗦,今天就让我们直奔主题。
先说下小生环境的情况,以后的文章都是基于这个配置来做的。(不是强求大家和我一个配置)
然后我们再来简单说下打包的概要和大致步骤吧。
1.概要:
本文是结合Unity 3D的4.x版本的Unity Pro来进行的实做,外加一个Apache服务器。Unity自然是来用来打包和建立工程的工具,那么很多人可能很奇怪,那Apache还用来干什么的呢。简单来说就是你先做好了Asset的包(后缀名可你喜欢的起,Unity几乎都是可以识别的,但是exe可以识别与否小生还真没研究过,见得比较多的就是[.unity3d]这种格式的),然后把这个做好的我们称之为包的文件放到Apache的webroot目录下,这样可以让Unity的项目能通过网络下载到它。(这里我们虽然是放在本地,所以访问就是你的IP Address或者就是127.0.0.1喽)。
本文要实现的就是你选择一个项目目录中的元素,比如说Texture或者Prefab等后,然后点击右键然后会在右键的下拉菜单中看到一个Build Asset Bundle with sub component的菜单项(这个菜单项的名字是随便起的,不需要太拘泥),然后点击这个菜单项就自动把你选中的元素打包成Asset Bundle。效果如下图。
2.打包的大概步骤:
1)建立一个scene,然后在其中建立个Game Object---Plane,之后再建立一个Game Object---Sphere。之后把这两个的位置信息在Inspector面板中都给reset一下。做好之后就是参见下图的样子。Unity4中建立新Scene(就是经常人们说的场景)的时候是没有自动加入光照效果的,我这里看着是白色的Plane,那当然不必说就是我自己加了灯光这个效果喽。但是Unity5种初始的时候已经自动加入了光照效果了。嘿嘿,这个就是题外话了。调整完后就如下图↓
2)然后把图中的球的Game Object的高度调成5,然后再给其加入Rigidbody的属性。参见下图↓
3)导入一张图片到项目中,这里这个图片就成为了Texture(学名:纹理)的素材了,然后再建立一个Material(学名:材质)的空元素,把这个纹理的素材加入到材质上。加入后就成为下图这个样子了。↓
材质做好之后,再把材质附到小球之上。至此,我们就作出了一个最终目的的小球了。这个小球上包含了一个包含了一张图片的材质。做好的小球参见下图↓
之后我们建立一个空白的Prefab元素,然后把这个小球给放到里面去。至此,我们就完成了Unity UI端的设定了。参见下图↓
4)小球做好了,之后再在项目中的Assets的文件夹下,建立一个新的文件夹-----Editor,这个文件夹的名字就一定要起这个哦,小生查了一下相关的文档,这个文件夹起了这个名字后就变成了对于Unity来说的特殊文件夹,Unity在build出正常的项目包的时候是不会把这个文件夹的内容编译进去的,所以例如这个生成Asset Bundle的脚本放在这里刚刚好。毕竟游戏玩家中的内容一般是不需要这个脚本的不是。
之后在这个文件夹下新建一个C#的脚本文件,文件名就随你喜欢喽。建立完如下图↓
3.涉及的技术知识:
Unity里面支持JavaScript还有C#等语言来做脚本语言,小生进公司后选择的是用C#来来编码。所以关于Unity的部分,小生都是用C#来做讲解(还请各位看官多多包涵)。然后我们再来介绍一下要用到的函数喽。
1.MenuItem : 这个方法是起到在Unity的下拉菜单栏里面加上一个选项。看下面的代码片的时候,你可以注意到这个方法执行后,必须要在其下声明一个静态方法才可以。这样才可以把方法关联到这个菜单选项上。(静态方法名可以设定其他名字的,不必拘泥)
2.Selection: 这是一个名为UnityEditor包里的类,所以你需要在文件头上先声明倒入这个包。[using UnityEditor;]
3.BuildPipeline:这个类呢就是Unity中的一个打包的工具类。
自己看了Api文档后感觉说的都不是太具体,但是对于类中的方法说得是比较详细外加还附带范例,大家如果想查看相关的官方Api的话,请参见。Unity 3D 官方 Api
具体代码参见如下: