Unity不同脚本之间的执行顺序

我们都知道,Unity中某个脚本的执行顺序是Awake、Start、Update、LateUpdate等,但是不同的脚本之间的执行顺序是怎样的呢?

例如我有两个脚本Script1和Script2,那么这两个脚本的Awake执行顺序是怎样的呢?


要知道真相我们就必须了解Unity后台的运行原理,其实Unity后台是单线程执行的,所谓的协程都是伪多线程。不同脚本的Awake在后台的执行真相是这样的:

后台Awake()  
{  
    脚本0Awake();  
    脚本1Awake();  
    ........  
}  

Start、Update等函数也是相同的道理,那么问题就来了,这么多脚本,他们的执行顺序到底是怎样的呢?


这个关系我还真没搞明白其中的规律,不过Unity提供了一个设置不同脚本之间执行顺序的功能

1、先在project窗口选中一个脚本文件,然后在Inspector卡中显示如下:

这里写图片描述

2、点击右上角Execution Order显示如下:

这里写图片描述

3、点击加号添加你想要排序的脚本文件。

4、拖动脚本文件进行排序。

这样脚本就会按照你排的顺序顺次进行初始化。


我们之所以要设置脚本间的执行顺序主要是为了避免下面这种情况

public class Script1 : MonoBehaviour   
{  
    void Awake ()  
    {  
        GameObject.CreatePrimitive(PrimitiveType.Cube);  
    }  
}  
public class Script2 : MonoBehaviour   
{  
    void Awake ()   
    {  
        GameObject go = GameObject.Find("Cube");  
        Debug.Log(go.name);  
    }  
}  

这样如果Script2在Scirpt1之前执行的话,就会报错。因此需要对脚本初始化顺序进行设置。


但是还有另外一种方法来解决上述问题:
那就是在Script1的Awake创建cube,在Script2的Start访问cube,这样就不会出错啦。
因为后台的也是严格按照Awake早于Start的顺序执行的,也就是先把所有脚本的Awake执行完,然后再执行所有脚本的Start。


转自
http://blog.csdn.net/alexander_xfl/article/details/41577625?utm_source=tuicool&utm_medium=referral

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值