unity中的多脚本执行机制

结论

先把结论摆在开头:在unity中,多脚本的加载顺序是随机的。

多脚本执行机制之众说纷纭

在写这篇博客之前,因为导师大大的要求,我查阅了很多关于unity多脚本执行机制的资料。真的是众说纷纭,有博主说“先被创建的脚本先被加载”,也有的博主说“先被挂载的脚本后被加载”。因为各有各的说法,所以我硬着头皮选了最笨的方式去寻求答案 - 那就是自己在unity场景中创建多个object对象和多个脚本,设计不同的情况一个个去做实验。
但是实验还没做完,我对比着已经得到的结果就发现目前看到的说法都不太对,部分实验结果与说法A是吻合的,部分说法又与说法B吻合。无奈之下,只得抛弃还没做完的实验,再次冲向茫茫互联网的怀抱。

多脚本执行机制之蛛丝马迹

因为之前一直在国内网站上查找资料但未果,所以抛弃实验之后就开始尝试着在Google上寻求答案。
初步的线索由 The Perils of Unity’s Execution Order这篇博客提供。博主阐述了与自己相似的问题,也设计了相关的实验尝试进行解答,但遗憾的是最终并没有得出满意的结论。但是他在博客里贴出了unity里关于脚本执行的一句说明:
unity5.6
然后我就屁颠屁颠地去翻了博客提供的unity版本(unity5.6)、自己常用的unity版本(unity2017.2)以及最新的unity版本(unity2019.4)里对于Script Execution Order Settings的说明…
是的,unity并未专门说明默认情况下的多脚本执行机制到底是什么样的(也有可能是我没找到,如果有小伙伴看见了请一定一定艾特我!),但是在可显示指定执行顺序的Script Execution Order说明里它顺带提了那么一两句…
现在把相关的说明放在这里给大家看看。
上图是unity5.6里的说明,而在unity2017.2里它是这么说的:
unity2017.2
在unity2019.4里它是这么说的:
unity2019.4
看到了吗,一大段话里关于默认情况下的多脚本执行机制仅有一两句的说明…它心酸我不知道,我挺心酸倒是真的…

总结

根据上面贴出来的三张图,我们可以得到的结论是:unity中的多脚本加载顺序与脚本被创建的顺序无关,与脚本被挂载的顺序无关,也与挂载该脚本的object对象在视图窗口的上下顺序无关,它是随机加载的。
unity的生命周期决定了单个脚本里的start函数一定在update函数之前执行,而我们也知道即使有多个脚本,那么这些脚本的update函数也必须在所有脚本的start函数被执行完后才能被执行。
但是,那么多脚本都有start函数,到底是哪个脚本里的start函数先被执行呢?我相信大家也有了答案。那就是这些事件函数的执行顺序与被加载的脚本顺序有关,既然脚本是被随机加载的,那么多脚本里相同的事件函数的执行顺序也是随机的。
PS:在看完三个版本的Script Execution Order说明后,我心里虽然有了一个疑似正确的结论,但还是不敢下定论,所以后来又网上冲浪尝试寻找更多的佐证。StackOverFlow里有几篇答疑帖与本次论题类似,具体内容就不阐述啦,有兴趣的小伙伴可以戳下方链接:
Unity script execution order and Start()
GameObject update order in Unity

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值