[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日

相关文章

实现Unity AssetBundle资源加载管理器 AssetBundle是实现资源...
Unity3D 使用LineRenderer绘制尾迹与虚线 1.添加LineRendere...
Unity 添加新建Lua脚本选项 最近学习Unity的XLua热更新框架的...
挂载脚本时文件名和类名的关联方式 写过Unity脚本的人应该都...
Unity单例基类的实现方式 游戏开发的过程中我们经常会将各种...
这篇文章主要介绍了Unity游戏开发中外观模式是什么意思,具有...