Unity2D开发入门-程序集(Assembly Definitions)

前言

在默认情况下,根据脚本在项目中的文件夹,会分成四个阶段编译脚本。

当脚本引用在其它阶段 (即位于不同程序集中) 编译的类时,编译顺序非常重要。

基本规则是,在当前编译阶段之后的任何编译阶段都不能被引用。在当前阶段或更早阶段编译的任何内容都是完全可用的。

编译的各个阶段如下:

阶段 程序集名 脚本文件
1 Assembly-CSharp-firstpass Standard Assets, Pro Standard Assets 和 Plugins 文件夹下面的运行时脚本
2 Assembly-CSharp-Editor-firstpass Standard Assets, Pro Standard Assets 和 Plugins 文件夹下面的 Editor 文件夹下面的 Editor 脚本
3 Assembly-CSharp 其它不在 Editor 文件夹下面的脚本
4 Assembly-CSharp-Editor 所有剩下Editor 文件夹下面的脚本

Assembly definitions

程序集是一个 C# 代码库,它包含由脚本定义的已编译类和结构,还定义了对其他程序集的引用。

默认情况下,Unity 将几乎所有的游戏脚本编译到预定义的程序集中(Assembly-CSharp.dll)。

这种安排对于小型项目来说是可以接受的,但是当你向项目中添加更多代码时,会有一些缺点:

每当你改变一个脚本时,Unity 就必须重新编译所有其他脚本,这增加了迭代代码更改的整体编译时间。
任何脚本都可以直接访问任何其他脚本中定义的类型,这使得重构和改进代码变得更加困难。
所有脚本都是为所有平台编译的。

这里说一下程序集的特点

程序集可以被其他引用,但是只能访问你你为其添加的其他程序集中的脚本。

也就是说你不让访问的他都不能访问,或者这样说它不依赖别人。所以当编译的时候只要它不变就不会被再编译。这样就减少了编译的脚本。

每个程序集都被被编译为一个DLL。

我们常把多个项目之间可以通用的脚本放在程序集中。

另外

自定义的Assembly definitions下的Editor下的脚本不会再生成新的程序集,都在我们的自定义程序集下。

定义的方式

在我们要定义程序集的文件夹上右键 Create=>Assembly Definitions

image-20230726232447915

属性

image-20230726232619186

其中

Root Namespace 命名空间 可以不填。

Define Constraints 添加预定义宏,读取预定义宏之后才编译,可以不填。

Assembly Definition References 程序集的依赖,依赖的程序集必须被添加才能在该程序集中使用。