脚本 1 生命周期及执行顺序

生命周期

作为一个 Unity 开发者,脚本是贯穿我们的开发过程,所以脚本生命周期,一定要理解,记牢,如下图:

脚本 1 生命周期及执行顺序

执行顺序

游戏项目需要用到很多脚本,有时我们希望挂在 GameObject 上的脚本,按照我们希望的顺序初始化和执行,这是可以的:

在 ProjectSettings/Script Execution Order 菜单栏中,可以配置执行顺序。

脚本优化

上面的脚本生命周期中的每个事件,除了灰色的,我们都可以实现,以执行我们的逻辑。Unity 引擎层加载脚本后,如果发现有对事件的实现,则会从引擎层调用脚本,在这个过程中,为了在C++ 和 C# 之间交换数据,要建立复杂的执行栈,来完成调用,所以,对于定义了实现,但是函数本身是空的事件函数,会造成无效的调用,降低效率,要避免。

谈到这里,如果游戏对象比较多,每个对象挂的 MonoBehaviour 脚本也比较多的话,C++到C# 的调用开销(不包括C#的执行开销)就比较大,一个解决方法就是建立一个专门执行游戏逻辑的 MonoBehaviour,比如GameLogicRoot,所有游戏对象的逻辑组件,派生自我们自定义的 LogicObject(该对象不是从 MonoBehaviour 派生),并由GameLogicRoot统一调度,来极大地降低跨语言地函数调用,显著提升效率。关于这个,可以专门写一篇相关地架构设计文章了,这里先带过。