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

Unity程序集

对于Unity的程序集,具体内容可以参考Unity官方文档,程序集定义

- 预定义程序集

比如Unity的默认程序集,Assembly-CSharp.dll,还有其他的比如 Assembly-CSharp-Editor.dll,Assembly-CSharp-firstpass.dll
在这里插入图片描述
在这里插入图片描述
没有指定或不在特殊文件夹内的脚本都属于这个程序集

- 特殊文件夹

1. Editor

在Editor文件夹下的脚本,默认会属于Assembly-CSharp-Editor.dll程序集,除非自定义程序集
在这里插入图片描述

2. Plugins

在Plugins文件夹下的脚本默认属于Assembly-CSharp-firstpass.dll程序集,除非自定义程序集
在这里插入图片描述

- 程序集定义引用,Assembly Definition Reference

即Assembly Definition Reference
在这里插入图片描述
官方解释为
在这里插入图片描述
什么意思呢?试验一下
在这里插入图片描述
此时脚本默认属于Assembly-CSharp-Editor.dll

接下来创建一个Assembly Definition Reference,并且指定程序集引用为UniTask
在这里插入图片描述
在这里插入图片描述
发现此时脚本的所属程序集变成了UniTask.dll,所以这里的意思就是Assembly Definition Reference会修改原来脚本所属的程序集

而当脚本已经属于一个自定义程序集时,就不能再指定一个Assembly Definition Reference了
在这里插入图片描述
此时脚本属于EditorTest.dll程序集
在这里插入图片描述
报错的意思是“包含多个程序集定义文件”

- 引用其他程序集,程序集中的Assembly Definition References

在这里插入图片描述
在这里引用这些程序集后,程序集所属的脚本就可以使用这些程序集里的Public类或者方法了,但是不能使用internal的类或者方法,并且要注意,程序集之间不能通过这个形成循环引用,勾选GUIDs的意思是对于程序集定义引用,使用GUID而非程序集名称。这样一来,被引用的程序集可以重命名,而无需更新引用。 ,即这些被引用的程序集可以重命名,但因为使用的是他们的GUID,所以重命名不影响引用

- Override References

在这里插入图片描述
这里的意思是,当不勾选Override References时,当前自定义程序集会引用所有的预编译程序集,勾选后,只会引用指定的预编译程序集,和Assembly Definition References 的区别在于这里指定的是对预编译程序集的引用
在这里插入图片描述
在这里插入图片描述

此时Main程序集没有勾选Override References,Unity.VisualScripting可以正确引用

当勾选,没有指定时
在这里插入图片描述
在这里插入图片描述
引用报错

当勾选后,在列表中引用相关程序集
在这里插入图片描述
报错消失了

- Auto Referenced

指定预定义的程序集是否应引用此项目程序集,即类似Assembly-CSharp.dll这样的预编译程序集是否会引用当前这个自定义程序集,默认勾选的话,预编译程序集是会自动引用当前自定义程序集的
在这里插入图片描述
在使用HybridCLR时,有一个注意项是不要将热更程序集的Auto Referenced选项否选,否则会出现打包失败的情况

- Define Constraints 有条件地包含一个程序集

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
即需要同时满足所有的符号表示的条件,这个程序集才会被编译,然后这里的符号可以是Project Setting中的Scripting Define Symbols定义的符号
在这里插入图片描述
可以是Unity定义的符号,比如UNITY_EDITOR之类的
在这里插入图片描述
还有 Version Defines 定义的符号
在这里插入图片描述

- Version Defines 版本定义

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
比如,我想要区分这个程序集中的代码在不同yooasset版本的时候的处理,那么可以这样
在这里插入图片描述

然后就可以在代码中引用这个符号,表示当yooasset的版本 >= 1.5.0时的处理
在这里插入图片描述
当前工程中的yooasset版本是2.3.x的版本,运行
在这里插入图片描述
走到了YOOASSET_NEW中

现在去掉这个定义
在这里插入图片描述
在这里插入图片描述
走到了#else中

那么,它和Project Setting中的Scripting Define Symbols有什么区别呢?
在这里插入图片描述
简单来说,就是Scripting Define Symbols定义的符号会影响到项目中所有的程序集,但是Version Defines 中定义的符号只会影响到当前定义的这个程序集

还有注意,如果Expression这里的版本范围表达式不填的话,经过实测,这个符号会一直生效

比如
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

- 设置程序集Internal成员的暴露

在这里插入图片描述
在这里插入图片描述
即当前程序集的Internal成员会暴露给这里面自定义名称的程序集,比如UniTask.Linq,UniTask.Addressables程序集现在可以使用这个脚本所在程序集的Internal成员

比如
在这里插入图片描述
新建一个Test程序集合Test脚本
在这里插入图片描述
此时InternalsVisibleTo脚本属于Main程序集
在这里插入图片描述
BuildTest属于Main程序集
在这里插入图片描述
这里的意思就是Main程序集的Internal成员会暴露给Test程序集
在这里插入图片描述
在这里插入图片描述
可以看到此时Test脚本能够顺利调用到BuildTest脚本的Internal的成员PrintTest

相关文章:

  • 当前用户的Git本地配置情况:git config --local --list
  • 通讯方式学习——单总线协议(2024.04.09)
  • 小红书 发评论 分析 x-s x-t
  • RL 基础 (待补充)
  • 卫生间改造翻新怎么选产品?我在瑞尔特找到了解决方案
  • 【数据集】30 m空间/1 h时间分辨率地表温度LST数据集
  • Manus AI:多语言手写识别技术的革新与应用
  • Go语言事件总线EventBus本地事件总线系统的完整实现框架
  • Linux防止误关机
  • DO指数GPU版本
  • 一周学会Pandas2之Python数据处理与分析-数据重塑与透视-pivot() - 透视 (长 -> 宽,有限制)
  • cpp this指针
  • Python训练第四十天
  • 「Java教案」数据类型、变量与常量
  • Linux系统-基本指令(4)
  • Linux搭建DNS服务器
  • 基于FashionMnist数据集的自监督学习(生成式自监督学习AE算法)
  • C++基础算法————贪心
  • 那些常用的运维工具
  • b. 组合数
  • 微信企业号可以做微网站吗/搜索引擎优化目标
  • 35互联做的网站如何/互联网域名交易中心
  • 动漫做h在线观看网站/最有效的免费推广方法
  • 如何购买网站域名/邯郸网站优化
  • 东莞建设网站/合肥网络关键词排名
  • 网站建设企业策划书/品牌营销策略包括哪些内容