单击程序集定义资源 (Assembly Definition Asset) 可以在 Inspector 窗口中设置程序集的属性。
程序集定义属性分为以下部分:
属性 | 描述 |
---|---|
名称 | 程序集的名称(不含文件扩展名)。程序集名称在整个项目中必须唯一。请考虑使用 reverse-DNS 命名样式降低名称冲突的风险,尤其是希望在多个项目中使用该程序集的情况下。 注意:Unity 会将您分配给程序集定义资源的名称用作 Name 字段的默认值,但您可以根据需要更改此名称。但是,如果您通过名称而不是 GUID 来引用程序集定义,则更改名称将使引用无效。 |
Allow ‘unsafe’ code | 如果在程序集内的脚本中使用了 C# unsafe 关键字,请启用 Allow ‘unsafe’ Code 选项。启用此设置后,Unity 在编译程序集时会将 /unsafe 选项传递到 C# 编译器。 |
Auto Referenced | 指定预定义的程序集是否应引用此项目程序集。禁用 Auto Reference 选项后,Unity 不会在编译过程中自动引用该程序集。这不会影响 Unity 是否将文件包含在构建中。 |
Override References | 启用 Override References 设置可以手动指定此程序集依赖哪些预编译的程序集。启用 Override References 后,Inspector 会显示 Assembly References 部分,在此部分中可以指定引用。 预编译的程序集是在 Unity 项目外编译的库。默认情况下,在项目中定义的程序集将会引用添加到项目中的所有预编译程序集,这一点与预定义程序集引用所有预编译程序集的方式一致。启用 Override References 后,此程序集仅引用您在 Assembly References 下添加的预编译程序集。注意:为了防止项目程序集自动引用预编译程序集,可以禁用 Auto Referenced 选项。请参阅 Plugin Inspector 以了解更多信息。 |
No Engine References | 启用此属性后,Unity 在编译程序集时不会添加对 UnityEditor 或 UnityEngine 的引用。 |
请参阅[创建程序集定义资源]。
指定编译器 #define 指令;必须定义这些指令,才能让 Unity 编译或引用程序集。
Unity 仅在已满足 Define Constraints 中的所有约束条件时才会编译和引用项目程序集。约束的作用与 C# 中的 #if 预处理器指令类似,但在程序集级别(而不是脚本级别)运行。您必须定义 Define Constraints 设置中的所有符号,才能满足这些约束。
要表示必须取消定义某个符号,请在该符号前面添加否定!
(叹号)符号作为前缀。例如,如果在 Define Constraints 中指定以下符号:
!ENABLE_IL2CPP
UNITY_2018_3_OR_NEWER
当符号 ENABLE_IL2CPP 未定义且符号 UNITY_2018_3_OR_NEWER 已定义时,则满足这些约束。换言之,仅在 Unity 2018.3 或更高版本的非 IL2CPP 脚本运行时中,Unity 才编译和引用此程序集。
可以使用 ||
(OR) 运算符来指定必须存在至少一个约束才能满足这些约束条件。例如:
UNITY_IOS || UNITY_EDITOR_OSX
UNITY_2019_3_OR_NEWER
!UNITY_ANDROID
例如:UNITY_IOS 或 UNITY_EDITOR_OSX 已定义且 UNITY_2019_3_OR_NEWER UNITY_ANDROID 未定义时满足约束。各行类似于在约束之间执行逻辑 AND。以上示例等同于:
(UNITY_IOS OR UNITY_EDITOR_OSX) AND (UNITY_2019_3_OR_NEWER) AND (NOT UNITY_ANDROID)
可以使用 Unity 的任何内置 #define 指令、全局编译器响应文件 (.rsp) 定义的符号,以及项目的 Scripting Define Symbols Player 设置中定义的任何符号。请参阅[平台相关的编译]以了解更多信息(包括内置符号的列表)。
注意:Scripting Define Symbols 设置与具体平台有关。如果使用此设置来定义 Unity 是否应使用程序集,请务必定义所有相关平台上的必要符号。
请参阅[有条件地包含一个程序集]。
Unity 根据当前定义的设置使用指示器标记每个约束。例如,以下这两个约束指示当前一个符号有定义,而另一个未定义。由于要满足整体约束条件,每个单独的约束条件都必须为真,因此 Define Constraints 框也被标记为无效或不兼容。
为了满足本示例中的约束,您可以将 Scripting Backend 更改为 IL2CPP(位于 Player Settings 中)。但是,通常重要的是构建项目时如何评估约束,而不是约束在 Unity 编辑器中的显示方式。例如,您可能有一个程序集,您只想将其包含在使用 IL2CPP 后端的构建中,而不包含在使用 Mono 后端的其他构建中。
属性 | 描述 |
---|---|
Assembly Definition References | 指定对使用程序集定义资源创建的其他程序集的引用。Unity 使用这些引用来编译程序集,还定义程序集之间的依赖关系。 |
Use GUIDs | 此设置控制 Unity 如何序列化对其他程序集定义资源的引用。启用此属性后,Unity 将这些引用另存为资源的 GUID,而不是程序集定义的名称。最好是使用 GUID 而不是名称,因为这意味着可以更改程序集定义资源的名称,而不必更新引用该程序集的其他程序集定义文件。 |
请参阅[创建程序集定义资源]。
Assembly References 部分仅在您启用 Override References 属性(位于 [General] 部分)时出现。使用这一区域可以指定对此程序集依赖的预编译程序集的任何引用。
请参阅[引用预编译的插件程序集]
设置程序集的平台兼容性。Unity 仅在包含(或不排除)的平台上编译或引用此程序集。
请参阅[创建特定于平台的程序集]
根据项目中包和模块的版本指定要定义的符号。
属性 | 描述 |
---|---|
Resource | 一个包或模块 |
Define | 该符号定义 Resource 的适用版本何时也出现在此 Unity 项目中。 |
Expression | 定义版本或版本范围的表达式。请参阅版本定义表达式。 |
Expression outcome | 该表达式将作为逻辑语句进行求值,其中 “x” 是要检查版本。如果表达式结果显示无效,则表达式格式错误。 |
[基于项目包定义符号]
[有条件地包含一个程序集]:ScriptCompilationAssemblyDefinitionFiles.html#conditional-assembly [创建特定于平台的程序集]:ScriptCompilationAssemblyDefinitionFiles.html#create-platform-specific [创建程序集定义资源]:ScriptCompilationAssemblyDefinitionFiles.html#create-asmdef [基于项目包定义符号]:ScriptCompilationAssemblyDefinitionFiles.html#define-symbols [General]:#general [平台相关的编译]:PlatformDependentCompilation.html [引用预编译的插件程序集]:ScriptCompilationAssemblyDefinitionFiles.html#reference-precompiled-assembly