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

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

http://www.xdnf.cn/news/10199.html

相关文章:

  • sglang0.4.3参数说明
  • 建筑兔零基础人工智能自学记录101|Transformer(1)-14
  • 使用PowerBI个人网关定时刷新数据
  • MySQL强化关键_018_MySQL 优化手段及性能分析工具
  • 11.springCloud AlibabaNacos服务注册和配置中心
  • 【算法训练营Day04】链表part2
  • mkcert实现本地https
  • Kafka 如何保证顺序消费
  • GitHub 趋势日报 (2025年05月30日)
  • DeepSeek 赋能自动驾驶仿真测试:解锁高效精准新范式
  • 前端面经 DNSxieyi1
  • Go语言的context
  • 第4节 Node.js NPM 使用介绍
  • linux 1.0.6
  • BFD 基本工作原理与实践:如何与 VRRP 联动实现高效链路故障检测?
  • 数据库运维管理系统在AI方向的实践
  • 【拓扑排序】P7150 [USACO20DEC] Stuck in a Rut S|普及+
  • AnyTXT Searcher 文档内容搜索工具 v1.3.2034 官方版
  • LeetCode - 面试题 02.04. 分割链表
  • gcc相关内容
  • 单例模式的类和静态方法的类的区别和使用场景
  • python打卡day41
  • bert扩充或者缩小词表
  • 企业AI部署热潮下的安全隐忧:速度与安全的博弈
  • QT入门学习
  • 电脑驱动程序更新工具, 3DP Chip 中文绿色版,一键更新驱动!
  • 【基础算法】高精度(加、减、乘、除)
  • 【iOS】方法交换
  • 【SpringBoot实战】优雅关闭服务
  • 【NLP 78、手搓Transformer模型结构及实战】