目录
一、前言
我们在创建脚本文件的时候,经常可以看到创建出来的代码类中不仅继承了MonoBehaviour
类,还实现了一些生命周期方法,有两个方法你肯定见过,就是:Start()
和 Update()
。
没错,他们就是MonoBehaviour
类中的生命周期函数,负责在游戏的各个阶段执行特定的逻辑。除了最最常见的这两个方法之外其实还有其他的方法,下面我们就对所有的生命周期方法进行一个讲解。
二、生命周期
我们还是先了解一下什么是生命周期?(会的话可以直接跳过看生命周期函数)
简单理解通俗来讲就是一个事物从出生到死亡的过程。这就是一个周期,从生到死,然后投胎重生开始一个新的周期。那么同样,代码脚本或者说游戏同样也有一个周期,从创建到销毁、从启动到关闭,这也是下面我们要说的东西。
生命周期函数还有一种叫法,就是:钩子(Hook)。钩子函数、生命周期钩子、生命周期函数其实都是指的同一个东西。
为什么叫钩子?钩子这一称呼怎么来的?且看:
“钩子”(Hook)这个术语在计算机编程中广泛使用,它来源于英文单词 “hook”,原意是指钩子或挂钩,用于挂东西。
在编程领域,"钩子"这个概念借鉴了物理钩子的特性,即它可以挂载或连接其他东西,从而在不修改原有系统或组件的情况下,增加或改变其行为。
总结:“钩子"这个术语直观地描述了这些函数的作用,即它们"钩住"了软件执行流程的特定点,允许执行额外的代码。所以叫"钩子”!
三、周期函数
在Unity的MonoBehaviour脚本有一系列的生命周期函数,这些函数按照特定的顺序在游戏的各个阶段被调用。下面我们同样也按照生命周期的顺序来说明函数。
1. Awake()
- 在加载脚本实例时调用,用于初始化。
- 在所有对象的Start()方法之前调用。
- 即使脚本未启用,也会调用。
2. OnEnable()
- 当对象变为启用状态时调用。
- 可以在脚本实例的整个生命周期中被多次调用。
3. Start()
- 在首次调用Update()之前调用一次。
- 用于在游戏开始时进行初始化。
4. FixedUpdate()
- 用于物理更新,按照固定的时间间隔(由Time.fixedDeltaTime定义)调用。
- 适用于处理Rigidbody和物理相关的操作。
5. Update()
- 每帧调用一次,用于执行大多数游戏逻辑。
6. LateUpdate()
- 在Update()之后,所有帧更新完成后调用。
- 适用于需要在所有Update()调用完成后执行的逻辑,例如跟随相机。
7. OnDisable()
- 当对象变为禁用状态时调用。
- 用于清理,例如禁用对象时停止协程。
8. OnDestroy()
- 当销毁对象时调用。
- 用于清理,例如释放资源。
四、其他函数
除了上面的生命周期函数还有一些其他的函数,个人角色这些个函数方法不属于生命周期,所以就另开一个放到了这里。
虽然这些函数不属于生命周期,但是使用的频率也是挺高的,写出来的目的是让大家知道有这么个东西,后面开发有需要的时候知道有这个东西可以直接拿来用。这里我就挑几个不太常用的或者一眼看过去不知道怎么使用的函数方法,写一下使用的示例。
1. OnGUI()
- 在渲染和处理GUI事件时调用。
- 用于绘制和处理GUI元素。
private string inputString = "Default Text";
void OnGUI()
{
// 创建一个文本输入框,用户输入的文本将存储在inputString变量中
inputString = GUI.TextField(new Rect(10, 10, 200, 20), inputString);
// 创建一个按钮,当用户点击时,打印输入框中的文本
if (GUI.Button(new Rect(10, 40, 100, 30), "Print Text"))
{
Debug.Log(inputString);
}
}
2. OnValidate()
- 当脚本属性在检查器中被修改时调用。
- 用于验证和初始化属性。
private void OnValidate()
{
Refresh();
}
private void Refresh(){
Debu.Log("刷新");
//一些逻辑,比如初始化、刷新UI尺寸等等
}
3. Reset()
- 当在检查器中点击“Reset”按钮时调用。
- 用于将脚本属性重置为默认值。
除此之外,还有其他一些特定用途的函数,主要用于处理物理交互,在不同的触发条件下被调用:
- OnCollisionEnter(Collision): 当碰撞体开始接触另一个碰撞体时调用。
- OnCollisionStay(Collision): 当碰撞体持续接触另一个碰撞体时每帧调用。
- OnCollisionExit(Collision): 当碰撞体停止接触另一个碰撞体时调用。
- OnTriggerEnter(Collider): 当触发器进入另一个触发器或碰撞体时调用。
- OnTriggerStay(Collider): 当触发器持续在另一个触发器或碰撞体内时每帧调用。
- OnTriggerExit(Collider): 当触发器离开另一个触发器或碰撞体时调用。
结语
以上就是MonoBehaviour中的生命周期函数,如果有什么问题欢迎在评论区留言或者私信都可以,这期内容就到这里,下期见,拜拜!