相关文章推荐
没读研的火柴  ·  制作vb dll的总结 - ElNinoT ·  1 月前    · 
有爱心的消防车  ·  python tkinter下划线 - ...·  1 年前    · 
长情的山羊  ·  Vue3实战——项目搭建(二) - 简书·  2 年前    · 
鬼畜的饼干  ·  请问UVM中,RAL的mirror值是干什么 ...·  2 年前    · 
伤情的消防车  ·  关于 CentOS ...·  2 年前    · 
爱跑步的春卷  ·  如何将Ffmpeg扩展嵌入到Windows下 ...·  2 年前    · 
Code  ›  Unity关于程序集(Assembly )的那些事_unity assembly
unity 编译程序
https://blog.csdn.net/weixin_43405845/article/details/105174096
坐怀不乱的煎饼果子
1 年前
      • 一. 什么是程序集?
      • 二. 为什么使用程序集?
      • 三. 如何在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) 几个层次。
      在这里插入图片描述

      二. 为什么使用程序集?

      1. 开发者可以自定义程序集,定义明晰的依赖关系,可以确保脚本更改后,只会重新生成必需的程序集,减少编译时间。
      2. 可以跨项目进行程序的复用,加快开发效率
      3. 支持跨语言的编程,例如可以在unity中使用C++语言编辑的DLL文件

      三. 如何在Unity中使用程序集

      1.基本常识
      1. 在Assets文件夹中编写脚本,如果没有进行自定义操作,会默认编译到 Assembly-CSharp.dll 中。 在这里插入图片描述
      2. 开发过程中如果进行了编辑器扩展,创建了 Editor 文件夹,并在该目录下编写了脚本,则默认编译到Assembly-CSharp-Editor.dll文件中。 在这里插入图片描述
      3. DLL文件的生成路径: 项目路径 \Library\ScriptAssemblies\xxxx.dll
        在这里插入图片描述
      2.自定义程序集
      1. 创建一个新的文件夹(之所以不在Assets根目录下直接创建程序集,因为根目录下创建的程序集会取代Assembly-CSharp.dll)
        2.通过 Assets > Create > Assembly Definition,也可以直接通过右键菜单创建。
        在这里插入图片描述
        创建效果如下所示: 在这里插入图片描述
        与新建的程序集处于同一层级或者处于子层级的所有脚本都编译到该程序集。
        在这里插入图片描述
      3. 多层级的程序集

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

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

      4. Assembly Definition Reference

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

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

      四. 程序集 Inspector 面板详解

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

      1. Allow ‘unsafe’ code:如果程序集中使用了 Unsafe 关键字,需要勾选此选项,否则报错
      2. Auto Referenced:指定是否所有预定义程序集都应引用此程序集。
      3. Override References:启用后以手动方式确认引用哪些程序集
        在这里插入图片描述
      4. 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代表的数学方程式。

      参考文章:

      1. 程序集与反射技术(C#)
      2. C# 程序集Assembly
      3. 官方文档
      4. [洪流学堂]Unity2017.3新功能
      所有需要把两个 程序 集 区分,使得一个只在客户端上编译,一个只在服务器上编译时,应该先切换平台至无头服务器,然后填写Server 程序 集 中的DefineConstraints这一栏 UNITY _SERVER。DefineConstraints 这一栏中只能填 符合当前启用的宏的条件,不符合的就会报错。然后再切回客户端的平台设置相应 程序 集 即可。 Unity IFilterBuildAssemblies是 Unity 引擎中的一个非常有用的功能,它可以让开发者在构建项目时自定义哪些 程序 集 需要被包含在构建中,哪些 程序 集 需要被排除在建之外。在本文中,我们介绍了 Unity IFilterBuildAssemblies的方法,并提供了三个使用例子,帮助读者更好地理解这个功能。在这个方法中,我们可以编写我们需要执行的操作,并且可以获取构建报告。在这个例子中,我们将演示如何在构建项目时根据平台选择需要被包含在构建中的 程序 集 。本文由博客一文多发平台。 1. Unity 2017.3后加入了自定义 程序 集 功能,定义 程序 集 包含的脚本, 程序 集 之间的关系,在脚本修改更新后,只会重新生成与修改脚本相关联的 程序 集 ,减少编译器的编辑时间。 2.项目越大,项目的编译时间越长,合理的设置自定义 程序 集 ,可以有效的减少编辑时间,提高工作效率。 3.修改Main 程序 集 ,只会重新编译Main.dll。但是修改Library.dll,会导致Stuff.dll和Main.dll重新编译。 4.创建自定义 程序 集 的方法,Asset/Create/ Assembly Definition–》创 另外一种是以下面的这种方式来加入到项目里的, assembly definition ,他说这样创建的,首先在 unity 里新建一个文件夹,然后在该文件夹里新建一个 assembly definition,这样整个文件夹都会归属到这个 程序 集 里,外边的代码可以访问到这个文件夹里的,但是这个文件夹里的代码如果不就行引用设置就访问不到外部。这样做有两个好处,第一做了代码层上的隔离,保证这个文件夹里的代码只会向外提供某个功能,而和哪个项目无关,这样就可以抽象出来做成框架,在新的项目里这部分代码就可以共用起来。 private void ReflectionMethod(Type thisType, string find Assembly Name, string fullTypeNameContainsNamespace, string methodName,BindingFlags bindingFlags, object[] args) var this Assembly = thisType. Assembly ; string filePath = this Assembly .Loc. 一. 什么是 程序 集 ?二. 为什么使用 程序 集 ?三. 如何在 Unity 中使用 程序 集 1.基本常识2.自定义 程序 集 3. 多层级的 程序 集 4. Assembly Definition Reference 四. 程序 集 Inspector 面板详解 Unity 的编译器 这是什么? 该工具可视化 Unity 3D中的装配编译过程。 它挂接到编辑器提供的 事 件,并很好地在时间线上绘制它们。 在尝试优化 程序 集 之间的编译时间和依赖性时,这特别有用。 除了显示编译的图形视图之外,选择 程序 集 还显示该 程序 集 的依存关系和依存关系。 屏幕截图显示了完整的汇编。 但是时间线对部分编译也有效(例如,您更改了一个脚本,而 Unity 仅重新编译了依赖链的相关部分)。 可在OpenUPM上使用编译器可视化工具: ://openupm.com/packages/com.needle.compilation-visualizer/ 如果您使用 Unity 20
 
推荐文章
没读研的火柴  ·  制作vb dll的总结 - ElNinoT
1 月前
有爱心的消防车  ·  python tkinter下划线 - CSDN文库
1 年前
长情的山羊  ·  Vue3实战——项目搭建(二) - 简书
2 年前
鬼畜的饼干  ·  请问UVM中,RAL的mirror值是干什么用的? - 知乎
2 年前
伤情的消防车  ·  关于 CentOS 迁移龙蜥操作系统,这里有一份详细指南,请查收! - 知乎
2 年前
爱跑步的春卷  ·  如何将Ffmpeg扩展嵌入到Windows下的Exoplayer中?
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号