在一个项目中会存在多个程序集,例如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++可以编译成托管代码和非托管代码。非托管代码就是直接编译成目标计算机的机器码。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)