一、帧的概念

游戏的本质就是一个死循环,每一次循环处理游戏逻辑就会更新一次画面,之所以能看到画面在动,是因为切换画面的速度达到一定时,人眼就认为画面是流畅的。

  • 一帧就是执行一次循环

    image-20250418102906425
  • 个人多年游玩游戏来说,我最低只能接收60帧,不然会头晕。

  • Unity底层已经帮助我们做好了死循环,我们需要学习Unity的生命周期函数,利用它们做好规则来执行我们的游戏逻辑就行了。

二、生命周期函数的概念

所有继承MonoBehavior的脚本 最终都会挂载到Game Object上。

  • 生命周期函数 就是该脚本依附的GameObject对象从出生到消亡整个生命周期中会通过反射自动调用的一些特殊函数
  • Unity帮助我们记录了一个GameObject对象依附了哪些脚本。Unity会自动的得到这些GameObject对象,通过反射去执行一些固定名字的函数。

三、生命周期函数

注:生命周期函数的访问修饰符一般为private和protected

注:因为不需要外部去调用生命周期函数,都是Unity自己帮助我们调用的。

image-20250418104141693

1. Awake

当对象(自己这个脚本类对象)被 创建时才会调用。

  • 类似构造函数的存在 我们可以在一个类对象 该创建 时 进行一些初始化操作。

2. OnEnable

依附的GameObject对象每次激活时调用。

  • 对于我们来说 想要当一个对象被激活时 进行一些逻辑处理 就可以写在这个函数。

3. Start

  • 和Awake区别:
    • wake函数在对象初始化之后立刻就会调用,换句话说,对象初始化之后第一调用的函数就是Awake;而Start是在对象初始化后,第一次Update之前调用的,
    • 在 Start中进行初始化不是很安全,因为它可能被其他自定义的函数抢先。
    • Awake不管脚本是否enabled都会被调用;而Start如果对象被SetAcive(false)或者enabled= false了是不会被 调用的。
    • 如果对象(GameObject)本身没激活,那么Awake,Start都不会调用。

4. FixedUpdate

  • 它主要是用于 进行物理更新。
  • 它是每一帧的执行 但是 这里的帧 和游戏的帧有点不同。
  • 固定时间执行,间隔时间可以在project setting中的Time里去设置的。
  • 主要用于物理相关,如碰撞检测等。

5. LateUpdate

  • 一般是用于处理 摄像机位置相关内容的
  • Update和LateUpdate之间 ,Unity进行了一些处理,处理我们动画相关的更新。
  • 如果在摄像机变化后再去处理动画,可能会造成渲染错误