一、创建规则
1.不在VS中创建脚本了
2.可以放在Assets文件夹下的任何位置(建议同一文件夹管理)
3.类名和文件名必须一致,不然不能挂载(因为反射机制创建对象,会通过文件名去找Type)
4.建议不要使用中文名命名
5.没有特殊需求不用管命名空间
6.创建的脚本默认继承MonoBehavior
二、MonoBehavior基类
1.创建的脚本默认都继承MonoBehavior,继承了它才能挂在在GameObject上
2.继承了MonoBehavior的脚本不能new,只能挂!
3.继承了MonoBehavior的脚本不要去屑构造函数,因为我们不会去new它,写构造函数没有任何意义
4.继承了MonoBehavior的脚本可以在一个对象上挂多个(如果没有加DisallowMultipleComponent特性)
5.继承MonoBehavior的类也可以再次被继承,遵循面向对象继承多态的规则
三、不继承MonoBehavior的类
1.不继承MonoBehavior的类,不能挂载在GameObject上
2.不继承MonoBehavior的类,想怎么写就怎么写,如果要使用就自己new
3.不继承MonoBehavior的类,一般是单例模式的类(用于管理模块)或者数据结构类(用于存储数据)
4.不继承MonoBehavior的类,不用保留默认出现的几个函数
四、默认脚本内容
Editor/Data/Resources/ScriptTemplates
补充:
我们要知道,虽然建议大家不在继承MonoBehavior的类中写构造函数。
但是不意味着我们不能写,当我们在继承MonoBehavior的类中写无参构造函数时,你会发现在编辑模式下或者运行后,只要该脚本挂载在场景中,那么该无参构造函数是会被自动执行的。
因为Unity的工作原理中提到的反射机制,Unity实际上通过反射帮助我们实例化了该脚本对象,既然要实例化那么肯定是需要new的,只不过Unity中不需要我们自己new继承了MonoBehavior的类,只要挂载后Unity帮助我们做了这件事。那么为什么不建议大家写构造函数呢?
1.Unity的规则就是,继承MonoBehavior的脚本不能new只能挂载
2.生命周期函数的Awake是类似构造函数的存在,当对象出生就会自动调用
3.写构造函数反而在结构上会破坏Unity设计上的规范
总结:
如果继承MonoBehavior的脚本想要进行初始化相关,可以在Awake或者Start中进行,搞清这两个生命周期函数的执行时机,根据需求选择在哪里进行初始化。
切记!!继承MonoBehavior的脚本不要new,不要new,不要new!!