Start()仅在Update()函数第一次被调用前调用;
OnGUI()可以在每帧更新时调用多次;
OnDisable()在脚本失效时被调用,被撤销时也会被调用,如果再启动的话,OnEnable()会再调用一次。

编辑
Reset:Reset函数在脚本属性第一次添加到对象上初始化的时候就被调用,当然这个函数也可以显式调用。
场景第一次加载
下面的函数会在场景加载的时候被调用(场景中的每个对象只会调用1次)。
Awaka:当一个prefab在初始化完成之后,这个函数会在任何Start函数调用前被激活。(如果一个对象在启动阶段是未激活状态,Awaka是不会被调用的)
OnEnable:只有当对象是激活状态才会被调用,这个函数会在对象被激活之后立刻调用。一个MonoBehaviour实例被创建后就会调用,例如关卡被加载或一个带有脚本组件的对象初始化完成。
OnLevelWasLoaded:这个函数是用来通知游戏一个新的关卡已经加载完成。
对于所有添加到场景中的对象来说,Awaka和OnEnable函数对于所有的脚本来说会在Start、Update之前被执行。
在第一帧更新前
Start:当脚本实例被激活时的第一帧刷新前,Start就会被调用。
对于所有添加到场景中的对象,Start函数对于所有的脚本来说会在Update之前被调用。
在每一帧中
OnApplicationPause:当暂停状态激活的那一帧的最后,这个函数会被调用。
刷新顺序
FixedUpdate:FixedUpdate比Update函数更经常被调用,它可以在一帧内多次调用。如果帧率比较低,它可能会被调用多次,如果帧率比较高,它可能不会被调用。所有的物理计算和刷新都会在FixedUpdate之后立即进行。如果要在FixedUpdate中执行移动计算,你不需要使用Time.deltaTime来乘以你的值,因为FixedUpdate是基于一个可靠的定时器被调用,独立于帧率之外。
Update:Update函数会每帧调用一次,它是每帧最重要的刷新函数。
LateUpdate:每帧Update函数结束后,LateUpdate就会被调用。当LateUpdate开始时,任何Update内的计算都会结束。一个常见的LateUpdate应用就是第三人称视角跟随,如果你让你的主角移动和转向在Update函数内进行,你可以把所有的摄像机移动和旋转计算放在LateUpdate里面,这可以保证主角在摄像机跟随前已经移动结束。
渲染
OnPreCull:在摄像机剔除整个场景的时候调用,剔除决定了哪些对象对摄像机来说是可见的。OnPreCull会在剔除进行前调用。
OnBecameVisible/OnBecameInvisible:对任意的摄像机,在对象变可见和不可见的时候调用。
OnWillRenderObject:对每个摄像机只有当对象是可见的情况下调用一次。
OnPreRender:在摄像机开始渲染场景之前调用。
OnRenderObject:当常规的场景渲染完成后被调用,可以在这个时候使用GL类或者Graphics.DrawMeshNow来绘制自定义的几何。
OnPostRender:当摄像机完成场景渲染后调用。
OnRenderImage:当场景渲染允许执行图片的后期处理的时候调用,例如ImageEffects。
OnGUI:在一帧中调用多次来应答GUI事件。布局和重绘事件会优先处理,接着是键盘/鼠标的输入事件。
OnDrawGizmos:出于可视化目的,处理场景中绘制Gizmos对象。
协同程序
正常的协程刷新是在Unpdate函数返回时运行。一个协程是一个能够暂停其执行(yield)直到YieldInstruction结束后的一个函数。下面是协程的不同用法:
yield:协程会在下一帧调用完所有的Update函数后持续执行。
yield WaitForSeconds:在下一帧调用完所有的Update函数后,一个特定的延迟之后执行。
yield WaitForFixedUpdate:在所有的脚本已经调用完所有的FixedUpdate后执行。
yield WWW:一个WWW的下载完成后执行。
yield StartCoroutine:协程链,会先等待自定义协程完成后执行。
对象销毁
OnDestroy:这个函数会在对象存在的最后一帧所有的帧刷新函数调用结束后调用(对象可能会因为Object.Destroy而销毁或者随着场景的关闭)
退出
这些函数会在场景中所有的激活的对象上调用:
OnApplicationQuit:在应用程序退出前所有的游戏对象会调用。在编辑器中,当停止playmode就会调用这个函数。在web播放器中,当web view关闭时就会调用这个函数。
OnDisable:当behaviour变为disabled or inactive状态,这个函数就会被调用。
**

总结

**
先执行的方法是Awake,这是生命周期的开始,用于进行激活时的初始化代码,一般可以在这个地方将当前脚本禁用:this.enable=false,如果这样做了,则会直接跳转到OnDisable方法执行一次,然后其他的任何方法,都将不再被执行。
如果当前脚本处于可用状态,则正常的执行顺序是继续向下执行OnEnable,当然我们可以在另外一个脚本中实现这个脚本的启动:this.enable = true;
再向下执行,会进行一个判断,如果start方法还没有被执行一次,则会被执行一次,如果已经执行了,则不会再被执行。这是什么意思呢?我们可以在某个脚本中将组件禁用this.enable=false,再启动时会转到OnEnable处执行,这时继续往下走,发现start执行过了,将不再被执行。比如说:第一次启动时,将怪物的初始位置定在了(0,0,0)点,然后怪物可能会发生了位置的变换,后来被禁用了,再次启动时,不会让怪物又回到初始的(0,0,0)位置。
继续向后执行,就是Update了,然后FixUpdate,再然后是LateUpdate,如果后面写了Reset,则会回到Update,在这4个事件间可以进行循环流动。
再向后执行,就进入了渲染模块(Rendering),非常重要的一个方法就是OnGUI,用于绘制图形界面。当然,如果你使用了NGUI,这个生命周期的事情你就不用考虑了。
再向后,就是卸载模块(TearDown),这里主要有两个方法OnDisable与OnDestory。当被禁用(enable=false)时,会执行OnDisable方法,但是这个时候,脚本不会销毁,在这个状态下,可以重新回到OnEnable状态(enable=true)。当手动销毁或附属的游戏对象被销毁时,OnDestory才会被执行,当前脚本的生命周期结束。

