这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战
一,初始化
1.1 函数描述
运行状态初始化:(也是执行顺序)
- Awake:初始化时调用,在Start函数之前调用
- OnEnable:在对象启用时调用
- Start:仅当启用脚本实例时,才会在第一帧调用
编辑器状态初始化:
- Reset:编辑器下调用,当脚本第一次附加到物体上或者点击Reset时执行,来初始化脚本属性。
实际应用:
- Awake:通常使用为需要提前初始化的逻辑。比如单例赋值
private void Awake(){Instance = this;}。 - OnEnable:处理每次显示时都需要进行初始化的逻辑,通常和OnDisable配合使用。
比如: 游戏逻辑使用并修改了变量
Number,而下次显示时使用是又需要Number = 1,此时就可以写private void Awake(){Number = 1;}。 - Start:通常使用为一些变量初始化逻辑。
比如:获取指定物体:
private void Start(){child1 = transform.GetChild(0);} - Reset:通常在游戏测试调试时,使用编辑器下的初始化。通过点击Reset执行一个逻辑。
1.2 示例解析
运行状态初始化示例: 搭建场景新建两个UI -> Image,一个作为背景,一个作为弹窗。新建脚本并挂载到弹窗Image上。
脚本内容如下:
using UnityEngine;
public class LifeCycleFunction : MonoBehaviour
{
#region Initialization 初始化
public int Number = 1;
private void Awake()
{
Debug.Log("Awake 初始化时调用,在Start函数之前调用,...");
}
private void OnEnable()
{
Debug.Log("OnEnable 每次对象启用都会被调用...");
}
private void Reset()
{
Number = 0;
Debug.Log("Reset 编辑器模式下才可被调用...Number: " + Number);
}
private void Start()
{
Debug.Log("Start 仅当启用脚本实例时,才会在第一帧调用...");
}
#endregion
}
此次运行结果展示了Awake,OnEnable,Start 的执行顺序,运行结果:
编辑器下的初始化:
1.脚本拖拽附加时自动执行
2.点击Reset调用: 可以看到我手动Number设置为2,Reset后被重置为代码中写的0;
二,更新
2.1 函数描述
三个函数:
- FixedUpdate:固定时间调用,FixedUpdate通常比Update更频繁地调用
- Update:每帧调用一次
- LateUpdate:在Update完成后,每帧调用一次
实际应用:
- FixedUpdate:所有物理计算和更新都在FixedUpdate中处理。它是固定时间调用,不会受到帧率影响。比如:一些物理属性的更新操作Force,Collider,Rigidbody等。
- Update:每帧调用一次,根据帧率的快慢影响执行速度。通常的游戏逻辑都写在这里,比如:和玩家交换,当用户按下空格时进行执行什么操作。
- LateUpdate:每次Update完成后调用移除。常见用处是相机跟随主角,比如:主角在Update中移动,则可以在LateUpdate执行相机的移动,这将可以保证摄像机跟着的时候之前的逻辑一起完全执行完成。
2.2 示例解析
将如下脚本添加到上面新建的脚本中:(为了方便查看,将上面初始化的函数先注释掉)
#region 更新
// 固定时间调用,FixedUpdate通常比Update更频繁地调用
private void FixedUpdate()
{
Debug.Log("FixedUpdate 固定时间调用...");
}
// 每帧调用一次
private void Update()
{
Debug.Log("Update 每帧调用一次...");
}
// 在Update后,每帧调用一次
private void LateUpdate()
{
Debug.Log("LateUpdate 在Update后,每帧调用一次...");
}
#endregion
运行后,可以看到结果如下:
三,禁用销毁
3.1 函数描述
三个函数:
- OnDisable: 当对象被禁用时调用此函数(其父物体被禁用也会触发)。
- OnDestroy: 在对象存在的最后一帧的所有帧更新之后调用此函数。
实际应用:
- OnDisable: 通常和OnEnable配合使用。比如:在OnEnable添加监听,在OnDisable移除监听
- OnDestroy: 当物体销毁或者场景关闭时触发。比如:子弹打到墙壁时,需要销毁子弹并触发一个打击音效。
3.2 示例解析
1.游戏物体禁用触发OnDisable
2.游戏物体销毁时触发OnDisable和OnDestroy
Unity 官方图解: