在学习Unity时,掌握如何编写脚本是必须掌握的一项基本技能。但是关于Unity的游戏脚本中各函数的生命周期是怎样开始和结束的,它们的执行顺序是如何安排的?这一点我们要清楚的了解。

我们知道Unity中的脚本大多派生于MonoBehaviour类,所以可以重写MonoBehaviour类里面的方法来实现我们想要的功能。那么自定义脚本中的各函数执行顺序和MonoBehaviour里面的函数执行顺序大致是一样的。

首先介绍一下MonoBehaviour类里面的成员变量和成员函数。

 public class MonoBehaviour : Behaviour
{
public MonoBehaviour(); public bool useGUILayout { get; set; } public void CancelInvoke();
public void CancelInvoke(string methodName);
public void Invoke(string methodName, float time);
public void InvokeRepeating(string methodName, float time, float repeatRate);
public bool IsInvoking();
public bool IsInvoking(string methodName);
public static void print(object message);
public Coroutine StartCoroutine(IEnumerator routine);
[ExcludeFromDocs]
public Coroutine StartCoroutine(string methodName);
public Coroutine StartCoroutine(string methodName, object value);
public Coroutine StartCoroutine_Auto(IEnumerator routine);
public void StopAllCoroutines();
public void StopCoroutine(Coroutine routine);
public void StopCoroutine(IEnumerator routine);
public void StopCoroutine(string methodName);
}

注:对于MonoBehaviour类的成员变量和成员函数,只作一些相关介绍,具体的使用方法在以后会陆续进行举例说明。或者可以参考Unity的API手册。

Variables 变量


useGUILayout  禁用此项,将会跳过GUILayout布局阶段


Functions 函数


  • Invoke 原型:void Invoke(string methodName,float time);根据时间调用指定方法名的方法。
  • InvokeRepeating 原型:void InvokeRepeating (methodName : string, time : float, repeatRate : float);每隔指定时间调用指定方法名的方法,从第一次调用开始,每隔repeatRate时间调用一次.
  • CancelInvoke 原型:void CancelInvoke ();取消这个MonoBehaviour上的所有调用。void CancelInvoke(string methodName);取消所有名为methodName的调用。
  • IsInvoking 原型:bool IsInvoking(string methodName);某指定函数是否在等候调用。正在调用返回true,否则返回false。
  • StartCoroutine 原型:Coroutine StartCoroutine(IEnumerator routine);开始协同程序。
  • StopCoroutline 停止methodName的所有协同程序。
  • StopAllCoroutline 停止所有动作的协同程序。

Overridable Functions 可重写函数


  • Update 原型:void Update();当MonoBehaviour启用时,Update函数在每一帧被调用。
  • LateUpdate 原型:void LateUpdate();当MonoBehaviour启用时,LateUpdate函数在每一帧被调用。LateUpdate是在所有Update函数调用后被调用。这可用于调整脚本执行顺序。

  • FixedUpdate 原型:void FixedUpdate();当MonoBehaviour启用时,FixedUpdate函数在每一帧被调用。

  • Awake 原型:void Awake();当脚本实例被载入时Awake被调用。Awake用于在游戏开始之前初始化变量或游戏状态。在脚本整个生命周期内它仅被调用一次。

  • Start 原型:void Start();Start仅在Update函数第一次被调用前调用。和Awake不同的是,Awake函数的调用要早于Start,并且Start函数只在脚本实例被启用时调用。

  • Reset 原型:void Reset();重置为默认值。Reset是在用户点击检视面板的Reset按钮或者首次添加该组件时被调用。此函数只在编辑模式下被调用。Reset最常用于在检视面板中给定一个最常用的默认值。


以上是常用的成员函数,还有一些成员函数是关于鼠标操作事件的,比如:OnMouseOver(),OnMouseEnter()等。

另外OnGUI()函数也是比较常用的,它主要负责窗口控件的渲染和管理。

接下来附上一张官方文档对脚本中各函数生命周期的图表:

图片来源于:http://docs.unity3d.com/Manual/ExecutionOrder.html

可见Unity脚本从创建到销毁是具有一个完整的生命周期的,主要的调用顺序如下:

OnGUI函数会在每帧上多次被调用,因为要时刻准备相应里面的GUI事件。

Unity脚本中各函数成员的生命周期的更多相关文章

  1. C/C++——C++变量的作用域与生命周期,C语言中变量的作用域和生命周期

    全局变量 作用域:全局作用域(全局变量只需在一个源文件中定义,就可以作用于所有的源文件.) 生命周期:程序运行期一直存在 引用方法:其他文件中要使用必须用extern 关键字声明要引用的全局变量. 内 ...

  2. Flutter--Flutter中Widget、App的生命周期

    前言 在App的开发过程中,我们通常都需要了解App以及各个页面的生命周期,方便我们在App进入前台时启动一些任务,在进入后台后暂停一些任务.同时,各个页面的生命周期也很重要,每个页面消失时要做一些内 ...

  3. 如何在web.config文件中配置Session变量的生命周期

    实例说明:在网上购物商城中,为了维护在线购物环境,一般只有注册会员才可以购买商品.实现购物功能时,先通过Session变量记录会员的登录名,然后在购买商品页面通过判断会员是否登录确定其能否购买商品. ...

  4. Spring中与bean有关的生命周期

    前言 记得以前的时候,每次提起Spring中的bean相关的生命周期时,内心都无比的恐惧,因为好像有很多,自己又理不清楚,然后看网上的帖子,好像都是那么一套,什么beanFactory啊,aware接 ...

  5. 【老孟Flutter】Flutter 中与平台相关的生命周期

    老孟导读:关于生命周期的文章共有2篇,一篇(此篇)是介绍 Flutter 中Stateful 组件的生命周期. 第二篇是 Flutter 中与平台相关的生命周期, 博客地址:http://laomen ...

  6. 详解Spring中Bean的作用域与生命周期

    摘要:在利用Spring进行IOC配置时,关于bean的配置和使用一直都是比较重要的一部分,同时如何合理的使用和创建bean对象,也是小伙伴们在学习和使用Spring时需要注意的部分,所以这一篇文章我 ...

  7. Unity 脚本中的主要函数的 执行顺序及其介绍

    Awake ->OnEable-> Start -> FixedUpdate-> Update  -> LateUpdate ->OnGUI ->OnDisa ...

  8. 在shell脚本中使用函数

    转载请标明:http://www.cnblogs.com/winifred-tang94/ 对于在脚本中重复使用的功能模块,可以封装成为函数. shell脚本中函数的定义可以使用如下两种方式: a. ...

  9. C语言中变量的作用域和生命周期

    变量的类型: 1. 局部变量和全局变量 局部变量也称为内部变量. 局部变量是在函数内作定义说明的.其作用域仅限于函数内, 离开该函数后再 使用这种变量是非法的. 全局变量也称为外部变量,它是在函数外部 ...

随机推荐

  1. 微信公众号支付安卓和WP支付成功,苹果不能支付!

    花了几天时间,终于搞好了,代码是从官网上下的.NET DEMO的代码改的,测试的时候发现安卓和WP手机都能进行支付,但是苹果的怎么支付都支付不了,主要是在下面这个界面 点支付按钮就是苹果支付不了,其他 ...

  2. [机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)

    引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等,主要学习资料来自网上的免费课程和一些经典书籍,免费课 ...

  3. 【Android】3.6 地图基本控制方法

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 文件名:Demo05MapControl.cs 简介:介绍平移和缩放地图,双指操作地图,监听地图点击 ...

  4. 在线升级java的版本

    真接rpm包安装javaxxxx.rpm 然后调整/etc/profile 如下: # tail -n /etc/profile JAVA_HOME=/usr/java/jdk1..0_45 PATH ...

  5. JS页面跳转并及时刷新

    "<script type='text/javascript'>alert('操作成功!');window.history.go(-2);window.close();</ ...

  6. Oracle行转列SQL

      -- Create table /*create table TEST_TABLE ( STUDENT VARCHAR2(200), SUBJECT VARCHAR2(200), GRADE NU ...

  7. nyoj123 士兵杀敌(四)树状数组 插线问点

    士兵杀敌(四) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...

  8. Python 2.7.9 Demo - 014.列表List的定义、取值、遍历

    #coding=utf-8 #!/usr/bin/python list = ['a', 1, 'b', 2, 'c', 3]; print list[0]; print list[1:3]; pri ...

  9. singer页面点击歌手singer是跳转到singer-detail的设置

    1.创建components/singer-detail/singer-detail.vue 2.配置动态路由: { path: ':id', name:'singer-detail', compon ...

  10. eclipse 安装插件的几种方式

        eclipse 安装插件的几种方式   1.使用url在线安装 ,最方便最快捷   help - install new software       接下来就是同意协议之类的,next ne ...