【Unity】程序集Assembly模块化开发

本文介绍了Unity引擎中程序集定义(AssemblyDefinition)和程序集引用的概念,探讨了它们在大型项目中的重要性,包括提高编译速度、降低耦合度和增强平台适应性。通过创建和管理自定义程序集,开发者可以实现代码的模块化和重用,减少不必要的编译时间,并更好地控制项目的结构和依赖关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

笔者按:使用Unity版本为2021.3LTS,与其他版本或有异同。请仅做参考
一、简述。
本文是笔者在学习使用Unity引擎的过程中,产学研的一个笔记。由笔者根据官方文档Unity User Manual 2021.3 (LTS)/脚本/Unity 架构/脚本编译/程序集定义相关部分结合自身经验所做,有不足之处,还请指正。
二、导读。
1.==程序集定义(Assembly Definition)程序集引用(Assembly Definition Reference)==是可创建用于将脚本组织为程序集的资源。
2.Unity代码工程一般默认创建两个程序集:Assembly-CSharp(非Editor目录下脚本归于此程序集) Assembly-CSharp-Editor(任何Editor目录下脚本都自动归于此程序集)
3.使用默认程序集,对于小项目而言可以接受。但项目过大会有以下缺点:

1.脚本有改动时,Unity会重新编译当前程序集下所有脚本,过多脚本会导致编译时间冗长。
2.理论上同一程序集内任何脚本都可相互访问引用,导致项目耦合度高,难以重构和优化改进代码。
3.所有脚本都针对所有平台进行编译。
4.定义程序集,有以下优点:
1.促进模块化和可重用性。
2.提升编译效率。
3.提升代码的平台适配性。

三、程序集定义。
1.程序集定义,可以把你想单独成模块的脚本目录给独立出来,到一个程序集中。
2.为每个程序集创建一个文件夹(图3-2-1),并将需要归入此程序集的脚本移入到文件夹目录中去(图3-2-2),然后再创建程序集定义资源以指定程序集属性(图3-2-3)。
3-2-1
3-2-2
3-2-3
3.新建的Assembly Definition Asset的属性面板如下:
3-3-1
逐项解释:
[Name] ——程序集名称,一般在创建时便被定义,可修改;
General一般属性
[Allow ‘unsafe’ Code]是否允许使用不安全的编码;
[Auto Referenced]程序集之间是否根据编译顺序自动引用相应的程序集;

当不同程序集之间存在引用关系时,程序集之间就会存在依赖关系。A引用B,A依赖B。当Unity编译脚本时,B必须先于A被编译好。如此A才可以访问其依赖项的已编译版本。A的程序集必须声明对程序集B的引用。

[No Engine References]不引用(相关)的程序集引用
[Override References]对预编译程序集的引用,覆盖对预编译程序集的自动引用情况。一般为动态链接库(dll)
[Root Namespace]当前程序集的默认命名空间,在当前程序集中新建脚本时有用

Define Constraints定义约束条件。通过相应的“宏定义”来控制程序集的是否编译的行为。
–Assembly References–(与Override References 一起使用)选择需要引用程序集的程序集定义添加进来
Assembly Definition References程序集定义引用。
[Use GUIDs]勾选此选项,可以允许引用的程序集修改名称而不受影响。提倡勾选
Platforms设置程序集的平台兼容性
Version Defines对不同的程序集进行不同的配置与定义。
3.新建程序集定义的文件。
*.asmdef。内部编码遵循Json格式,故而除了可以在属性面板上修改之外,也可以直接修改Json。
四、程序集定义引用。
1.程序集定义引用,就是把当前目录下的脚本合并到指定程序集定义当中去。
2.创建程序集定义引用(Assembly Definition Reference)资源。
在Project窗口中找到需要包含到引用程序集中的脚本文件夹,点击(Assets->Create->Assembly Definition Reference),定义名称。
4-2-1
3.新建程序集定义引用属性面板。
4-3-1
[Use GUID]使用程序集的Guid而非Name。
[Assembly Definition]指定对应的程序集定义。
4.新建程序集定义引用的文件。
*.asmref。内部编码遵循Json格式,故而除了可以在属性面板上修改之外,也可以直接修改Json。
五、以上就是程序集Assembly相关的部分。如果想了解更多,建议去官网文档直接找程序集篇。有什么想法,也可以和笔者讨论。
游戏开发交流群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值