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

写过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. android 逆向笔记

    壳检测工具 GDA 2. 逆向分析APP 一般流程 1. 使用自动化检测工具检测APP是否加壳,或者借助一些反编译工具依靠经验判断是否加壳 2. 如果apk加壳,则需要先对apk进行脱壳 3. 使用` ...

  2. Unity学习笔记--数据持久化XML文件(1)

    XML相关 Xml是可拓展标记语言,一种文件格式.我们使用xml来完成对数据持久化的存储.等待我们有一程序运行结束之后,将内存中的数据进行保存,(保存在硬盘/服务器)实现对数据的持久化存储. xml文 ...

  3. 案例分享:Qt激光加工焊接设备信息化软件研发(西门子PLC,mysql数据库,用户权限控制,界面设计,参数定制,播放器,二维图,rgv小车,期限控制,参数调试等)

    需求   1.键鼠控制,承担ui界面设计,布局兼容分辨率1024x768 ~ 1920x1080.  2.权限控制:三种权限,分为管理员(可以定制模块界面,修改产品名称等定制化软件和其他权限,同时具备 ...

  4. Qt开发技术:QtCharts(一)QtCharts基本介绍以及图表框架详解

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  5. Apple设备屏幕尺寸和方向

    表格中包括了各种型号的iPad.iPhone.以及iPod touch等设备的详细信息,涵盖了从iPad Pro到各代iPhone和iPod touch的多个型号. 这些信息可用于开发应用程序时优化界 ...

  6. 修改centos7虚拟机的用户密码

    在忘记原密码无法登录桌面的情况下,修改centos7的用户密码 非常规启动,进入编辑启动菜单 在启动GRUB菜单中选择编辑选项,按键e进入编辑; 找到linux16开头的一行,在该行中寻找ro的所在地 ...

  7. C#多线程(11):线程等待

    目录 前言 volatile 关键字 三种常用等待 再说自旋和阻塞 SpinWait 结构 属性和方法 自旋示例 新的实现 SpinLock 结构 属性和方法 示例 等待性能对比 前面我们学习了很多用 ...

  8. Python 在Word中创建表格并填入数据、图片

    在Word中,表格是一个强大的工具,它可以帮助你更好地组织.呈现和分析信息.本文将介绍如何使用Python在Word中创建表格并填入数据.图片,以及设置表格样式等. Python Word库: 要使用 ...

  9. 阿里二面:如何定位&避免死锁?连着两个面试问到了!

    在面试过程中,死锁是必问的知识点,当然死锁也是我们日常开发中也会遇到的一个问题,同时一些业务场景例如库存扣减,银行转账等都需要去考虑如何避免死锁,一旦线上发生了死锁,那可能年终不保.....下面我们就 ...

  10. Navicat下载、安装、破解永久许可证密钥激活教程

    https://www.cnblogs.com/marchxd/p/15580739.html 如果破解机生成的激活码无效,试着在破解机的Products里选择Mysql选项,再重新生成激活码