导航

关于Unity单个对象多个脚本的Update调用的时序问题

Posted on 2019-03-05 12:03  剑孤寒  阅读(1484)  评论(0编辑  收藏  举报

先说几句废话,

最近在研究Unity,

这玩意用起来比较简单,

而且商店里还有各种插件,

初学者也能轻松拼凑出一个像模像样的游戏(顺便说一句,自己做着玩就无所谓了,但随便拼凑个辣鸡丢出来骗钱就不好了),

是一个不错的游戏开发工具,

不过知不道是不是开发商已经很久没有自己用Unity开发一个完整的游戏了,

这玩意很多细节做得都比较蛋疼,

而又因为是闭源的,

很多本来花不到一分钟时间改一下源码就能解决的问题现在也只能先用蛋疼的方式解决了,

之后计划在此记录下研究过程中发现的各种蛋疼的问题以及个人认为蛋疼程度最低的解决办法,

希望能给此时也正在研究Unity的同学一些帮助。

 

言归正传,

最近在研究Unity的刷新流程,

官方文档明确指出了不同对象的Update函数调用的顺序是不确定的,

这个没什么问题,不同对象的Update本来也不应该有直接的依赖关系,

但是在相同对象中挂上去的脚本貌似没有找到文档说明调用顺序是怎样的(如果哪位同学找到了麻烦告诉我一下),

然后写了一段代码实验了一下,

发现调用顺序跟脚本挂上去的顺序有关,

跟在面板上的顺序无关,

然后又在论坛上发现有人说这个顺序也是不固定的,

有可能你游戏丢出去给别人玩的时候突然就出问题了,

额,好吧,

不过即使是按这个顺序来执行的,

个人建议也不要依赖这个顺序,

如果哪天新加了个脚本跟之前已经挂上去的脚本有时序上的依赖,

就得把把脚本全部删掉重新再加一次,想想就蛋疼,

由于没有源码,不知道官方出于什么目的要干这种反人类的事情,

个人觉得按脚本在面板上的顺序调用比较符合人类的直觉,

也不存在什么开发难度,几行代码就搞定了,

不过既然现在引擎已经做成这样了,

暂时能想到的一个不那么蛋疼的解决办法是写一个刷新管理类,

在Start的时候把该对象其他需要Update的脚本拿出来,

然后在Update的时候按逻辑顺序调用这些脚本的Upate函数就好了,

当然,这些脚本的Update函数得改个名字,例如ManualUpdate啥的