Unity的脚本生命周期相关推荐

  1. unity 脚本中 调用另一个脚本_Unity 2019.4 脚本生命周期

    脚本生命周期流程图 加载第一个场景 场景开始时将调用以下函数(为场景中的每个对象调用一次). Awake:始终在任何 Start 函数之前并在实例化预制件之后调用此函数.(如果游戏对象在启动期间处于非 ...

  2. Unity脚本生命周期与执行顺序

    目录 脚本生命周期 MonoBehavior生命周期图 脚本执行顺序 自定义执行顺序 @(文章目录) 在Unity中,脚本可以理解为附加在游戏对象上的用于定义游戏对象行为的指令代码.必须绑定在游戏对象 ...

  3. Unity脚本(2) --- 脚本生命周期以及脚本的控制台调试

    1.什么是脚本生命周期? 首先什么是脚本 --- 脚本的本质其实就是类,而脚本生命周期其实就是脚本对应的那个类从开始工作到最后销毁这么一个周期 (或者说是Unity脚本从唤醒到销毁的过程) (消息,必 ...

  4. Unity3D热更新之LuaFramework篇[06]--Lua中是怎么实现脚本生命周期的

    前言 用c#开发的时候,新建的脚本都默认继承自Monobehaviour, 因此脚本才有了自己的生命周期函数,如Awake,Start, Update, OnDestroy等. 在相应的方法中实现游戏 ...

  5. Unity3D基础31:脚本生命周期

    前文:https://blog.csdn.net/Jaihk662/article/details/86751079(C#脚本) 一.脚本生命周期 脚本的生命周期,就是挂载到的游戏物体"从出 ...

  6. Unity3D动画游戏设计算法 --脚本生命周期

    1.实验的目的和要求 掌握脚本生命周期的概念,掌握MonoBehavior类,理解各个事件的含义.执行条件.执行过程,能够熟练利用各个事件实现相应的功能. 2.实验内容 编写相关代码,测试脚本生命周期 ...

  7. unity脚步的生命周期

    unity脚步的生命周期 1 下面这些方法可以在编辑器中显示 2 初始阶段 1 Awake() 2 Start() 3 OnEnable() 4 总结 3 物理阶段 1 FixedUpdate() 2 ...

  8. Unity中场景生命周期的监听: EditorSceneManager

    本文分享Unity中场景生命周期的监听: EditorSceneManager 在Unity开发中, 有时我们需要在场景的某些生命周期时做一些特定的操作, 特别是在Editor模式下的一些工具代码. ...

  9. unity3d中脚本生命周期(MonoBehaviour lifecycle)

    自:http://blog.csdn.net/qitian67/article/details/18516503 最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必 ...

最新文章

  1. 安全领域新概念:安全评级服务的兴起
  2. 5G之争,到底争些什么?
  3. java数值运算后精度丢失问题
  4. 计算机网络---非归零码、曼彻斯特编码和差分曼彻斯特编码
  5. mixly编程怎样音乐_华人留学生开发首个古汉语编程语言,实现易经算命、圆周率计算,Github获赞14.7k...
  6. python 阿里云短信接口_阿里云短信PythonSDK的用法
  7. vue each_Vue.js从零开始——模块化项目(2)
  8. 来兄弟连学习的经历和感受
  9. 046 实例11-自动轨迹绘制
  10. [Vulhub](WooYun-2016-199433)phpmyadmin反序列化漏洞
  11. 休息是为了更好的出发
  12. html语言 大全,HTML语言大全
  13. java 正则 实例_Java正则表达式示例
  14. 后疫情时代,人工智能发展的四大趋势
  15. 几维安全:千锤百炼,锻造移动游戏安全防护黄金铠甲
  16. hashMap的具体实现
  17. 装机吧盘点电脑自动重启的解决办法
  18. 01 LeNet-5论文笔记-Gradient-Based Learning Applied to Document Recognition
  19. 正则表达式实现中文的大写字符
  20. ChinaSoft 论坛巡礼 | CCF-华为胡杨林基金-软件工程专项论坛

热门文章

  1. java 购买电影票_java电影票预售管理系统
  2. BAT (中国互联网公司三巨头)
  3. 连接共享打印机输入用户名和密码——解决办法
  4. 巴比特 | 元宇宙每日必读:希壤、啫喱等元宇宙社交APP火爆后迅速降温,用户大量流失,怎么破局?...
  5. css设置半透明背景颜色并且内容不会受影响的解决办法
  6. python显示日历_Python获取时间范围内日期列表和周列表的函数
  7. mysql-dql(Data QueryLanguage)summary
  8. echarts中formatter修改鼠标悬浮事件信息操作、echarts地图块、散点区分触发点击事件 只触发散点问题详解
  9. git通过SSH协议提交github(远程仓库)
  10. 性能分析之 PHP 应用进程过多导致的 page faults