这是【Unity3D 教程系列第 10 篇】,如果觉得有用的话,欢迎关注专栏。

文章目录

  • 一:生命周期流程图
  • 二:常用的生命周期函数
  • 三:脚本初始化和销毁
  • 四:脚本的动态添加与静态添加
  • 五:Awake 与 Start 谁更适合访问脚本数据?
  • 六:渲染用到的周期函数

一:生命周期流程图

Unity 脚本有一套完整的生命周期,脚本需要挂在任意游戏对象上,并且同一个游戏对象可以挂不同的脚本,各个脚本执行自己的生命周期,它们可以相互组合并且互不干扰。

学习脚本的生命周期之前,我们不得不引用文档中非常经典的一张图,这张图完整地描述了脚本的生命周期,如下图所示

生命周期中的所有方法都是 Unity 系统自己回调的,不需要手动调用,主要有编辑脚本,初始化,物理碰撞事件,更新回调,渲染和销毁等。

二:常用的生命周期函数

  • Awake :Awake 隔帧后会调用 Start,并且只会调用一次,OnEnable 每次被激活时都会被调动。
  • FixedUpdate :固定更新,会按照设置的时间固定频率来循环更新,关于FixedUpdate与Update,LateUpdate之间的区别
  • yield :协程任务会在每一帧 Update 后,LateUpdate 之前执行。
  • OnDisisable :在禁用脚本时调用,重新激活时将调用 OnEnable 方法。

三:脚本初始化和销毁

脚本挂在游戏对象上,运行时就会立即执行初始化方法 Awake,它是一个同步方法,如果游戏对象被删除,或者挂在它身上的脚本被删除,就会执行 OnDestroy 销毁方法。

需要记住的是,初始化或销毁,在脚本的生命周期中只会执行一次。

此外,游戏对象还有个状态,叫禁用状态,如下图红色标记,打对勾表示激活,取消对勾表示禁用。

在程序运行的过程中,可以多次设置激活/禁用,同时系统会分别回调生命周期中的 OnEnable 函数和 OnDisable 函数。

四:脚本的动态添加与静态添加

脚本既可以在运行时动态添加在游戏对象上,也可以运行游戏前预制挂在游戏对象上。动态添加的脚本按添加的先后顺序决定执行顺序,但是静态脚本因为提前挂在了游戏对象上,所以初始化的顺序就不一样了。

五:Awake 与 Start 谁更适合访问脚本数据?

例如,A 脚本先执行,B 脚本后执行,如果 A 脚本在自己的 Awake 方法中获取 B 脚本的数据,那么就会出错。

因为此时 B 脚本的初始化方法还没有执行。这就说明为什么在脚本生命周期中会提供 Start 方法,所以 Awake 方法适合做初始化,而在 Start 方法才适合安全地访问其它脚本数据。

特别注意
脚本挂得越多,执行效率就越低,这些脚本都需要执行生命周期的方法,此时 unity 需要遍历它们,然后再反射调用每个脚本的方法,所以我们能做的优化就是避免挂太多的脚本。

尤其避免在脚本中写入这种空方法,虽然没执行任何功能,但 unity 还是会去调用,所以,如果不需要,就把它删掉

六:渲染用到的周期函数

下面这些是关于渲染的周期函数,想了解的可以看下。

OnPreCull
作用:在相机剔除场景之前调用此函数。相机可见的对象取决于剔除。OnPreCull 函数调用发生在剔除之前。
OnBecameVisible / OnBecameInvisible
作用:在对象对于相机可见/不可见时调用此函数。
OnWillRenderObject
作用:如果对象可见,则为每个相机调用一次此函数。
OnPreRender
作用:在相机开始渲染场景之前调用此函数。
OnRenderObject
作用:在完成所有常规场景渲染后调用此函数。可使用 GL 类或 Graphics.DrawMeshNow 绘制自定义几何图形。
OnPostRender
作用:在相机完成场景渲染后调用此函数。
OnRenderImage
作用:在完成场景渲染后调用此函数,以便对屏幕图像进行后处理(仅限专业版)。
OnDrawGizmos
用于在场景视图中绘制小图示 (Gizmos),以实现可视化目的。
OnGUI
作用:在每帧上多次调用此函数,以响应 GUI 事件。程序首先将处理 Layout 和 Repaint 事件,然后再处理每个输入事件的 Layout 和 keyboard 鼠标事件。

你的问题得到解决了吗?欢迎在评论区留言。

赠人玫瑰,手有余香,如果觉得文章不错,希望可以给个一键三连,感谢。


结束语

技术是一点一点积累的,大神也不是一天就可以达到的。原地不动就是退步,所以每天进步一点点。

最后,附上一句格言:"好学若饥,谦卑若愚",望共勉。

