挂载脚本时文件名和类名的关联方式
写过Unity脚本的人应该都知道,挂载脚本的文件名和类名必须相同
今天写新功能的时候偶然发现了这个规则的底层逻辑
并且发现这个规则并非必须的,实际上Unity是根据脚本文件名来“寻找”同名的类
这二者最根本的差距就在于,你可以把你需要的类写到别的文件里并正常使用
听着可能有点云里雾里的,但没关系我们来做一个简单的演示
演示
创建两个脚本
我们先创建两个脚本A.cs和B.cs,之后Unity就会给我们生成默认的同名类代码
交换类名 (重点)
重点来了!我们这里交换一下这两个类的名称
也就是把A.cs内容改成class B、B.cs内容改成class A
并且在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日