文章

程序集定义引用&&预定义程序集及编译规则

Unity中程序集定义引用、预定义程序集及编译规则...

程序集定义引用&&预定义程序集及编译规则

程序集定义引用&&预定义程序集及编译规则

预定义程序集及编译规则

预定义程序集及编译阶段

阶段程序集名称脚本文件
1Assembly-CSharp-firstpass名为 Standard Assets、Pro Standard Assets 和 Plugins 的文件夹中的运行时脚本。
2Assembly-CSharp-Editor-firstpass名为 Editor 的文件夹(位于名为 Standard Assets、Pro Standard Assets 和 Plugins 的顶级文件夹中的任意位置)中的 Editor 脚本。
3Assembly-CSharp不在名为 Editor 的文件夹中的所有其他脚本。
4Assembly-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 进行授权