做Unity开发的朋友们基本都知道一个常识,就是Unity脚本的名字要和里面的类名相同。
其实这只是个通用做法,并不是必须的。
在偶然中,我发现一个现象。(不想看的可以直接跳过)我在Unity中添加了一个插件,我要修改一些代码,但是我不想直接在插件的脚本里改,想通过继承或者其他方式写自己的脚本。但是有一个脚本A实在绕不开,我就复制了这个脚本A到我自己的文件夹里面,然后把原来的脚本A里面全部注释掉了。然后我想,既然旧的脚本里面已经空了,那我在调试场景里挂载的脚本就要挂新的脚本了,结果旧的脚本依然挂载场景的对象上,也没有报错,试着运行了一下也没问题。点击定位脚本位置,还是旧的那个空了的脚本,我就凌乱了,空的脚本怎么还能用?我在新的脚本中加了个Awake输出,运行竟然真的执行了!!!我把新的脚本的类注释掉了,结果报错了。
结论:Unity中要往节点上挂载的脚本,必须要有一个名字相同的继承了MonoBehaviour的类,而这个类不是必须要写在这个脚本里。Unity是根据脚本文件名来“寻找”同名的类。
举个例子:
1.创建“A.cs”、“B.cs”、“C.cs”、“D.cs”、“我最帅.cs”等五个脚本;
2.然后把“A.cs”、“B.cs”、“C.cs”、“D.cs”里面的代码全都剪切到“我最帅.cs”脚本里;
3.结果“A.cs”、“B.cs”、“C.cs”、“D.cs”里面都是空的,“我最帅.cs”里面有五个类。这五个脚本都可以正常挂载到游戏对象上,使用起来和那几个类写在自己脚本里面效果一样的。
而之所以有“脚本的名字要和里面的类名相同”这样的常识,还是用起来方便,防止出现“找不到和脚本名同名的类”这样的问题。