当前位置: 首页 > news >正文

【Unity】程序集Assembly模块化开发

笔者按:使用Unity版本为2021.3LTS,与其他版本或有异同。请仅做参考
一、简述。
本文是笔者在学习使用Unity引擎的过程中,产学研的一个笔记。由笔者根据官方文档Unity User Manual 2021.3 (LTS)/脚本/Unity 架构/脚本编译/程序集定义相关部分结合自身经验所做,有不足之处,还请指正。
二、导读。
1.==程序集定义(Assembly Definition)程序集引用(Assembly Definition Reference)==是可创建用于将脚本组织为程序集的资源。
2.Unity代码工程一般默认创建两个程序集:Assembly-CSharp(非Editor目录下脚本归于此程序集) Assembly-CSharp-Editor(任何Editor目录下脚本都自动归于此程序集)
3.使用默认程序集,对于小项目而言可以接受。但项目过大会有以下缺点:

1.脚本有改动时,Unity会重新编译当前程序集下所有脚本,过多脚本会导致编译时间冗长。
2.理论上同一程序集内任何脚本都可相互访问引用,导致项目耦合度高,难以重构和优化改进代码。
3.所有脚本都针对所有平台进行编译。
4.定义程序集,有以下优点:
1.促进模块化和可重用性。
2.提升编译效率。
3.提升代码的平台适配性。

三、程序集定义。
1.程序集定义,可以把你想单独成模块的脚本目录给独立出来,到一个程序集中。
2.为每个程序集创建一个文件夹(图3-2-1),并将需要归入此程序集的脚本移入到文件夹目录中去(图3-2-2),然后再创建程序集定义资源以指定程序集属性(图3-2-3)。
3-2-1
3-2-2
3-2-3
3.新建的Assembly Definition Asset的属性面板如下:
3-3-1
逐项解释:
[Name] ——程序集名称,一般在创建时便被定义,可修改;
General一般属性
[Allow ‘unsafe’ Code]是否允许使用不安全的编码;
[Auto Referenced]程序集之间是否根据编译顺序自动引用相应的程序集;

当不同程序集之间存在引用关系时,程序集之间就会存在依赖关系。A引用B,A依赖B。当Unity编译脚本时,B必须先于A被编译好。如此A才可以访问其依赖项的已编译版本。A的程序集必须声明对程序集B的引用。

[No Engine References]不引用(相关)的程序集引用
[Override References]对预编译程序集的引用,覆盖对预编译程序集的自动引用情况。一般为动态链接库(dll)
[Root Namespace]当前程序集的默认命名空间,在当前程序集中新建脚本时有用

Define Constraints定义约束条件。通过相应的“宏定义”来控制程序集的是否编译的行为。
–Assembly References–(与Override References 一起使用)选择需要引用程序集的程序集定义添加进来
Assembly Definition References程序集定义引用。
[Use GUIDs]勾选此选项,可以允许引用的程序集修改名称而不受影响。提倡勾选
Platforms设置程序集的平台兼容性
Version Defines对不同的程序集进行不同的配置与定义。
3.新建程序集定义的文件。
*.asmdef。内部编码遵循Json格式,故而除了可以在属性面板上修改之外,也可以直接修改Json。
四、程序集定义引用。
1.程序集定义引用,就是把当前目录下的脚本合并到指定程序集定义当中去。
2.创建程序集定义引用(Assembly Definition Reference)资源。
在Project窗口中找到需要包含到引用程序集中的脚本文件夹,点击(Assets->Create->Assembly Definition Reference),定义名称。
4-2-1
3.新建程序集定义引用属性面板。
4-3-1
[Use GUID]使用程序集的Guid而非Name。
[Assembly Definition]指定对应的程序集定义。
4.新建程序集定义引用的文件。
*.asmref。内部编码遵循Json格式,故而除了可以在属性面板上修改之外,也可以直接修改Json。
五、以上就是程序集Assembly相关的部分。如果想了解更多,建议去官网文档直接找程序集篇。有什么想法,也可以和笔者讨论。
游戏开发交流群

相关文章:

【Unity】程序集Assembly模块化开发

笔者按:使用Unity版本为2021.3LTS,与其他版本或有异同。请仅做参考 一、简述。 本文是笔者在学习使用Unity引擎的过程中,产学研的一个笔记。由笔者根据官方文档Unity User Manual 2021.3 (LTS)/脚本/Unity 架构/脚本编译/程序集定义相关部分结…...

马尔可夫决策过程

1. 马尔可夫决策过程 马尔可夫决策过程不过是引入"决策"的马氏过程. Pij(a)P{Xn1j∣X0,a0,X1,a1,...,Xni,an1}P{Xnn1j∣Xni,ana}\begin{split} P_{ij}(a) & P\{X_{n1} j|X_0, a_0, X_1, a_1, ..., X_n i, a_n 1\} \\ &P\{X_n{n1} j|X_n i, a_n a\} \e…...

