笔者按:使用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.新建的Assembly Definition Asset的属性面板如下:
逐项解释:
[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]当前程序集的默认命名空间,在当前程序集中新建脚本时有用文章来源:https://www.toymoban.com/news/detail-607754.html
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),定义名称。
3.新建程序集定义引用属性面板。
[Use GUID]使用程序集的Guid而非Name。
[Assembly Definition]指定对应的程序集定义。
4.新建程序集定义引用的文件。
*.asmref。内部编码遵循Json格式,故而除了可以在属性面板上修改之外,也可以直接修改Json。
五、以上就是程序集Assembly相关的部分。如果想了解更多,建议去官网文档直接找程序集篇。有什么想法,也可以和笔者讨论。
文章来源地址https://www.toymoban.com/news/detail-607754.html
到了这里,关于【Unity】程序集Assembly模块化开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!