挂载脚本时文件名和类名的关联方式

写过Unity脚本的人应该都知道,挂载脚本的文件名和类名必须相同

今天写新功能的时候偶然发现了这个规则的底层逻辑

并且发现这个规则并非必须的,实际上Unity是根据脚本文件名来“寻找”同名的类

这二者最根本的差距就在于,你可以把你需要的类写到别的文件里并正常使用

听着可能有点云里雾里的,但没关系我们来做一个简单的演示


演示

创建两个脚本

我们先创建两个脚本A.cs和B.cs,之后Unity就会给我们生成默认的同名类代码


交换类名 (重点)

重点来了!我们这里交换一下这两个类的名称

也就是把A.cs内容改成class B、B.cs内容改成class A

并且在Start()中输出语句进行区分


挂载脚本并运行

最后再把修改后的脚本挂到物体上

看看Start()方法中输出的语句是否符合预期

(我这里是把A.cs挂载到物体上)

最后运行输出的是"B.cs -- Class A"

物体实际挂载的是B.cs文件中同名的class A,而不是A.cs中的class B

这时如果我们把B.cs中class A的内容注释掉就会得到"Behaviour is missing"报错

而注释掉A.cs中的内容却不会有任何影响

也就是说物体直接忽略了A.cs中的内容,反而是到其他文件中寻找与A.cs同名的类进行挂载


结论

由此可见,我们将脚本挂载到物体上时添加的并非文件的内容,而是添加与文件名同名的索引,之后Unity再根据这个索引在各文件中寻找同名的类进行挂载

所以只要B.cs有class A的内容,你挂个空的A.cs文件都是可以正常得到class A的,文件中的类并不一定需要与文件名相同

而"文件名和类名必须相同"这一规则除了便于项目管理外,最大的用处就是保证与文件同名的类一定存在


本文发布于2022年11月21日

最后修改于2022年11月21日

[Unity] 为什么文件名和类名需要相同的更多相关文章

  1. java区分大小写,使用TAB进行缩进,public类名只能有一个,而且文件名与类名保持一致.

    java的类必须大写 java区分大小写,使用TAB进行缩进,public类名只能有一个,而且文件名与类名保持一致. 在dos用上下箭头,调用已用过的命令

  2. 02 java 基础:java 文件名与类名关系 CLASSPATH

    java 类修饰符:通常情况下使用 public 修饰,此时,java 强制要求 .java 文件名需与该 public 修饰类名一致,否则无法编译通过.如若没有加修饰符,文件名与类名可无任何关联. ...

  3. Pytest 通过文件名类名方法执行部分用例

    • 场景:只执行符合要求的某一部分用例,通过类与方法的命名实 现.通常编写测试方法时 • 解决:直接输入文件名,类名 pytest test_class_01.py • pytest -v -s te ...

  4. Unity基础知识学习笔记一

      1,Unity 4.5.4这个版本,在打包ios应用程序的时候.会生成一个xcode工程,但是这个工程无法在xcode6上变异,无法生成ios8上发布.所以unity在ios8发布3天内就发了4. ...

  5. Unity GUI 用C#和Javascript写法的区别

    以前都是用C#来写Unity的GUI.后来因为团队需要GUI必须用C#写. 其实一开始学Unity的GUI的时候我是想用C#来写,后来折腾了好久也没弄出来.反倒是这次不经意间就搞好了. C#和Java ...

  6. C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一)

    引言 现在做游戏开发的没有几个不用Excel的,用的最多的就是策划.尤其是数值策划,Excel为用户提供强大的工具,各种快捷键,各种插件,各种函数.但是作为程序来说其实关注的不是Excel而是它最终形 ...

  7. unity插件开发——一个例子:简单的svn集成

    在unity开发过程中,通常我们习惯性地在Windows操作系统下使用svn进行版本管理,而每次提交更新,都需要回到文件夹下的这种操作让人无法忍受.是不是可以集成svn到unity中呢?查了一圈uni ...

  8. unity提示can't add script解决办法

    1.脚本有误没有继承unity类. 2.类名文件名不一致. 3.内部逻辑代码有误.

  9. Unity3D学习笔记(一):Unity简介、游戏物体、组件和生命周期函数

    Project(工程.项目):工程是把游戏开发当前所需要的资源归类管理用的. Console控制台:日志.报错.调试,右上角,消息过滤 Assets:资源,存储游戏中一切用到的资源 Library:临 ...

  10. Unity 添加自定义菜单(插件),添加功能

    网上介绍如何写这种插件的文章很多...但是对于新手来说,最基本的,怎么运行这个插件,都不知道...网上的文章都懒得说这个...   幸好,看了半天官方网站别的资料,突然就发现办法了...   这个不是 ...

随机推荐

  1. 迁移到 Gradle 7.x 使用 Version Catalogs 管理依赖

    一.根目录下 build.gradle 变更 变更前: buildscript { ext.kotlin_version = '1.5.0' repository { repository { mav ...

  2. Android Studio 导入自己编译的 framework jar

    网上的文章大多是 Android Studio 2.x 环境,实行起来,坑比较多. 本文适用于 Android Studio 3.x 及以上,亲测可行. 一.编译生成 framework.jar 包 ...

  3. React实现导航栏点击高亮

    在jquery中实现导航栏的切换只需要一行代码找到同级其他元素removeClass以及添加点击元素addClass就可以实现了,但是React没法直接找到同级元素,这个时候需要一点js中的思维,根据 ...

  4. maven创建父子工程

    目录 创建父工程 创建子工程 将项目编译为eclipse项目 将项目导入eclipse 修改依赖关系:service依赖dao,web依赖service JavaProject的pom.xml文件说明 ...

  5. KVM整理

    管理命令: virsh list --all 查看所有虚拟机状态 virsh start vm1 VM1开机 virsh shutdown vm1 VM1关机 virsh destroy vm1 强制 ...

  6. mysql找出不包含某些关键字的结果

    比如公司业务是和房产相关的,但是库里存在和房产不相关的内容时就需要筛选并删除. 如何筛选才能不误伤呢? 这是我的一个初步的SQL: 意思是如果name.desc字段都不包含房.盘.楼.地产关键字才找出 ...

  7. C++ //string字符串拼接

    1 //string字符串拼接 2 #include <iostream> 3 #include<string> 4 5 using namespace std; 6 7 8 ...

  8. 文心一言 VS 讯飞星火 VS chatgpt (210)-- 算法导论16.1 1题

    一.根据递归式(16.2)为活动选择问题设计一个动态规划算法.算法应该按前文定义计算最大兼容活动集的大小 c[i,j]并生成最大集本身.假定输入的活动已按公式(16.1)排好序.比较你的算法和GREE ...

  9. Zabbix Agent item监控项讲解

    前言 agent与snmp是Zabbix两种重要的监控方式,这一期主要介绍Zabbix Agent item监控项..Zabbix agent分为主动代理.被动代理,配置item类型时,可以选择需要的 ...

  10. Rtsp转Flv在浏览器中播放

    目录 概述 环境 项目目录清单 项目搭建步骤 引入相关npm依赖 实例化一个express应用 创建WebsocketServer并解析rtsp 使用flv播放 浏览器中测试 代码 引用 概述 众所周 ...