Unity基础 之 生命周期函数(一)

这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战markdown

一,初始化

1.1 函数描述

运行状态初始化:(也是执行顺序)编辑器

  1. Awake:初始化时调用,在Start函数以前调用
  2. OnEnable:在对象启用时调用
  3. Start:仅当启用脚本实例时,才会在第一帧调用

编辑器状态初始化ide

  1. Reset:编辑器下调用,当脚本第一次附加到物体上或者点击Reset时执行,来初始化脚本属性。

实际应用函数

  1. Awake:一般使用为须要提早初始化的逻辑。好比单例赋值 private void Awake(){Instance = this;}
  2. OnEnable:处理每次显示时都须要进行初始化的逻辑,一般和OnDisable配合使用。 好比: 游戏逻辑使用并修改了变量Number,而下次显示时使用是又须要Number = 1,此时就能够写private void Awake(){Number = 1;}
  3. Start:一般使用为一些变量初始化逻辑。 好比:获取指定物体:private void Start(){child1 = transform.GetChild(0);}
  4. Reset:一般在游戏测试调试时,使用编辑器下的初始化。经过点击Reset执行一个逻辑。

1.2 示例解析

运行状态初始化示例:   搭建场景新建两个UI -> Image,一个做为背景,一个做为弹窗。新建脚本并挂载到弹窗Image上。post

脚本内容以下:测试

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 的执行顺序,运行结果: ui

编辑器下的初始化: 1.脚本拖拽附加时自动执行this

2.点击Reset调用: 能够看到我手动Number设置为2,Reset后被重置为代码中写的0; spa


二,更新

2.1 函数描述

三个函数3d

  1. FixedUpdate:固定时间调用,FixedUpdate一般比Update更频繁地调用
  2. Update:每帧调用一次
  3. LateUpdate:在Update完成后,每帧调用一次

实际应用

  1. FixedUpdate:全部物理计算和更新都在FixedUpdate中处理。它是固定时间调用,不会受到帧率影响。好比:一些物理属性的更新操做Force,Collider,Rigidbody等。
  2. Update:每帧调用一次,根据帧率的快慢影响执行速度。一般的游戏逻辑都写在这里,好比:和玩家交换,当用户按下空格时进行执行什么操做。
  3. 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 函数描述

三个函数

  1. OnDisable: 当对象被禁用时调用此函数(其父物体被禁用也会触发)。
  2. OnDestroy: 在对象存在的最后一帧的全部帧更新以后调用此函数。

实际应用

  1. OnDisable: 一般和OnEnable配合使用。好比:在OnEnable添加监听,在OnDisable移除监听
  2. OnDestroy: 当物体销毁或者场景关闭时触发。好比:子弹打到墙壁时,须要销毁子弹并触发一个打击音效。

3.2 示例解析

1.游戏物体禁用触发OnDisable

2.游戏物体销毁时触发OnDisableOnDestroy


Unity 官方图解: 图解

相关文章
相关标签/搜索