Unity 脚本可以灵活地挂在多个游戏对象上,一个游戏对象也可以挂在多个脚本。那么:脚本多了,如何来管理,如何控制不同脚本执行的先后顺序?
启动游戏后,Unity 会同时处理所有脚本。比如,执行脚本中的 Awake() 方法时,Unity 会先找到此时需要初始化的所有脚本,然后同时(先后顺序)执行这些脚本的所有 Awake() 方法。
//--脚本的执行顺序
脚本既可以在运行时动态添加在游戏对象上,也可以运行游戏前预制挂在游戏对象上。动态添加的脚本按添加的先后顺序决定执行顺序。但是静态脚本因此提前挂在了游戏对象上,所以初始化的顺序就不一样了。
在Editor→ProjectSettings→ScriptExecutionOrder中可以设置脚本的执行顺序。
例如,A B两个脚本,A先执行B后执行,如果在A的Awake()中获取B脚本的数据,那么可能就会出错。因为此时B脚本的初始化方法还没有执行。所以Awake() 方法适合做初始化,而在 Start() 方法中才适合安全地访问其他脚本的数据。这也说明了为什么在生命周期中会提供Start() 方法。
//-----------------------------------
//--多脚本优化
脚本挂的越多,执行效率就越低。这些脚本都需要执行生命周期的方法,此时Unity 需要遍历它们,然后再反射调用每个脚本的方法。
所以我们能做的优化就是避免挂太多脚本,避免在脚本中写入空方法。
如果不需要,就把它们删除掉。