Unity Assembly Definition Assembly Definition Reference
文章目录
- 1.Unity 预定义程序集
- 2.Assembly definition
- 3. Assembly definitions相关实验
1.Unity 预定义程序集
Unity 有4个预定义程序集:
阶段 | 程序集名 | 脚本文件 |
---|---|---|
1 | Assembly-CSharp-firstpass | Standard Assets, Pro Standard Assets和Plugins文件夹下面的运行时脚本 |
2 | Assembly-CSharp-Editor-firstpass Standard Assets, Pro Standard | Assets和Plugins文件夹下面的Editor文件夹下面的Editor脚本 |
3 | Assembly-CSharp | 其它不在Editor文件夹下面的脚本 |
4 | Assembly-CSharp-Editor | 所有剩下的脚本(Editor文件夹下面的脚本) |
2.Assembly definition
程序集是一个C#代码库,它包含由脚本定义的已编译类和结构,还定义了对其他程序集的引用。
默认情况下,Unity将几乎所有的游戏脚本编译到预定义的程序集中(Assembly-CSharp.dll)。
这种安排对于小型项目来说是可以接受的,但是当你向项目中添加更多代码时,会有一些缺点:
- 每当你改变一个脚本时,Unity就必须重新编译所有其他脚本,这增加了迭代代码更改的整体编译时间。
- 任何脚本都可以直接访问任何其他脚本中定义的类型,这使得重构和改进代码变得更加困难。
- 所有脚本都是为所有平台编译的。
- 在工程下新建两个文件夹
- 在两个文件夹下右键创建Assembly Definition(文件后缀名为
.asmdef
)
属性介绍:
Name
:程序集的名称 , 程序集名称在整个项目中必须唯一General
:
① Allow ‘unsafe’ code:如果程序集中使用了Unsafe关键字,需要勾选此选项,否则报错
② Auto Referenced:指定是否所有预定义程序集都应引用此程序集。
③ No Engine References:启用此属性后,Unity在编译程序集时不会向UnityEditor或UnityEngine添加引用。
④ Override References:启用后以手动方式确认引用哪些程序集
⑤ Root Namespace:当前程序集的默认命名空间,填写后我们使用unity添加新代码文件,会自动添加命名空间。Define Constraints
:指定必须定义的编译器#define指令,才能编译或引用程序集。Assembly Definition References
:指定对使用 Assembly Defienitions 创建的其他程序集的引用。Platforms
:设置发布平台
- 在MyCode1文件夹下新建MyTool.cs脚本用于测试
public class MyTool
{
public static string SayHello()
{
return "Hello world";
}
}
- 在MyCode2文件夹下创建Visit.cs脚本,尝试访问Tool中的静态方法,会发现不存在
- 对MyCode2.asmdef添加MyCode1.asmdef的引用
- 再次访问,发现可以正常访问到
- 在VS中也可以看到形成了两个程序集
3. Assembly definitions相关实验
引用其它文章:https://zhuanlan.zhihu.com/p/388803476