浅尝Unity 3D的Asset Bundle知识(二)-----打包基础篇

来源:互联网 发布:c语言手机编译器中文 编辑:程序博客网 时间:2024/04/28 02:32

今天小生继续献丑来和大家讨论讨论关于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

具体代码参见如下:


    着重说下其中的两个地方:
    1.Selection.GetFiltered 
    看Api的介绍是说返回你在项目中选中的文件,这个方法会根据你需要检测出的对象Type和检测方式来返回你选中的这个对象。(感觉理解还不是很深刻,还请大牛给讲解下害羞

  2.BuildPipeline.BuildAssetBundle
    这个方法其实就是核心方法了,它就是起到打包的作用。里面的参数个人根据理解相对的解说一下。
    Selection.activeObject : 这就是你选中的那个对象了
    activeGameObjects : 个人感觉就是穿入的这个对象主体以外的其他部分的集合,也有很多人把这个地方传入null。(还请大牛们不吝赐教委屈
    targetPath : 要输出的路径。
    buildOptions : 生成build的方式。这个地方的选项可以并列设置。具体设置参加下一条解释。
 
  3.UnityEditor.BuildAssetBundleOptions buildOptions
    这里面主要介绍其中的两个 : 
    BuildAssetBundleOptions.CollectDependencies:这个地方就是最重要的,这里是在build的时候可以把关联的材质一同打包到这个Asset Bundle文件中。也就是说设置了这个,生成的Asset Bundle文件里同时也包含了相关联的材质等。外加这个地方留个引子,其实这个方法和打包高级篇中的dependency打包也是密不可分的,小生在以后的文章中会和大家讨论如何打包成享用公用资源Asset Bundle。如果要是不设置这个选项的话,等导入Asset Bundle资源的时候会发现关联的材质都没有被加载上。在我的环境里,这个小球就变成了一个粉色的小球。材质无法关联上。
    BuildAssetBundleOptions.CompleteAssets:Api文档说是会强制包含整个资源。自己无法理解到底是什么意思。

最后我们选择这个小球的Prefab后右键展开菜单执行一下新加入的菜单项之后,就打包出了小球对应的Asset Bundle文件。详见下图↓



OK,这样我们就完成了一个简单的素材打包成Asset Bundle的过程。其中的一些讲解和小生的理解可能不是非常完善还请各位看官多多见谅包含和指教微笑。关于文中的几个自己叫不准的地方,小生会在理解透彻之后在延伸篇中继续与大家讨论和共享。

本文中主要讲解了如何打包Asset Bundle的知识,但是很多同学们可能会说,打了包不知道如何导入那没多少意义不是。嘿嘿,这也就是小生下一篇要讲的------Asset Bundle的导入初级篇!敬请关注哦~







0 0
原创粉丝点击