程序集定义 (Assembly Definition)

作者:追风剑情 发布于:2023-2-8 11:27 分类:Unity3d

[官方文档] 程序集定义

默认情况下,Unity 几乎将所有游戏脚本都编译到预定义 程序集 Assembly-CSharp.dll 中。(Unity 还会创建[一些较小的专用预定义程序集]。)
这种安排对于小型项目而言可以接受,但是在向项目添加更多代码时会有一些缺点:

  • 每次更改一个脚本时,Unity 都必须重新编译所有其他脚本,从而增加迭代代码更改的整体编译时间。
  • 任何脚本都可以直接访问任何其他脚本中定义的类型,这样可能更加难以重构和改进代码。
  • 所有脚本都针对所有平台进行编译。
通过定义程序集,可以组织代码以促进模块化和可重用性。为项目定义的程序集中的脚本不再添加到默认程序集中,并且只能访问指定的其他程序集中的脚本。


222.png

划分程序集

在某个目录下创建Assembly Definition,侧在这个目录及子目录下创建的所有脚本都将被编译到这个程序集中。

1111.png
MyAssembly文件夹(包含子目录)下创建的所有脚本会被编译到MyAssembly程序集中。

创建程序集定义(Assembly Definition)

1111.png
选择Assembly Definition菜单项会自动生成NewAssembly.asmdef文件。
选择Assembly Definition Reference菜单项会自动生成NewAssemblyReference.asmref文件。

程序集定义的属性

2222.png

Assembly Definition 属性
属性 描述
Name 程序集的名称(不带文件扩展名)。程序集名称在整个项目中必须是唯一的。考虑使用反向DNS命名样式以减少名称冲突的可能性,特别是如果您希望在多个项目中使用程序集。

注意:推荐使用GUID引用程序集(勾选上Use GUIDs)。如果通过名称引用程序集,则更改名称将中断引用。
Allow 'unsafe' Code 如果在程序集内的脚本中使用了 C# unsafe 关键字,请启用 Allow ‘unsafe’ Code 选项。启用此设置后,Unity 在编译程序集时会将 /unsafe 选项传递到 C# 编译器。
Auto Referenced
指定预定义的程序集是否应引用此项目程序集。禁用 Auto Reference 选项后,Unity 不会在编译过程中自动引用该程序集。这不会影响 Unity 是否将文件包含在构建中。
No Engine References
启用此属性后,Unity 在编译程序集时不会添加对 UnityEditor 或 UnityEngine 的引用。
Override References
勾选上Override References后,Assembly References设置才会显示。可以在这里手动添加要引用的预编译程序集。

注意:若要防止Project程序集自动引用预编译程序集,可以禁用其Auto Referenced选项。有关详细信息,请参阅插件检查器。
Root Namespace 此程序集定义中脚本的默认命名空间。如果您使用Rider或Visual Studio作为代码编辑器,它们会自动将此命名空间添加到此程序集定义中创建的任何新脚本中。
//创建新脚本时,自动添加Root Namespace中设置的命名空间
namespace RootNamespace
{
    public class NewBehaviourScript : MonoBehaviour
    {

    }
}

Define Constraints

2222.png

定义约束指定编译器#define指令,必须为Unity定义这些指令才能编译或引用程序集。

Unity仅在满足所有定义约束的情况下编译和引用项目程序集。约束的工作方式类似于C#中的#if预处理器指令,但在程序集级别而不是脚本级别。在“定义约束”设置中定义要满足的约束的所有符号。

Assembly Definition References

勾选上Use GUIDs时,将使用GUID引用程序集,这时更改程序集名称并不会中断引用。点击"+"号可添加对其他程序集的引用。

Assembly References

仅当启用Override References属性时,才会显示Assembly References部分。使用此区域可以指定对此程序集所依赖的预编译程序集的任何引用。

有关详细信息,请参见引用预编译的插件程序集

Platforms

设置程序集的平台兼容性。Unity 仅在包含(或不排除)的平台上编译或引用此程序集。

勾上Any Platform时,可在下面选择要排除的平台。不勾Any Platform时,可在下面选择要包含的平台。

Version Defines

5555.png

根据项目中包和模块的版本指定要定义的符号。

Version Defines 属性
属性 描述
Resource 一个包或模块
Define 该符号定义 Resource 的适用版本何时也出现在此 Unity 项目中。
Expression 定义版本或版本范围的表达式。请参见版本定义表达式
Expression outcome 表达式求值为逻辑语句,其中“x”是检查的版本。如果表达式结果显示“无效”,则表达式格式不正确。

有关详细信息,请参见基于项目包定义符号

查看脚本所性程序集

选中C#脚本,即可在Inspector面板中的Assembly Information下看见脚本所属程序集信息。
1111.png

标签: Unity3d

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号