Unity加速编译小技巧

今日豆知识——加速编译小技巧 (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最终的编译速度。

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kerven_HKW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值