首页 > 编程语言 >【Unity开发】如何使用 Assembly Definition 划分多个程序集,减少编译时间

【Unity开发】如何使用 Assembly Definition 划分多个程序集,减少编译时间

时间:2024-10-27 19:59:15浏览次数:1  
标签:Definition Assembly 程序 编译 Unity CSharp

在Unity开发中,项目的复杂性和规模不断增加,这导致编译时间变得越来越长。
为了提升编译效率,使用Assembly Definition文件(.asmdef)将代码划分成多个程序集是一种非常有效的解决方案。

1. 什么是Assembly Definition?

Assembly Definition是一种Unity用于定义C#程序集的文件。
通过将代码分成多个独立的程序集,Unity可以独立编译这些程序集,而不是每次都编译整个项目。
这不仅可以减少编译时间,还能提高项目的可维护性、可扩展性和模块化。

1.1 程序集的概念

在C#中,程序集是一个逻辑上分隔的代码集合,通常对应于一个DLL文件或EXE文件。
每个程序集都有自己的类型信息、版本信息和其他元数据。
在Unity中,程序集允许开发者将代码组织得更为合理,增强代码的复用性。

1.2 在其他环境中的类似概念

虽然Assembly Definition是Unity特有的,但在其他开发环境中也有类似的概念。
例如:

  1. .NET Framework和.NET Core:在这些平台上,开发者可以使用csproj文件来定义项目和其依赖关系。通过合理配置项目,可以实现类似于Unity中的程序集管理。
  2. Java:在Java中,JAR文件相当于程序集,开发者可以使用构建工具(如Maven或Gradle)来管理项目的模块化和依赖关系。
  3. C++:在C++中,开发者可以通过使用静态库和动态库来实现模块化,但这需要手动管理依赖关系和编译过程。

1.3 默认划分

在Assets文件夹中编写脚本,如果没有进行自定义操作,会默认编译到 Assembly-CSharp.dll 中。
简单来说,我们正常编写的脚本会被划分为Assembly-CSharp程序集中。
image
这里也能说明当前这个脚本是隶属于哪个程序集中的。

在Editor目录下的脚本文件会被自动分为Assembly-CSharp-Editor程序集。
image

更多类似默认划分的还有:

  1. Plugins目录:Assembly-CSharp-firstpass
  2. Plugins目录下的Editor目录:Assembly-CSharp-Editor-firstpass

1.4 程序集之间的引用

如果程序集A引用了程序集B,而程序集B又引用了程序集C,那么程序集A可以间接访问程序集C中公开的类型。

以上述默认程序集的引用为例
image

2. 如何在Unity使用Assembly Definition

2.1 创建

在选中的文件夹上右键单击,选择Create > Assembly Definition。
这将创建一个新的.asmdef文件。
image

标签:Definition,Assembly,程序,编译,Unity,CSharp
From: https://www.cnblogs.com/asyaB404/p/18508842

相关文章

  • JavaScript 与 Rust 和 WebAssembly 集成
    偶然一次机会,接触了Rust的代码。当时想给团队小伙伴做演示,发现自己并不能在移动端按照文档生成演示demo。我就想,要是Rust代码能转化成JavaScript就好了。结果一搜,还真有。下面整理成文档,分享给大家。为大家解决问题,多提供一种思路、方式、方法。 一、分享的目的:▪由Rust、We......
  • unity开发之可视化制作动画
    录制动画1)打开录制动画页面(或者按快捷键ctrl+6)2)选中需要录制动画的对象3)创建动画列表,注意现在还没有录制动画,我这里创建了开门和关门动画列表4)选择需要录制动画的对象的相应属性,我这里动画需要调整门的x轴向角度5)录制动画录制分为了录制前、录制中、录制......
  • 【Unity】OnGUI 代码生成UI
    ​GUI.Box盒子GUI.Button按钮GUI.RepeatButton 按住会触发的按钮GUI.Label标签文本GUI.TextField 单行文本框GUI.TextArea 多行文本框GUI.Toggle 单选radioGUI.Toolbar 单选tabGUI.SelectionGrid 单选可以表格布局GUI.HorizontalSlider 滑动条水平方向GU......
  • assembly2
    汇编2寄存器(不同架构不同)8086中寄存器均为16位,可存放两个字节(1byte=8bit)。通用寄存器AX,BX,CX,DX用来存储一般性的数据,被称为通用寄存器。二进制数据在寄存器中是低位存在低地址,高位存在高地址。也可将一个寄存器分为H,L(高8位低8位)来做8位存储器。字在寄存器中......
  • Unity 5.6 Basic shader framework
    UnityShader参考入口VertexandfragmentshaderShader"Unlit/NewUnlitShader"{Properties{_MainTex("Texture",2D)="white"{}}SubShader{Tags{"RenderType"="Opaque&quo......
  • MYSQL-SQL-01-DDL(Data Definition Language,数据定义语言)
    DDL(数据定义语言)DDL(DataDefinitionLanguage),数据定义语言,用来定义数据库对象(数据库,表,字段)。一、数据库操作1、查询mysql数据库管理系统的所有数据库语法:showdatabases;示例:2、查询当前所在的数据库语法:selectdatabase();示例:3、创建数据库语法:([]括号......
  • Unity3D教程:次表面散射的简单实现
    次表面散射指的是光线射入半透明材质,在内部发生散射后再透射出来的光线传播过程,考虑到有些项目会需要使用次表面散射,下面就给大家介绍下在Unity3D中次表面散射的简单实现,希望可以帮到大家。 一、前言本文旨在与大家一起探讨学习新知识,如有疏漏或者谬误,请大家不吝指出。以下内......
  • Unity常用宏
    Unity常用宏定义Define说明UNITY_EDITOR编辑器。UNITY_EDITOR_WINWindows上编辑器。UNITY_EDITOR_OSXMacOSX上编辑器。UNITY_EDITOR_LINUXLinux上编辑器。UNITY_STANDALONE_OSX专门为MacOSX(包括通用、PPC和英特尔架构)编译或执行代码。UNITY_STANDALONE_WIN专门用于......
  • unity资源自动优化
    #ifUNITY_EDITORusingSystem.Collections;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Text;usingUnityEditor;usingUnityEngine;publicclassAutoOptimizeAssetes:UnityEditor.AssetPostprocessor{///<summary>///音频资......
  • 【Unity】发布微信小游戏-资源优化
    资源优化方向记录:1、首包场景里面使用的字体重新生成一个,只包含首包可能使用到的字符,可以将几M的字体缩到几时KB 2、减少大尺寸贴图使用,合理压缩图片格式3、使用AssetStudio等工具检查首包资源,查看包含了那部分资源,是否引用,是否过大 这里查到了一部分无使用的资源贴图......