win11下载配置CIC Flowmeter环境并提取流量特征

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、下载CIC Flowmeter二、安装java、maven、gradle和IDEA1.java 1.82.maven3.gradle4.IDEA三、CICFlowMeter-master使用四、流量特征1.含义2.获取前言 配了一整…...

JDK如何判断自己是什么公司的

0x00 前言 因为一些事情,遇到了这样一个问题,JDK如何判断自己是什么公司编译的。因为不同的公司编译出来,涉及到是否商用收费的问题。 平时自己使用的时候,是不会考虑到JDK的编译公司是哪一个,都是直接拿起来用&#…...

大数据技术之HBase(二)HBase原理简介

一、HBase定义1.1 HBase定义HBase 是一种分布式、可扩展、支持海量数据存储的 NoSQL 数据库非结构化数据存储的数据库,基于列的模式存储。利用Hadoop HDFS作为其文件存储系统,写入性能很强,读取性能较差。利用Hadoop MapReduce来处理HBase中的…...

垒骰子(爆搜/DP)

动态规划方格取数垒骰子方格取数 题目描述 设有 NNN \times NNN 的方格图 (N≤9)(N \le 9)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 000。如下图所示(见样例): A0 0 0 0 0 0 0 00 0 13 0 …...

Telink之标准SDK的介绍_1

前提:常见的项目架构:应用层----》驱动层----》硬件层 1、软件组织架构 顶层⽂件夹( 8 个): algorithm,application,boot,common,drivers,proj_lib,stack,v…...

JNI内两种方式从C/C++中传递一维、二维、三维数组数据至Java层详细梳理

目录 0 前言 1 准备工作介绍 2 一维数组 2.1 return形式 2.2 参数形式 3 二维数组 3.1 return形式 3.2 参数形式 4 三维数组 4.1 return形式 4.2 参数形式 5 测试代码 6 结果说明 0 前言 就如之前我写过的一篇文章【JNI内形参从C代码中获取返回值并返回到Java层使…...

快递计费系统--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)

实例5:快递计费系统 快递行业高速发展,我们邮寄物品变得方便快捷。某快递点提供华东地区、华南地区、华北地区的寄件服务,其中华东地区编号为01、华南地区编号为02、华北地区编号为03,该快递点寄件价目表具体如表1所示。 表1 寄…...

JS - 自定义一周的开始和结束,计算日期所在月的周数、所在月第几周、所在周的日期范围

