简介
当一个脚本需要挂上不同对象且需要脚本输出数据时,可能会对产生的数据顺序困惑。
比如现在我有一个场景,我的目标是场景中的一个方块A对其他方块如方块B中的脚本上的字段进行更改,
而方块A和方块B都只挂了同一个脚本ScriptA,所以我要在ScriptA中同时实现:
(1)更改别的对象中ScriptA脚本中定义的字段数据
(2)被别的对象更改数据时,不会再继续对别的对象更改数据
所以当场景只有两个对象时,问题很好解决,但是有三个及以上对象时就会出现疑惑,
两个对象A和B同时对对象C进行数据更改,则会不会使C被重复修改数据。
结合现实比喻举例:
小A小B小C三条小狗狗是好朋友,但是很不幸的是他们都有高度近视,面对面都几乎看不见对方,
有一天小A的妈妈带了四块肉回来给他们三小狗分,并且要求每条小狗狗都要有,小A拿了两块,小B也拿了两块,
但是小C没有拿到,所以需要重新分配。
重新分配方案(1):A和B同时给C分配一块,C都接了过来,结果A:1,B:1,C:2
(2):A和B同时给C分配一块,C把两块肉都接了过来,但是B那块没拿稳掉在了地上找不着了,结果:A:1,B:1,C:1
(3):A先给了C一块,然后B也打算给,但是C已经有了一块了,没接B的肉,结果:A:1,B:2,C:1
所以Unity中是哪种方案?是第三种。 参考: Unity不同脚本之间的执行顺序.
场景试验
脚本创建
该脚本是主要脚本,在这个脚本中实现功能,具体代码就不列出来了。具体代码功能参照上面比喻举例。
运行过程
这个是总过程,下面进行讲解。
分配食物(字段数据)
A分到0个,B两个,C两个,按照规定,B或者C要分一个给A
(1)进行分配,选择对象
要寻找需要被分配的对象,然后进行分配
(2)进行分配,选择对象
要寻找需要被分配的对象,然后进行分配 根据上面C的分配,A已经被C分配了,所以在B进行分配时并没有成功分配
总结
上面输出中显示,B是比C运行慢的,实际上他们是同一个脚本,同一个方法,只是对象C排在了前面,先把C中的都运行完成,然后再运行B,也就是单线程运行
|