在Unity开发中,项目的复杂性和规模不断增加,这导致编译时间变得越来越长。
为了提升编译效率,使用Assembly Definition文件(.asmdef)将代码划分成多个程序集是一种非常有效的解决方案。
1. 什么是Assembly Definition?
Assembly Definition是一种Unity用于定义C#程序集的文件。
通过将代码分成多个独立的程序集,Unity可以独立编译这些程序集,而不是每次都编译整个项目。
这不仅可以减少编译时间,还能提高项目的可维护性、可扩展性和模块化。
1.1 程序集的概念
在C#中,程序集是一个逻辑上分隔的代码集合,通常对应于一个DLL文件或EXE文件。
每个程序集都有自己的类型信息、版本信息和其他元数据。
在Unity中,程序集允许开发者将代码组织得更为合理,增强代码的复用性。
1.2 在其他环境中的类似概念
虽然Assembly Definition是Unity特有的,但在其他开发环境中也有类似的概念。
例如:
- .NET Framework和.NET Core:在这些平台上,开发者可以使用csproj文件来定义项目和其依赖关系。通过合理配置项目,可以实现类似于Unity中的程序集管理。
- Java:在Java中,JAR文件相当于程序集,开发者可以使用构建工具(如Maven或Gradle)来管理项目的模块化和依赖关系。
- C++:在C++中,开发者可以通过使用静态库和动态库来实现模块化,但这需要手动管理依赖关系和编译过程。
1.3 默认划分
在Assets文件夹中编写脚本,如果没有进行自定义操作,会默认编译到 Assembly-CSharp.dll 中。
简单来说,我们正常编写的脚本会被划分为Assembly-CSharp程序集中。
这里也能说明当前这个脚本是隶属于哪个程序集中的。
在Editor目录下的脚本文件会被自动分为Assembly-CSharp-Editor程序集。
更多类似默认划分的还有:
- Plugins目录:Assembly-CSharp-firstpass
- Plugins目录下的Editor目录:Assembly-CSharp-Editor-firstpass
1.4 程序集之间的引用
如果程序集A引用了程序集B,而程序集B又引用了程序集C,那么程序集A可以间接访问程序集C中公开的类型。
以上述默认程序集的引用为例
2. 如何在Unity使用Assembly Definition
2.1 创建
在选中的文件夹上右键单击,选择Create > Assembly Definition。
这将创建一个新的.asmdef文件。