首页 > 编程语言 >理解Unity脚本编译过程:程序集

理解Unity脚本编译过程:程序集

时间:2025-01-10 18:31:54浏览次数:3  
标签:脚本 assembly 自定义 编译 Unity 文件夹 Assembly

https://docs.unity3d.com/Manual/script-compilation.html

关于Unity C#脚本编译的细节,其中一个比较重要的知识点就是如何自定义Assembly。

预定义的assembly

默认情况下,Unity会按照这个规则进行编译。

PhaseAssembly nameScript files
1Assembly-CSharp-firstpassRuntime scripts in folders called Standard Assets, Pro Standard Assets and Plugins.
2Assembly-CSharp-Editor-firstpassEditor scripts in folders called Editor that are anywhere inside top-level folders called Standard Assets, Pro Standard Assets and Plugins.
3Assembly-CSharpAll other scripts that are not inside a folder called Editor.
4Assembly-CSharp-EditorAll remaining scripts (those that are inside a folder called Editor).

根据阶段的编号,从上到下进行编译。

条件编译

可以通过与定义宏,进行条件编译。需要特别注意的是编辑器的情况,如果想要条件编译在编辑器模式下生效,宏定义修改后需要对脚本进行重新编译,否则条件编译不生效。并且,我们在CI中使用Unity的headless模式,无法实现这一特点。

自定义assembly

https://docs.unity3d.com/Manual/ScriptCompilationAssemblyDefinitionFiles.html

在这里插入图片描述

assembly 程序集,是一个包含编译过的c#代码和程序集依赖关系的代码库。自定义assembly可以增强代码模块化和重用性,

创建一个assembly

使用 Assets/Create/Assembly Definition在文件夹下创建一个asset,Unity会根据其设置,把该文件夹下所有代码编译到这个assembly中。包含其内部的子文件夹,除非子文件夹下也定义了assembly definition asset。

如果想要把其他文件夹下的内容也包含到某一个assembly当中,需要在该文件夹内定义一个assembly definition reference,并且设置reference的assembly。

引用和依赖

当一个类使用到另外一个类,就表示它依赖于另外一个类。如果两个类型在不同的assembly当中,那么第一个类的assembly需要引用另外的assembly。

默认情况下,预定义的assembly会自动引用自定义assembly和预编译assembly(Plugins)。可以通过关闭Auto Referenced选项,取消自动引用。关闭以后,自定义assembly的修改不会引发预定义assembly的重新编译,同时预定义assembly中的代码不能访问自定义assembly中的内容。需要跟进情况斟酌。

在这里插入图片描述

疑问:这里的.asmdef不能访问Assembly-CSharp中的内容,但是它可以访问所有的Unity程序集代码、Packages中的代码,文档中没有详细说明,它们是属于Precompiled Assemblies吗?

仔细看asmdef的内容,发现程序集默认依赖了引擎的程序集,No Engine References可以取消引用;另外Packages中的访问,也必须定义引用才行,使用Assembly Definition References进行设置。

循环引用

不同程序集之间不允许循环引用,如果发生了会报错。

其他

assembly definition asset还有很多其他的设置项,跟进情况查看文档使用。

标签:脚本,assembly,自定义,编译,Unity,文件夹,Assembly
From: https://blog.csdn.net/omegayy/article/details/145039891

相关文章

  • C++项目Visual Studio 如何在Release编译模式下断点调试
    在VS中,Debug编译模式下通常是默认支持断点调试的,但有时项目需要会需要在Release编译模式下进行打断点调试原因无外乎三点:Debug模式下编译运行无异常,但Release下出现问题需要release下屏蔽断言和部分宏定义win平台的动态库区分release和debug模式,部分项目......
  • 【c# Unity-Shader版本贪吃蛇教程】一张Plane渲染的Shader贪吃蛇
    前言    开局一张plane,其余靠shader编。本游戏为shader绘制贪吃蛇,没有3D模型,想了解3D版本的开发,可以跳转到【c#Unity贪吃蛇教程】    已经是第五期C#不同平台制作贪吃蛇了,前三期分别是【c#控制台贪吃蛇教程】、【c#winform贪吃蛇教程】、【c#WPF贪吃蛇教......
  • Android编译 - 证书介绍
    前言全局说明一、说明1.1环境:Android1.2简介在Android系统中,每个APK文件必须有一个有效的数字证书来证明其来源和完整性。当需要修改APK后再次发布时,原有的签名将不再有效,因此需要重新签名。二、证书工具2.1路径:android/build/tools/releasetools/sign_target_fi......
  • JMeter自动执行生成报告,批处理脚本
    1、新建文件后缀.bat:字符集使用ANSI编码,不然有中文会乱码,执行失败 2、输入内容如下,根据实际情况修改路径:@echooffREM设置JMeter的安装目录,根据实际情况修改路径setJMETER_HOME=C:\apache-jmeter-5.4.1REM设置测试计划的路径,根据实际情况修改路径setTEST_PLAN_......
  • Eval-Expression.NET:动态执行C#脚本,类似Javascript的Eval函数功能
    我们都知道在JavaScript中,我们可以通过Eval来执行JavaScript字符串代码。下面推荐一个.Net版本的Eval的开源项目。01项目简介Eval-Expression.NET是一个非常强大工具,使得开发人员可以动态编译和执行C#代码和表达式。通过C#反射,还能轻松访问公共和私有方法、字段、属性值,并创建......
  • C# 类(Class)及其在 Unity 引擎开发中的应用总结
    1.什么是C#类?在C#中,类(Class)是一种用户定义的数据结构,用于封装一组数据(字段)和操作数据的方法。类是面向对象编程(OOP)的核心,它支持封装、继承和多态等特性。1.1类的基本结构一个类通常由以下部分组成:字段(Fields):存储数据或状态。属性(Properties):封装字段,提供安全的访......
  • C# 多态性及其在 Unity 引擎开发中的应用总结
    1.什么是多态性?多态性(Polymorphism)是面向对象编程(OOP)的核心特性之一,指同一个接口或方法可以根据对象的不同类型表现出不同的行为。多态性通常通过继承和接口实现,主要体现在以下两种形式:方法重写(Override):子类通过重写父类的虚方法实现不同的行为。方法重载(Overload):......
  • 1.搭建命令行编译环境
    1.搭建命令行编译环境1.1下载JDK1.进入官网(Java下载|神谕)。2.根据自己的电脑系统选择对应的版本进行下载。3.下载完成后,双击打开,一直点击Next,直到安装完成,此时的JDK是安装在默认目录(C:\ProgramFiles\Java)下的。1.2JDK的简单介绍作为初学者,目前对于JDK官方的介绍肯定是......
  • 根据相关算法对FIRSTVT或LASTVT进行求解(编译原理与技术)
    实验名称FIRSTVT与LASTVT的求解。实验内容根据相关算法对FIRSTVT或LASTVT进行求解。实验目的根据实验内容编写程序,上机调试、得出正确的运行程序,掌握FIRSTVT和LASTVT的求解方法,了解其求解过程。上机环境设计思想(流程)FIRSTVT找FIRSTVT的三条规则:如果要找A的FIRSTVT,A的......
  • 没有首件检查的后果 --- 跑脚本
    背景是这样的:有两台机器A和B,需要用同样的脚本跑同样的测试数据同事:脚本已在机器的某路径下;脚本是相同的; 在跑A机器脚本时,发现测试数据有几十组数据.手动跑了几组后,发现都是重复性工作,于是编写了一个脚本实现自动一次跑完所有数据跑了下,ok,此时心情是不......