避免使用构造函数 不要在构造函数中初始化任何变量,使用Awake或Start实现这个目的。即使是在编辑模式中Unity也自动调用构造函数,这通常发生在一个脚本被编译之后,因为需要调用构造函数来取向一个脚本的默认值。构造函数不仅会在无法预料的时刻被调用,它也会为预设或未激活的游戏物体调用。”
MonoBehaviour有两个生命周期,一个是作为C#对象的周期,一个是作为Component的周期。
构造函数代表第一个,Awake代表第二个。
Editor环境下Editor的代码和脚本代码在同一个AppDomain里,对象的生命周期会表现的跟Player环境下不一样。比如Editor中构造函数被调用的次数和时机跟build出来的游戏不一样,这样就不容易保证正确性。
另外一个关键原因是构造函数是在Unity内部的Loading线程上执行的,一是不能使用Unity API,二是需要考虑同步问题,就更难保证正确了。
所以没什么事还是别用构造函数,readonly字段之类只能在构造阶段初始化的成员,尽量不要用,设计上需要用也要保证初始化代码尽可能简单。
作者:权然
链接:https://www.zhihu.com/question/24701230/answer/50546298
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。