程序集定义引用&&预定义程序集及编译规则
Unity中程序集定义引用、预定义程序集及编译规则...
程序集定义引用&&预定义程序集及编译规则
程序集定义引用&&预定义程序集及编译规则
预定义程序集及编译规则
预定义程序集及编译阶段
| 阶段 | 程序集名称 | 脚本文件 |
|---|---|---|
| 1 | Assembly-CSharp-firstpass | 名为 Standard Assets、Pro Standard Assets 和 Plugins 的文件夹中的运行时脚本。 |
| 2 | Assembly-CSharp-Editor-firstpass | 名为 Editor 的文件夹(位于名为 Standard Assets、Pro Standard Assets 和 Plugins 的顶级文件夹中的任意位置)中的 Editor 脚本。 |
| 3 | Assembly-CSharp | 不在名为 Editor 的文件夹中的所有其他脚本。 |
| 4 | Assembly-CSharp-Editor | 其余所有脚本(位于名为 Editor 的文件夹中的脚本)。 |
编译规则
- 当前阶段的程序集无法引用当前阶段之后的程序集
- 在编译程序集之前,先编译当前程序集引用的程序集(若引用的程序集未编译)
程序集定义(Assembly Definition)
- 格式 .asmdef文件
- 作用机制:每个.asmdef文件生成单独的Dll文件,自动识别所处文件夹下及其子文件夹下的.cs文件,直到下一个.asmdef
- 作用: 1、定义程序集的引用和依赖项 2、定义Unity的最小编译单元,减少在Unity中改动.cs文件后的编译时间 3、控制.cs文件在某个特定平台(Unity版本、依赖包版本)编译或者不编译(注:不满足编译条件时,Unity跳过该程序集的编译,不报错。)
程序集定义引用(Assembly Definition Reference)
- 格式 .asmdef文件
- 作用机制:类似Assembly Definition,区别在于Assembly Definition Reference将识别到的.cs文件编入到一个已经存在的Assembly Definition中,与原本的程序集编译成一个Dll. 实际上是通过识别Unity的meta文件中的GUID找到对应的.asmdef文件,然后进行程序集构筑.
- 作用: 将两或以上个不同路径下的.cs文件合为一个程序集,编译成一个Dll文件.增加代码开发的灵活性 有效避免项目中代码文件重名报错的问题,合理使用大幅度缩减代码文件命名长度
使用
- 创建Assembly Definition后,在Inspector面板设置.或者直接编辑.asmdef文件
- .asmdef 只能单向引用,禁止循环依赖
- Allow ‘Unsafe’ Code : 是否启用Unsafe{}代码块.(指针、地址运输、内存操作等)
- Auto referenced : Unity的所有预定义程序集自动引用当前程序集
- No Engine References : 是否取消当前程序集对UnityEngine的引用
- Override References : 是否覆写当前程序集的引用
- Root Namespace : 在当前程序集下创建代码文件自动添加的空间命名
- Define Constraints : 定义该程序集的编译条件
- Assembly Definition References : 引用其他的程序集.
- Use GUIDs : 是否使用GUID定位需要引用的程序集(不使用路径+名字字符定位,保证引用的.asmdef文件唯一,方便后续移动文件)
- Platforms : 选择该程序集编译的平台
- Version Defines : 当Unity或某个包
Resource的版本满足给定表达式Expression时,自动给本程序集定义一个独占宏Define.用于兼容开发.可配合Define Constraints使用可以限制在该程序集仅在某个特定Unity版本或者包编译
注意:
- Assembly Definition中的Name字段必须唯一,但外部文件名可以重复
- 同一个文件夹下不能同时存在两个Assembly Definition
本文由作者按照 CC BY 4.0 进行授权