程序集定义(Assembly Definition File)

程序集定义(Assembly Definition File),第1张

Unity开发者可以在一个文件夹中自定义程序集。定义明晰的依赖关系,可以确保脚本更改后,只会重新生成必需的程序集,减少编译时间。

在一个项目中会存在多个程序集,例如SDK集合、热更集合、插件集合、主集合等,如果未自定义程序集,修改其中一个集合的脚本后Unity再次编译,这时Unity会将所有集合都编译一遍,时间的浪费是我们所不希望的。当我们为每一个集合都定义程序集后,修改脚本只会编译对应的程序集。

通过在Unity中点击:Assets >Create >Assembly Definition菜单创建。该文件的扩展名是.asmdef。

需要注意的是程序集名与文件名无关,真正有关联关系的是Inspector面板中Name对应的名称

该程序集我们还可以在解决方案中观察到

程序集依赖关系成树状,一旦确立依赖关系,低层级的程序集则无法调用高层级程序集里的类和方法。

这里我设立了三个程序集:Unity.Hotfix、Unity.Model、Unity.ThirdParty;

他们之间的依赖关系如下

这样在Hotfix程序集里可以调用Model与ThirdParty程序集中的脚本,但是Model无法调用Hotfix程序集中的脚本

程序集会管理它当前所在文件夹和子文件夹中的脚本。

如果一个脚本当前文件夹中定义了一个程序集,它的父文件夹中也定义了一个程序集,该脚本会被归纳到它当前文件夹的程序集中

在平台中可以设置程序集编译平台

这样可以使某些程序集避免在一些特殊平台下被编译,常见的例如我们希望我们的Edtor程序集或热更资源程序集只在编辑器下被编译,那么我们就可以在平台设置中只勾选Editor

第一种方法:通过点击场景文件打开Unity游戏工程

找到Unity游戏工程所在的目录,我这里的工程放在在E盘根路径的Unity_workspace文件夹中。

注意:unity软件不支持中文路径,所以不要把工程放在中文文件夹下。

我们在这里就打开New Unity Project 4工程,进入到New Unity Project 4文件夹下,再进去Assets文件夹,双击场景文件(后缀为.unity的文件),我这里的场景文件为scene.unity。

如果你的工程是低版本的unity软件所建的,高版本打开会显示升级工程,点击“Continue”按钮即可。

最后就打开工程了,如下图所示。

第二种方法:在主界面中直接通过open Project 打开工程

首先,的进入Unity软件主界面,点击菜单栏上的“File”按钮,子啊d出来的下拉列表中选中“Open Project”选项如下图所示。

再d出来的“OPen Project”窗口中点击“OPen Other”按钮,选择游戏工程的根目录。

这里我所选的工程的是New Unity Project3,如图所示。

同样,如果你的工程是低版本的unity软件所建的,高版本打开会显示升级工程,点击“Continue”按钮即可。

最后打开了New Unity Project3,如下图所示

DLL —— Dynamic Link Library(动态链接库文件),这里以Window平台为例。

Unity支持的两种语言生成的DLL库(C++、C#),这里以C#为例,C++网上可以搜索很详细的资料。

1) 添加引用关系

如果有对UnityEngine、UnityEditor的引用,需要先添加引用关系。

路径通常位于Unity安装目录下的Editor/Data/Managed路径下。

2) 生成DLL文件

建立项目时,选择“类库”。目标框架.Net Framework的版本,只能选择3.5及以下版本。

3) 在项目中引用DLL文件

Unity会自动加载相应的DLL文件,所以DLL文件只要存放于Assets目录下即可,当然为了统一管理,一般放在Plugins目录下。

这里有一个需要注意的点,如果DLL文件放在Editor下,那么只能是Editor目录下的C#文件才可以引用,如果想在项目运行时的C#中进行引用,那DLL文件就不能放在Editor目录下。以上目录只与名字相关,与层级无关,路径可以是Assets/a/b/c/d/e/../XX.DLL

放置好DLL后,注意刷新Visual Studio中的解决方案。

0人赞  添加讨论(0)

暂无评论 :)

请点击输入图片描述

啦啦啦

4楼 · 2021-05-08 14:11

托管代码是一microsoft的中间语言(IL),它不直接运行在机器上而是运行在.net的CLR中。IL被封装在一个叫程序集(assembly)的文件中,一般输出形式为.dll或.exe文件,程序集中包含了描述你所创建的类,方法和属性(例如安全需求)的所有元数据。

当程序集中某些方法被调用的时候,运行库把具体的方法编译成适合本地计算机运行的机械码。(这就是即时编译) 随着程序集的运行,运行库会持续地提供各种服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务使得能编译成IL的源代码具有跨平台的特性。我们常用的C#只能编译成托管代码,而C++可以编译成托管代码和非托管代码。非托管代码就是直接编译成目标计算机的机器码。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12134643.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存