unity3d开发2d游戏,Assetbundle的作用是什么?
1.默认
Assetbundle可以封装Prefab是多么方便啊!而且我强烈建议你把Prefab打包成Assetbundle,因为Prefab可以把游戏对象携带的游戏组件、游戏脚本、素材打包。Instantiate从服务器下载Assetbundle后可以直接放入游戏。
想象一下,如果你只能在服务器上下载原始的二进制资源文件,那么资源文件下载后,你需要动态创建游戏对象,然后动态绑定脚本到游戏对象,动态分配贴图到游戏对象等等。。所以强烈建议用Prefa,不用解释!!!!!
另外,我举一个例子,因为模型可能会带很多动画文件,那么这样一套模型资源可能是多个FBX文件和几个png地图文件。这时候我只需要把原来的模型放入Prefab,里面就会包含这个模型的所有组件,甚至是它的动画资源和贴图。然后如下图所示,mode是模型的预置文件,我只需要把预置的Mode打包成Assetbundle就可以了。当我从服务器下载这个Assetbundle加载到游戏中,就可以直接使用了,切换动画,改变地图。。
2.二进制文件
并非所有的预设都应该在资产捆绑中使用。Assetbundle还可以直接封装二进制文件,比如图片、声音、短信等等。
3.场景文件
在Unity中,你可以在一个场景中保存一个场景,这个场景会包含这个场景中的一切。你能把场景打包成一个资产包吗?答案是肯定的,但是不能在移动平台上使用,因为脚本不能在移动平台上更新。换句话说,即使脚本被绑定在Prefab中,然后从Assetbundle下载,所有的脚本都不会被执行。另一个巧妙的用法后面会提到。
4.游动式平台
上面陌陌已经大致介绍了Assetbundle的使用原理,我们说的是移动平台。脚本无法更新是移动平台下最大的硬伤,这意味着开发者无法绕过App store、google Play等在线商店升级应用。唯一能做的就是更新资源。比如在游戏中处理版本升级的时候,通常会有大版本号和小版本号。大的版本号是2.0和3.0,需要在AppStore更新。大版本主要是升级游戏脚本,然后小版本号比如2.0.1或者2.0.2只是更新游戏里的资源。如果你必须更新脚本,或者你必须更新脚本,你只能在Appstore或google Play中更新大版本。
移动平台上无法更新脚本,那么Prefab上绑定的脚本怎么办?在任何平台上,脚本都可以添加到Prefab中,然后打包到Assetbundle中。只是移动平台有点特殊。比如脚本Test.cs绑定到Prefab,最后程序通过服务器下载Assetbundle。该脚本在加载到项目中时不会被执行。
但是如果本地项目有Test.cs这个脚本,Unity会自动把这个脚本绑定到下载的预置上,他们执行的非常好。如果本地项目中没有Test.cs脚本,那么Prefab上的脚本永远不会被执行。有时候我们会在脚本中写一些公共变量。有可能不同的预置被绑定到同一个脚本,但是检查器脚本中的公共参数是不同的。这个不用担心。Assetbundle中的Prefab是没问题的,所以只要大版本中的脚本没问题,小版本中的游戏资源更新也没问题。
5.移动优化
前面我们说过,游戏中的一个游戏对象可以封装成一个Assetbundle,游戏中的整个场景也可以封装成一个Assetbundle。不过我觉得巧妙的使用包装场景还是很有必要的,因为场景中肯定有很多常见的模型。如果把场景打包,那么内存和大小就是常见机型的size * N场景,想想其实挺吓人的。其实我们可以熟练运用。首先把场景的公共和私有部分全部统一起来,然后把整个场景烘焙出来。场景烘焙时,公共模型部分被取出,场景中只保留私有模型。还可以制作一个工具,将场景中常用模型的坐标保存为XML格式(每个场景文件都会对应一个常用模型的XML信息),最后将常用模型封装在其他Assetbundle中。
服务器提供每个场景的资产包和公共模型的资产包。通用模型的Assetbundle可以放在内存驻留中(可能经常使用,取决于不同的项目)。下载Assetbundle后,现在将其加载到场景中,然后根据场景对应的XML信息将公共模型动态添加到场景中,从而完成一个场景的构建。