【Unity3D 教程系列第 10 篇】Unity 脚本中的生命周期流程图相关推荐

  1. 【C# 教程系列第 10 篇】c# 中如何让指定类不能被继承?

    这是[C# 教程系列第 10 篇],如果觉得有用的话,欢迎关注专栏. 有时候我们并不希望自己写的类被继承,怎么做呢? 方法很简单,只需要在定义类时加上 sealed 关键字,用 sealed 关键字声 ...

  2. 【jQuery 教程系列第 10 篇】jQuery 中的过滤选择器(基本筛选器)

    这是[jQuery 教程系列第 10 篇],如果觉得有用的话,欢迎关注专栏. jQuery 中除了一些 基本选择器 ,也有一些过滤选择器,本篇博客仅挑选其中的几个简单说明一下,其它的大家可以点击 jQ ...

  3. 【Unity3D 教程系列第 12 篇】如何用Unity写一个简易的计时器工具?

    这是[Unity3D 教程系列第 12 篇],如果觉得有用的话,欢迎关注专栏. 平常关于延时的处理很多人都喜欢用携程去处理,但是在 Unity 里,并不建议大家用过多的携程,因为会出现一些莫名其妙的 ...

  4. 【Unity3D 教程系列第 19 篇】Unity 中根据长方体模型的尺寸添加碰撞盒 BoxCollider

    这是[Unity3D 教程系列第 19 篇],如果觉得有用的话,欢迎关注专栏. 前言: 给一个长方体模型添加碰撞盒 BoxCollider,即使手动拖拽也费不了多长时间,但手动拖动不仅显得 Low , ...

  5. 【Unity3D 教程系列第 1 篇】Unity如何去掉自带动画?

    这是[Unity3D 教程系列第 1 篇],如果觉得有用的话,欢迎关注专栏. 打开Unity,在左上角点击 File 选项后,执行如下操作 文解步骤:File → BuildSetting → Pla ...

  6. 【Unity3D 教程系列第 14 篇】如何解决启动 Unity 时,一直卡在 Loading 界面不动的问题?

    这是[Unity3D 教程系列第 14 篇],如果觉得有用的话,欢迎关注专栏. 文章目录 一:问题截图 二:解决方案 方案一:文解过程 方案二:图解过程 一:问题截图 解决方案 一:问题截图 二:解决 ...

  7. 【Unity3D 教程系列第 15 篇】本地数据持久化之 Playerprefs 类

    这是[Unity3D 教程系列第 15 篇],如果觉得有用的话,欢迎关注专栏. 文章目录 一:什么是 PlayerPrefs 类 二:PlayerPrefs 类中的静态方法 1:写入数据 2:读取数据 ...

  8. 【Unity3D 教程系列第 16 篇】Scene视图很清楚,但是Game视图却很模糊的解决方案

    这是[Unity3D 教程系列第 16 篇],如果觉得有用的话,欢迎关注专栏. 如果你用 Unity 时,Scene 视图上很清楚,但是 Game 视图却很模糊,恭喜你,你的问题即将被解决了,继续看- ...

  9. 【Mac 教程系列第 10 篇】如何在 Mac 上破解带有密码的 ZIP 压缩文件

    这是[Mac 教程系列第 10 篇],如果觉得有用的话,欢迎关注专栏. 我们知道如果是一般的压缩文件,可以用系统自带的或者很好用的压缩工具 Keka 来解压,但如果要解压的压缩文件设置了密码,这个时候 ...

最新文章

  1. plsql developer的一些使用
  2. 速领:1024大礼包
  3. python利器怎么编程-Python任务调度利器之APScheduler详解
  4. Mac下安装配置Python2和Python3并相互切换使用
  5. 聚类(Clustering): K-means算法
  6. 【Java】深入剖析Java输入输出的那些细节
  7. 《奠基计算机网络》2011年8月15日出版 视频下载 http://www.91xueit.com
  8. Unieap3.5-Grid编辑列中数字与下拉改变
  9. Ubuntu系统下如何在不重启的情况下永久修改hostname主机名
  10. 腐蚀rust图纸怎么找_怎么解决变压器油滤油机的温差效应?在这里可以得到解决...
  11. (dp)openjudge 复杂的整数划分问题
  12. 图解n=4的汉诺塔问题
  13. 监督学习的基本假设——联合概率分布,独立同分布
  14. 抖音返利分销模式及代理系统开发
  15. 微型计算机常见的输入与输出设备,微型计算机的输入输出设备.doc
  16. 实现安全登录的两种方法
  17. Xcode 常用编译选项设置
  18. 湖南师范大学计算机专业研究生读几年,湖南师范大学计算机专业在职研究生培养方式是怎样的?...
  19. pyshark引用TShark时:TShark not found的解决方法
  20. 财务机器人RPA推动财务职能转换

热门文章

  1. 最新基于ThinkPHP5.0+BootStrap框架开发的自适应WAP手机端响应式界面博客系统PHP源码
  2. 统一诊断服务(UDS)
  3. 普元微服务与容器技术实践沙龙第二期
  4. opencv学习---计算图像的水平积分投影和垂直积分投影
  5. JavaWeb开发日记
  6. 炒汇软件测试简历,外汇MT4复盘测试EA快速入门.pdf
  7. 深度解读 | 肠道菌群和中枢神经系统的关系
  8. 10万弹幕大军带你一起看芒果热播综艺《披荆斩棘的哥哥》
  9. 运行在VMware上的VMware公司
  10. 仓鼠再小,它也是一条生命啊