打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[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。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Unity3d中的碰撞检测(一)
Unity3D研究院之利用缓存池解决Instantiate慢的问题(七十三) | 雨松MOMO程序研究院
Unity零基础到入门 | Unity中必备组件技能学习!
Using Scripts 使用脚本
Unity官方实例教程 Roll
c# – Unity 4.6编辑器,使用预定义数据创建脚本
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服