Unity关于程序集(Assembly )的那些事 您所在的位置:网站首页 unity创建不了脚本 Unity关于程序集(Assembly )的那些事

Unity关于程序集(Assembly )的那些事

2024-01-10 22:33| 来源: 网络整理| 查看: 265

学习大纲 一. 什么是程序集?二. 为什么使用程序集?三. 如何在Unity中使用程序集1.基本常识2.自定义程序集3. 多层级的程序集4. Assembly Definition Reference 四. 程序集 Inspector 面板详解

一. 什么是程序集?

程序集是代码进行编译是的一个逻辑单元,把相关的代码和类型进行组合,然后生成PE文件(例如可执行文件**.exe和类库文件.dll**)。由于程序集在编译后并不一定会生成单个文件,而可能会生成多个物理文件,甚至可能会生成分布在不同位置的多个物理文件,所以程序集是一个逻辑单元,而不是一个物理单元。即程序集在逻辑上是一个编译单元,但在物理储存上可以有多种存在形式。对于静态程序集可以生成单个或多个文件,而动态程序集是存在于内存中的。在C#中程序集处处可见,因为任何基于.NET的代码在编译时都至少存在一个程序集。 基于.NET框架的.dll库是一个完整的程序集,需要事先引用对应的类库。从代码的结构上看,一个程序集可以包含一个或多个命名空间,而每个命名空间中又可以包含子命名空间或类型列表。由于程序集在编译后可以生成多个模块文件,因此一个物理文件并不代表它就是一个程序集,一个程序集并不一定只有一个文件。在VS开发环境中,一个解决方案可以包含多个项目,而每个项目就是一个程序集。

应用程序结构:包含 应用程序域(AppDomain),程序集(Assembly),模块(Module),类型(Type),成员(EventInfo、FieldInfo、MethodInfo、PropertyInfo) 几个层次。 在这里插入图片描述

二. 为什么使用程序集? 开发者可以自定义程序集,定义明晰的依赖关系,可以确保脚本更改后,只会重新生成必需的程序集,减少编译时间。可以跨项目进行程序的复用,加快开发效率支持跨语言的编程,例如可以在unity中使用C++语言编辑的DLL文件 三. 如何在Unity中使用程序集 1.基本常识 在Assets文件夹中编写脚本,如果没有进行自定义操作,会默认编译到 Assembly-CSharp.dll 中。在这里插入图片描述开发过程中如果进行了编辑器扩展,创建了Editor文件夹,并在该目录下编写了脚本,则默认编译到Assembly-CSharp-Editor.dll文件中。在这里插入图片描述DLL文件的生成路径:项目路径\Library\ScriptAssemblies\xxxx.dll 在这里插入图片描述 2.自定义程序集 创建一个新的文件夹(之所以不在Assets根目录下直接创建程序集,因为根目录下创建的程序集会取代Assembly-CSharp.dll) 2.通过 Assets > Create > Assembly Definition,也可以直接通过右键菜单创建。 在这里插入图片描述 创建效果如下所示:在这里插入图片描述 与新建的程序集处于同一层级或者处于子层级的所有脚本都编译到该程序集。 在这里插入图片描述 3. 多层级的程序集

在上面的步骤中我们讲到:在文件夹中创建Assembly Defienitions时,Unity将从该文件夹中的所有脚本编译到一个单独的托管程序集,并包含所有子文件夹的定义。 如果子文件夹具有自己的程序集定义,该文件夹中的所有脚本及其子文件夹中的脚本编译到一个单独的托管程序集,这些托管程序集充当Unity项目中的单个库。

图片一目了然: 在这里插入图片描述 在这里插入图片描述

4. Assembly Definition Reference

细心的同学可能发现创建程序集的时候下面还有一个Assembly Definition Reference 选项,下面是一些注意事项:

每个文件夹只能创建一个“Assembly Definition”或“Assembly Definition Reference”。Use GUID 选项 在这里插入图片描述参看下面的面板详解。 四. 程序集 Inspector 面板详解

在这里插入图片描述 【Name】:程序集的名称(不带文件扩展名); 程序集名称在整个项目中必须唯一。 【General】:

Allow ‘unsafe’ code:如果程序集中使用了Unsafe关键字,需要勾选此选项,否则报错Auto Referenced:指定是否所有预定义程序集都应引用此程序集。Override References:启用后以手动方式确认引用哪些程序集 在这里插入图片描述No Engine References:启用此属性后,Unity在编译程序集时不会向UnityEditor或UnityEngine添加引用。

【Define Constraints】:指定必须定义的编译器#define指令,才能编译或引用程序集。 【Assembly Definition References】:指定对使用 Assembly Defienitions 创建的其他程序集的引用。 在这里插入图片描述 【Platforms】:设置发布平台 【Version Defines】: 在这里插入图片描述 Resource:选择要为其设置Define的包或模块。 该列表包含项目中所有活动的软件包和模块。 Define:设置Define的名称。 仅当Expression返回true时才设置此定义。 Expression:选择的模块或软件包的语义版本范围。 必须使用数学间隔符号。 不支持通配符。 该版本使用与Microsoft .NET软件包管理器NuGet相同的版本范围。 Expression outcome:Expression代表的数学方程式。

参考文章:

程序集与反射技术(C#)C# 程序集Assembly官方文档[洪流学堂]Unity2017.3新功能


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有