Unity 提供了程序集定义和程序集定义引用这两种特殊的资源类型,可帮助您将脚本组织到程序集中。
程序集是 C# 代码库,其中包含由脚本定义的已编译类和结构并且还定义了对其他程序集的引用。有关 C# 中的程序集的更多信息,请参阅 .NET 中的程序集。
默认情况下,Unity 会将几乎所有游戏脚本编译到名为 Assembly-CSharp.dll 的预定义程序集中。Unity 还会创建一些较小的专用预定义程序集。
这种安排对于小型项目而言可以接受,但是在向项目添加更多代码时会有一些缺点:
通过定义程序集,可以组织代码以促进模块化和可重用性。您在程序集中定义的脚本不再添加到默认程序集中,并且只能访问您的其他自定义程序集中的脚本。
上图演示了如何将项目中的代码拆分为多个程序集。因为 Main 引用 Stuff 并且不进行反向引用,所以知道对 Main 中的代码进行的任何更改都不会影响 Stuff 中的代码。同样,因为 Library 不依赖于任何其他程序集,所以可以更轻松地在其他项目中重用 Library 中的代码。
要将项目代码组织成程序集,请为每个所需程序集创建一个文件夹,并将应属于每个程序集的脚本移动到相关文件夹中。然后创建程序集定义资源以指定程序集属性。
Unity 会将包含程序集定义资源的文件夹中的所有脚本编译到单个程序集中,编译时会使用该资源定义的名称和其他设置。程序集包含子文件夹中的任何脚本,除非子文件夹有自己的程序集定义或程序集定义引用资源。
要包含来自现有程序集中一个非子文件夹的脚本,请在该非子文件夹中创建一个程序集定义引用资源,并将它设置为引用定义目标程序集的程序集定义资源。例如,可以将来自项目中所有编辑器文件夹的脚本合并到它们自己的程序集中,无论这些文件夹位于何处。
Unity 按照依赖关系确定的顺序编译程序集。无法指定编译的顺序。
要识别脚本属于哪个程序集,请在项目窗口中选择脚本文件以在检视面板窗口中查看其属性。程序集文件名和程序集定义(如果存在)会显示在检视面板的 Assembly Information 部分中。
Unity 通常都会将名为 Editor 的文件夹中的所有脚本编译到预定义的 Assembly-CSharp-Editor 程序集中(无论这些脚本位于何处)。但是,如果在下级有一个编辑器文件夹的文件夹中创建程序集定义资源,则 Unity 不再将这些编辑器脚本放入预定义编辑器程序集中。实际上,这些脚本会进入通过程序集定义创建的新程序集中(脚本可能不属于该程序集)。要管理 Editor 文件夹,可以在每个 Editor 文件夹中创建程序集定义或程序集定义引用资源,以将这些脚本放置在一个或多个编辑器程序集中。有关更多信息,请参阅为编辑器代码创建程序集。