[Unity] 为什么文件名和类名需要相同

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

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

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

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

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

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


演示

创建两个脚本

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

img


交换类名 (重点)

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

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

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

img


挂载脚本并运行

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

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

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

img

img

最后运行输出的是"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日

posted @ 2022-11-21 15:43  千松  阅读(403)  评论(0编辑  收藏  举报