今日豆知识——加速编译小技巧 (qq.com)
在Unity开发过程中,我们会经常修改脚本代码。而每次修改脚本代码之后,Unity都需要重新编译脚本。这个过程在一些大型项目里面,是比较消耗时间的。那么有没有什么方法可以加快这个过程呢?
我们需要知道,在每次返回到Editor的时候,Unity都编译了哪些东西。
Unity工程中所有生成的编译文件都会放到Library\ScriptAssemblies 这个文件夹中。比如大家熟悉的Assembly-CSharp.dll。这个dll就是我们日常写的脚本最终的归宿。
可想而知,如果所有的文件最终都编译到这一个文件中,那么稍有“风吹草动”就会引起天崩地裂般的大范围重新编译。所以,我们自然会考虑到,将这个文件进行分拆,将不经常修改的代码放到一个单独的地方,从而减少不必要的文件编译。
那么对于dll拆分我们有哪些方式呢?
1.基于Assembly Definition。
Assembly Definition是Unity官方提供的进行代码拆分的最佳实践。首先将相应的模块代码放入到同一个文件夹,然后在这个文件夹下创建一个Assembly Definition。
我们对这个Assembly Definition进行一些设置:
从上图看出,我们指定当前代码是否使用unsafe code,是否自动解析其依赖引用关系等。其中比较重要的是Assembly Definition References,这个选项可以指定当前dll所依赖的其他dll。
这个比较常见的使用情况,一个Editor所使用的dll会依赖相应的Runtime dll。另外一个比较重要的,是Platform选项。这个选项可以指明,当前这个dll需要被应用到哪些平台上,从而进行不同平台的区分。
当我们创建好一个Assembly Definition之后,我们在Library\ScriptAssemblies中会发现对应的dll:
当我们没有更改Assembly Definition所覆盖的代码时,这部分代码就不会再去参与后续的编译。
除了Assembly Definition这种官方提供的最佳实践的方式之外,其实Unity还有隐藏的小技巧。
2.在Unity中,有几个比较特殊的文件夹也可以实现类似效果。
他们是:
Plugins,Pro Standard Assets,Standard Assets。
这三个文件夹会单独产生一个dll:Assembly-CSharp-firstpass.dll。我们可以利用这一特性,也可以实现类似的效果。比如我们将一些不常修改的代码,放入对应的文件夹,即可将他们单独放入一个dll:
除了上述的代码分拆方法之外,在编码的过程中也有一些地方会影响到最终出包的速度,比如以下写法:
模板是我们经常会用到的一种语法糖,它可以帮我们快速完成一些特定的编码工作。然而,这个语法糖不是免费的。在我们编译到IL2CPP之后,我们会发现,这类模板函数会根据参数的不同排列组合,展开为一个个独立的函数。
当我们有大量的模板展开之后,必然会使我们的代码文件快速膨胀,从而增加IL2CPP最终的编译速度。文章来源:https://www.toymoban.com/news/detail-438045.html
所以,大家在使用模板的时候,一定要留心其参数的排列组合数量,控制好整体的代码大小。文章来源地址https://www.toymoban.com/news/detail-438045.html
到了这里,关于Unity加速编译小技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!