打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
unity提高编译速度

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最终的编译速度。

所以,大家在使用模板的时候,一定要留心其参数的排列组合数量,控制好整体的代码大小。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Unity3D项目程序加密1——在Unity3D引用自己的dll
Unity手游之路<十三>手游代码更新策略探讨
C#脚本实践(三): 集成到游戏
Android平台的代码热更新
Unity3d 调用 C++ 函数 实现加密防破解 (Android向)
Unity打包后的APK包反编译
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服