MonoBehaviour 组件是指继承了 MonoBehaviour 类的脚本组件,可以附加到游戏对象上,用于控制游戏对象的行为和交互。
MonoBehaviour 类是 Unity 中的一个基类,提供了许多方法和事件,用于处理输入、渲染、碰撞、协程等操作。
Unity MonoBehaviour 的生命周期是指 MonoBehaviour 类提供的一系列函数,这些函数在不同的时刻被 Unity 引擎自动调用,用于处理游戏对象的初始化、更新、渲染、销毁等操作。MonoBehaviour 的生命周期函数有以下几种¹:
- Awake:当脚本实例被加载时调用,只执行一次。
- OnEnable:当脚本组件被启用时调用,只执行一次。
- Start:在第一次 Update 之前调用,只执行一次。
- FixedUpdate:在固定的时间间隔内调用,通常用于处理物理相关的操作。
- Update:在每一帧中调用,通常用于处理逻辑相关的操作。
- LateUpdate:在每一帧的 Update 之后调用,通常用于处理相机或跟随物体的操作。
- OnGUI:在每一帧中调用两次,用于处理 GUI 相关的操作。
- OnDisable:当脚本组件被禁用时调用,只执行一次。
- OnDestroy:当脚本实例被销毁时调用,只执行一次。
这张图是 Unity 3.4 版本的 MonoBehaviour 的生命周期的流程图,由 Richard Fine 在 2012 年创建。它分为三个部分:启动、编辑模式和销毁。它说明了当一个新的组件被创建、初始化、更新、渲染和销毁时,Unity 引擎会自动调用哪些 MonoBehaviour 的函数。这些函数有 Awake、OnEnable、Start、FixedUpdate、Update、LateUpdate、OnGUI、OnDisable 和 OnDestroy。这些函数的作用和调用顺序在图中用不同的颜色标注了出来,绿色表示开始,黄色表示中间,红色表示结束。
OnWillRenderObject 是一个 MonoBehaviour 的函数,它在每个摄像机如果物体可见的情况下被调用一次。这个函数是在裁剪过程中,在渲染所有被裁剪的物体之前被调用的。你可以使用这个函数来创建依赖的渲染纹理,如果你只想在渲染的物体真正可见的时候更新渲染纹理
OnGUI 是一个 MonoBehaviour 的函数,它是用来实现和处理 IMGUI(Immediate Mode GUI)系统的。IMGUI 是一种用于渲染和处理 GUI 事件的系统,它不需要创建和保存 GUI 元素的对象,而是直接在每一帧中绘制和响应 GUI 元素。OnGUI 函数会在每一帧中被多次调用,每次调用都对应一个 GUI 事件。你可以在 OnGUI 函数中使用 Unity 提供的一些 IMGUI 控件,如按钮、滑动条、文本框等,来创建你想要的 GUI 界面。你也可以重写 OnGUI 函数,来自定义你的 GUI 逻辑和效果。
yield WaitForEndOfFrame 是一个 Unity 提供的一个特殊的对象,它可以用在协程(Coroutine)中,来实现在每一帧的最后时刻执行一些操作。协程是一种可以在多个帧中分段执行的函数,它可以使用 yield 语句来暂停和恢复执行。yield WaitForEndOfFrame 会让协程在所有的摄像机和 GUI 渲染完毕,就在显示帧到屏幕之前恢复执行。你可以使用它来读取屏幕的内容到一个纹理中,编码成一个图片文件(参见 Texture2D.ReadPixels 和 Texture2D.EncodeToPNG),并发送到某个地方