当前位置: 首页 » 产品 » 商务广告 » 正文

Unity 3D中脚本的执行顺序和编译顺序教程

放大字体  缩小字体 发布日期: 2024-09-27 07:22   来源:http://www.baidu.com/  作者:无忧资讯  浏览次数:17
核心提示:事件函数的执行顺序先说一下执行顺序吧。 官方给出的脚本中事件函数的执行顺序如下图: 我们可以做一个小实验来测试一下:在Hier

事件函数的执行顺序

先说一下执行顺序吧。
官方给出的脚本中事件函数的执行顺序如下图:

Unity 3D中脚本的执行顺序和编译顺序教程 三联

我们可以做一个小实验来测试一下:
在Hierarchy视图中创建三个游戏对象,在Project视图中创建三条脚本,如下图所示,然后按照顺序将脚本绑定到对应的游戏对象上:

Unity 3D中脚本的执行顺序和编译顺序教程



三条脚本的代码完全一样,只是做了一点名称上的区分:

using UnityEngine;
using System.Collections;
public class Scring0 : MonoBehaviour
{
    void Awake()
    {
        Debug.Log("script0=======Awake");
    }
    bool isUpdate=false;
    void Update()
    {
        if(!isUpdate)
        {
            Debug.Log("script0=======Update");
            isUpdate=true;
        }
    }
    bool isLateUpdate=false;
    void LateUpdate()
    {
        if(!isLateUpdate)
        {
            Debug.Log("script0=======LateUpdate");
            isLateUpdate=true;
        }
    }
}

播放游戏,看看它们的执行顺序。如下图所示,Awake、Update、LateUpdate,无论运行游戏多少次,它们的执行顺序是完全一样的。

Unity 3D中脚本的执行顺序和编译顺序教程

接着我们再做一个测试,把script0的Update方法注释掉!!

using UnityEngine;
using System.Collections;
public class script0 : MonoBehaviour
{
    void Awake ()
    {
        Debug.Log("script0=========Awake");
    }
//  bool isUpdate=false;
//  void Update ()
//  {
//      if(!isUpdate)
//      {
//          Debug.Log("script0=========Update");
//          isUpdate=true;
//      }
//  }
    bool isLateUpdate=false;
    void LateUpdate()
    {
        if(!isLateUpdate)
        {
            Debug.Log("script0=========LateUpdate");
            isLateUpdate=true;
        }
    }
}

再次运行游戏,看看它的结果。脚本的执行顺序和以前完全一样,script0即便删除掉了Update方法,但是它也不会直接执行LateUpdate方法,而是等待script1和script2中的Update方法都执行完毕以后,再去执行所有的LateUpdate方法。

Unity 3D中脚本的执行顺序和编译顺序教程

通过这两个例子,我们就可以很清楚地断定,Unity后台是如何执行脚本的了。每个脚本的Awake、Start、Update、LateUpdate、FixedUpdate等等,所有的方法在后台都会被汇总到一起:

后台的Awake()
{
    // 这里暂时按照上图中的脚本执行顺序,后面会谈到其实可以自定义该顺序的
    脚本2中的Awake();
    脚本1中的Awake();
    脚本0中的Awake();
}

后台的方法Awake、Update、LateUpdate等等,都是按照顺序,等所有游戏对象上脚本中的Awake执行完毕之后,再去执行Start、Update、LateUpdate等方法的。

后台的Update()
{
    // 这里暂时按照上图中的脚本执行顺序,后面会谈到其实可以自定义该顺序的
    脚本2中的Update();
    脚本1中的Update();
    脚本0中的Update();
}
 
 
[ 产品搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 违规举报 ]  [ 关闭窗口 ]

 

 
推荐图文
推荐产品
点击排行
    行业协会  备案信息  可信网站