Unity3d 使用Assetbundle合并项目的几点注意

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3d 使用Assetbundle合并项目的几点注意相关的知识,希望对你有一定的参考价值。

参考技术A Unity3d中动态资源读取,除了Resources.Load方式。还有就是Assetbundle。
  Assetbundle的各方面介绍,这里就不在赘述,网上搜搜就一大片。但是,是不是什么东西都能被打成Assetbundle呢?

基本上,引用到的资源,都能被打成Assetbundle。但是脚本和shader却不一样,虽然脚本和shader也能被导入Assetbundle。但是却不能把源文件导入(如果Assetbundle中存的是脚本的源文件,那也就没那么多热更新解决方案了)。最简单的验证方法,把一个项目的一个场景,导出Assetbundle,另一个项目读取这个Assetbundle运行。会发现资源都导入了,却没有执行的脚本。
  因此,如果两个项目,想通过Assetbundle方式,来合并两个项目,那就必须把脚本也拷到要被导入的项目中。两个项目脚本合并,难免出现重名的脚本,重名的类。为了解决这个,每个项目,定一个唯一的namespace。如果项目开始的时候就定好了,那还好办,如果后期合并,前期都没加过。那就只能自己写个Editor脚本,批量加上。

  Unity项目中,难免使用一些全局的设置,比如,Physic重力设置,Tag和Layer这些。重力还好办,项目运行起来,还能通过脚本修改。但是Tag,Layer却不行。只能想办法进行合并。
  Unity中,Tag只能通过string修改。但是,导成Assetbundle之后,其存储是index。所以要么在合并Tag的时候,要么批量修改,要么写个映射。当然,最好的方式是,项目统一用一套Tag。
  Layer相比于Tag要简单许多,Layer可以通过int修改。Unity最大有32个Layer,即使你不添加Layer,也能通过修改Layer的index来使用。那么只要工程中定义全局使用的Layer即可

  由于项目的资源都是Assetbundle,那么打包的时候,Unity会自动帮你精简项目。所以,Shader和脚本,就有可能被精简掉。
  所以保险起见,吧项目中所有的Shader全部添加到

  Unity的脚本也得进行相应的设置

以上是关于Unity3d 使用Assetbundle合并项目的几点注意的主要内容,如果未能解决你的问题,请参考以下文章

unity3d开发2d游戏中Assetbundle有啥作用

GJM: Unity3D AssetBundle 手记

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

Unity3D研究院之加密Assetbundle不占内存(一百零五)

Unity3D AssetBundle相关

unity3d AssetBundle包加密