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.pswp.cn/news/907841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【架构艺术】平衡技术架构设计和预期的产品形态

近期笔者因为工作原因,开始启动team内部部分技术项目的重构。在事情启动的过程中,内部对于这件事情的定性和投入有一些争论,但最终还是敲定了下来。其中部分争论点主要在于产品形态,因为事情涉及到跨部门合作,所以产品…

React和原生事件的区别

一、核心差异对比表 维度原生事件React 事件绑定语法HTML 属性(onclick)或 DOM API(addEventListener)JSX 中使用驼峰式属性(onClick)绑定位置直接绑定到具体 DOM 元素统一委托到根节点(React …

大模型-modelscope下载和使用chatglm3-6b模型

前言 由于官方chatglm3-6b大模型文件下载比较慢,找到国内modelscope代替方案 1.SDK下载 pip install modelscope2.下载大模型文件 ✅方法1:通过pip下载 1.安装 setuptools 在当前使用的 Python 环境中安装 setuptools pip install setuptools2.通过如下命令安…

【unity游戏开发——编辑器扩展】AssetDatabase公共类在编辑器环境中管理和操作项目中的资源

注意:考虑到编辑器扩展的内容比较多,我将编辑器扩展的内容分开,并全部整合放在【unity游戏开发——编辑器扩展】专栏里,感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言一、AssetDatabase常用API1、创建资源1.1 API1.2 示例 …

css实现文字渐变

在前端开发中&#xff0c;给文字设置渐变色是完全可以实现的&#xff0c;常用的方式是结合 CSS 的 background、-webkit-background-clip 和 -webkit-text-fill-color 属性。下面是一个常见的实现方法&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> …

WSL 开发环境搭建指南:Java 11 + 中间件全家桶安装实战

在WSL&#xff08;Windows Subsystem for Linux&#xff09;环境下一站式安装开发常用工具&#xff0c;能极大提升工作效率。接下来我将分步为你介绍如何在WSL中安装Java 11、Maven、Redis、MySQL、Nacos、RabbitMQ、RocketMQ、Elasticsearch&#xff08;ES&#xff09;和Node.…

vue3: baidusubway using typescript

项目结构&#xff1a; <!--npm install -D tailwindcss-3d BaiduSubwayMap.vue npm install -D tailwindcss postcss autoprefixer--> <template><div class"relative w-full h-screen"><!-- 地图容器 --><div id"subway-container…

【iptables防火墙】-- URL过滤 (Hexstring、IP、DoT和DoH)

在路由器中使用iptables工具对URL地址进行过滤涉及到如下几个方面&#xff0c;hexstring、ip、DoT和DoH。 以过滤www.baidu.com为例 1、DNS阻断 m string --hex-string是iptables中一个以​十六进制格式​定义要匹配的二进制特征并且支持混合明文和二进制数据的模块。由于DN…

mysql-本地编译 MySQL 源码

完全理解你的感受&#xff01;MySQL 源码本地调试确实是一个“坑多”的过程&#xff0c;尤其是当你第一次尝试从源码构建和调试 MySQL 时。但别担心&#xff0c;我来一步步帮你梳理整个流程&#xff0c;并提供一个详细、可操作的指南&#xff0c;让你可以顺利跑起来 MySQL 源码…

深入理解 shared_ptr 与 enable_shared_from_this

在 C++ 的智能指针体系中,std::shared_ptr 是一个非常重要的工具,它通过引用计数机制帮助我们管理动态分配的对象生命周期,避免内存泄漏。然而,在某些情况下,我们可能需要从一个对象内部获取指向自身的 shared_ptr,这时候就需要使用 std::enable_shared_from_this 这个辅…

通义开源视觉感知多模态 RAG 推理框架 VRAG-RL:开启多模态推理新时代

通义实验室的自然语言智能团队&#xff0c;凭借深厚的技术积累与创新精神&#xff0c;成功研发并开源了视觉感知多模态 RAG 推理框架 VRAG-RL&#xff0c;为 AI 在复杂视觉信息处理领域带来了重大突破。 传统 RAG 方法的局限 传统的检索增强型生成&#xff08;RAG&#xff0…

【iOS】方法交换

方法交换 method-swizzling是什么相关API方法交换的风险method-swizzling使用过程中的一次性问题在当前类中进行方法交换类方法的方法交换 方法交换的应用 method-swizzling是什么 method-swizzling的含义是方法交换&#xff0c;他的主要作用是在运行的时候将一个方法的实现替…

Python - 爬虫;Scrapy框架之插件Extensions(四)

阅读本文前先参考 https://blog.csdn.net/MinggeQingchun/article/details/145904572 在 Scrapy 中&#xff0c;扩展&#xff08;Extensions&#xff09;是一种插件&#xff0c;允许你添加额外的功能到你的爬虫项目中。这些扩展可以在项目的不同阶段执行&#xff0c;比如启动…

95套HTML高端大数据可视化大屏源码分享

概述​​ 在大数据时代&#xff0c;数据可视化已成为各行各业的重要需求。这里精心整理了95套高端HTML大数据可视化大屏源码&#xff0c;这些资源采用现代化设计风格&#xff0c;可帮助开发者快速构建专业的数据展示界面。 ​​主要内容​​ ​​1. 设计风格与特点​​ 采用…

redis未授权(CVE-2022-0543)

概述 Redis 默认绑定在 0.0.0.0:6379&#xff0c;在未配置防火墙或访问控制的情况下会将服务暴露在公网上。若未设置访问密码&#xff08;默认通常为空&#xff09;&#xff0c;攻击者可直接未授权访问 Redis。利用 Redis 提供的 CONFIG 命令&#xff0c;攻击者可修改配置并将…

(面试)OkHttp实现原理

OkHttp 是一个高效的 HTTP 客户端&#xff0c;被广泛应用于 Android 和 Java 应用中。它提供了许多强大的特性&#xff0c;例如连接池、透明的 GZIP 压缩、HTTP/2 支持等。理解 OkHttp 的实现原理有助于更好地使用和调试它。 以下是 OkHttp 的一些核心实现原理&#xff1a; 1…

Netty 实战篇:构建简易注册中心,实现服务发现与调用路由

本文将为前面构建的轻量级 RPC 框架添加“服务注册与发现”功能&#xff0c;支持多服务节点动态上线、自动感知与调用路由&#xff0c;为构建真正可扩展的分布式系统打好基础。 一、背景&#xff1a;为什么需要注册中心&#xff1f; 如果每个客户端都硬编码连接某个 IP/端口的…

c++之分支

深入理解 C 分支结构&#xff1a;从基础到实战 在 C 编程的世界里&#xff0c;分支结构是控制程序流程的重要手段&#xff0c;它赋予程序 “思考” 和 “选择” 的能力&#xff0c;让程序能够根据不同的条件执行不同的代码块。本文将带大家深入探索 C 分支结构&#xff0c;结合…

LLMs之MCP:如何使用 Gradio 构建 MCP 服务器

LLMs之MCP&#xff1a;如何使用 Gradio 构建 MCP 服务器 导读&#xff1a;本文详细介绍了如何使用Gradio构建MCP服务器&#xff0c;包括前提条件、构建方法、关键特性和相关资源。通过一个简单的字母计数示例&#xff0c;演示了如何将Gradio应用转换为LLM可以使用的工具。Gradi…

ubuntu20.04.5-arm64版安装robotjs

ubuntu20.04.5arm上使用robotjs #ssh&#xff0c;可选 sudo apt update sudo apt install openssh-server sudo systemctl status ssh sudo systemctl enable ssh sudo systemctl enable --now ssh #防火墙相关&#xff0c;可选 sudo ufw allow ssh sudo ufw allow 2222/tc…