自定义一周的开始和结束,计算日期所在月的周数、所在月第几周、所在周的日期范围一. 方法使用二. 实现案例一. 方法使用 根据月开始日期星期几、月结束日期星期几,计算始周、末周占月的天数(每周周期段:上周六 —— 本周五&#x…...

Linux :理解编译的四个阶段

目录一、了解编译二、认识编译的四个阶段(一)预处理(二)编译(三)汇编(四)链接1.静态链接2.动态链接三、分步编译(一)创建.c文件(二)预…...

197.Spark(四):Spark 案例实操,MVC方式代码编程

一、Spark 案例实操 1.数据准备 电商网站的用户行为数据,主要包含用户的 4 种行为:搜索,点击,下单,支付 样例类: 2. Top10 热门品类 先按照点击数排名,靠前的就排名高;如果点击数相同,再比较下单数;下单数再相同,就比较支付数。 我们有多种写法,越往后性能越…...

Vue 项目如何迁移小程序

最近我们看到有开发者在社群里提出新的疑惑「我手头已经有一个成熟的 HTML5 项目了,这种项目可以转为小程序在 FinClip 环境中运行吗?」。 经过工作人员的沟通了解,开发者其实是想将已有的 Vue 项目转为小程序,在集成了 FinClip …...

unit1-问候以及介绍

unit1-问候以及介绍 重点表达 1、问好 使用hello 和 hi 来打招呼。hello可以使用在正式和非正式的场合。hi是非正式的。但是hello 和 hi 都可以在一天的任何时段使用。 Hello. 你好。 Hi! 嗨! 介绍你的姓名 使用 I’m 和 My name is 告诉别人你的名字。 I’m Pau…...

杂记——19.git上传时出现the remote end hung up unexpectedly错误

git是大家常用的项目版本控制工具,熟练地使用git可以提高开发效率,但是有时在使用git推送代码时,会提示“the remote end hung up unexpectedly”的问题,那么git推送代码提示“the remote end hung up unexpectedly”怎么解决呢&a…...

python123平台题目

作业二 1. 2的n次方描述输入格式输出格式输入输出实例代码解析2. 输出最大值描述输入格式输出格式输入输出示例代码解析3. 字符串输出描述输入格式输出格式输入输出示例代码解析4. 字符串长度描述输入格式输出格式输入输出示例代码解析...

ROS学习笔记(六):TF坐标变换

ROS学习笔记(六):TF坐标变换TF的基本知识TF工具tf_monitortf_echostatic_transform_publisherview_frames创建TF广播器创建TF监听器TF的基本知识 TF是一个让用户随时间跟踪多个坐标系的功能包,它使用树形数据结构,根据…...

【python】为你绘制玫瑰一束,爱意永存

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 若是有真情,爱意如溪水, 若是有真爱,爱意如阳光, 若是两情相悦,又岂在朝朝暮暮, 女子淡淡的情愫,深深地想念, 浓浓的爱意&a…...

智能家居创意产品一Homkit智能通断器

智能通断器,也叫开关模块,可以非常方便地接入家中原有开关、插座、灯具、电器的线路中,通过手机App或者语音即可控制电路通断,轻松实现原有家居设备的智能化改造。 随着智能家居概念的普及,越来越多的人想将自己的家改…...

【数据库】MySQL表的增删改查(基础命令详解)

写在前面 : 语法中大写字母是关键字,用[]括这的是可以省略的内容。文中截图是相对应命令执行完得到的结果截图。1.CRUD 注释:在SQL中可以使用“--空格描述”来表示注释说明.CRUD:即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首…...

Loop Habit Tracker习惯追踪应用技术深度解析与架构实践指南

Loop Habit Tracker习惯追踪应用技术深度解析与架构实践指南 【免费下载链接】uhabits Loop Habit Tracker, a mobile app for creating and maintaining long-term positive habits 项目地址: https://gitcode.com/gh_mirrors/uh/uhabits Loop Habit Tracker是一款基于…...

在多模型AI客服场景下利用Taotoken实现成本与效果的平衡

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在多模型AI客服场景下利用Taotoken实现成本与效果的平衡 应用场景类,设想一个在线客服系统需要集成对话AI的场景&#…...

ML:SARSA 的基本原理与实现

在强化学习中,智能体(Agent)并不是一次性从已有标签中学习答案,而是在环境(Environment)中不断尝试动作、观察结果、获得奖励,并根据经验逐步调整行为策略。在 Q 学习中,智能体可以通…...

单片机软件架构师使用Taotoken多模型对比分析内存分配策略

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 单片机软件架构师使用Taotoken多模型对比分析内存分配策略 在嵌入式软件开发中,内存分配策略的选择直接影响着系统的实…...

Jellyfin.Plugin.MetaShark配置详解:10个关键设置优化你的元数据刮削体验

Jellyfin.Plugin.MetaShark配置详解:10个关键设置优化你的元数据刮削体验 【免费下载链接】jellyfin-plugin-metashark jellyfin电影元数据插件 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-plugin-metashark 想要让你的Jellyfin媒体库拥有丰富的…...

从V100到A100:手把手教你理解Ampere架构的7个关键性能优化点

从V100到A100:手把手教你理解Ampere架构的7个关键性能优化点 如果你正在使用NVIDIA V100进行深度学习训练或高性能计算,那么升级到A100可能已经在你的考虑范围内。但这次升级究竟能带来多少实际性能提升?本文将带你深入Ampere架构的7个核心优…...

别再死记硬背了!我用这5个C语言内存模型的实际案例,搞懂了嵌入式面试的底层逻辑

从崩溃现场到面试答案:5个嵌入式开发中的内存实战案例 凌晨三点的调试灯依然亮着,屏幕上的十六进制数字像某种神秘代码——这是许多嵌入式开发者都熟悉的场景。当系统突然崩溃,内存错误往往是最难追踪的幽灵问题。但有趣的是,这些…...

EurekaClaw:多智能体AI研究助手,自动化实现从灵感到论文的完整流程

1. 项目概述:从灵感到论文的自动化研究助手在科研工作中,最令人兴奋又最耗费精力的,莫过于从零散的文献、模糊的直觉中,一步步构建出严谨的、可发表的成果。这个过程通常需要经历文献调研、假设生成、理论证明、实验验证和论文撰写…...

智能体可观测性实践:元观察技能的设计、集成与效能优化

1. 项目概述:一个面向智能体的“元观察者”技能最近在折腾智能体(Agent)开发的朋友,可能都遇到过类似的问题:你精心设计了一个智能体,给它配备了各种工具和技能,希望它能自主、流畅地完成一系列…...

ARM GIC中断控制器虚拟化架构与优化实践

1. ARM GIC中断控制器虚拟化架构概述中断控制器是现代计算机系统中至关重要的组件,特别是在虚拟化环境中,高效的中断处理机制直接影响着虚拟机的性能和响应能力。ARM架构的通用中断控制器(GIC)从v3版本开始引入了完整的虚拟化支持,为虚拟机监…...