Unity脚本生命周期

Unity脚本生命周期

脚本生命周期

Unity脚本生命周期_第1张图片
Unity脚本生命周期_第2张图片

  • 我们首先介绍 Reset 函数,使用 Unity 编辑器将脚本绑定到游戏对象时,编辑器调用 Reset 函数。接下来下面游戏运行时脚本函数的调用顺序。

  • 首先是初始化阶段

    • 第一个被调用的函数是 Awake 函数,它在脚本绑定到的游戏对象激活时执行。
      • 注意:即使包含 Awake 函数的脚本处于已禁用状态,该脚本中的 Awake 函数也会被 Unity 调用。
    • 初始化阶段第二个执行的函数是 OnEnable,当脚本启用时该函数执行一次。
    • 初始化阶段最后调用 Start 函数,它在 OnEnable 函数调用后执行。
      • 注意: Start 在每个场景中只执行一次;如果在场景中已经执行过 Start 函数,即使 OnEnable 函数再次执行,Start 函数也不会执行。
  • 初始化阶段完成后进入游戏脚本的循环阶段,首先介绍物理循环,物理循环用于处理游戏中与物理相关的逻辑。

    • FixedUpdate 函数是物理循环中最先执行的函数,它每隔固定时间执行一次。我们通常与把物理模拟有关的代码,写在 FixedUpdate 函数中,比如给游戏对象添加力。
    • 接下来是 OnTrigger 函数,它用于 Trigger 触发器检测 每隔固定时间检测一次。 触发器检测函数包括 OnTriggerEnter、OnTriggerStay、OnTriggerExit 分别在当物体进入、停留、离开 Trigger 触发器范围时执行。
    • 接下来是 OnCollision 碰撞检测函数,它用于 Collider 碰撞体的相关检测,每隔固定时间检测一次。 碰撞检测函数包括 OnCollisionEnter、OnCollisionStay、OnCollisionExit,当物体进入、停留、离开 Collider 碰撞体范围时执行。 OnTrigger 函数与 OnCollision 函数通常用于与碰撞检测有关的游戏逻辑。
  • 接下来是 OnMouse 函数,处理鼠标的输入事件。

  • 下面是游戏逻辑循环:

    • 首先执行 Update 函数,它在每帧执行一次,该函数主要处理游戏对象在游戏世界的行为逻辑,例如游戏角色的控制和游戏状态的控制。
    • 然后是 LateUpdate 函数,它也是每帧执行一次,在 Update 函数后执行。 在实际开发过程中 Update 函数与 LateUpdate 函数通常共同使用。例如在第三人称射击游戏中,我们在 Update 函数中处理玩家角色的移动,在 LateUpdate 函数中处理摄像机跟随玩家,这样能防止摄像机出现抖动现象。
    • 游戏逻辑程序循环结束后执行 OnGUI 函数。 OnGUI 函数每帧可执行多次,用于绘制 Unity 的图形用户界面。
  • 在脚本被禁用前,Unity 循环调用 PPT 中红色椭圆内的函数序列,实现游戏对象的正常更新 。脚本被禁用时,脚本跳出之前红色椭圆内的函数循环,调用 OnDisable 函数,等待下一个命令。 若重新启用脚本 脚本将从 OnDisable 函数跳转至 OnEnable 函数。跳转完成后,脚本按照生命周期中函数执行顺序,循环运行,直到下一次脚本被禁用。

  • 当脚本 被解除绑定时,Unity 调用 OnDestroy 函数,脚本的生命周期结束 。

多脚本执行顺序

游戏场景中往往存在多个 Unity 脚本,这些脚本都包含了 Unity 的事件函数,如 Start 函数和 Update 函数 假设有 ScriptA、 ScriptB、 ScriptC 三个脚本 如何确定这三个脚本的执行顺序?

  • 遵循一个栈的结构:最先绑定到场景对象中的脚本,最后执行。
  • MonoManager窗口可以用于管理脚本之间的执行顺序。
    • 值只代表优先级,不代表延迟。
    • 值越小,优先级越高,越早执行。
    • 值设为0,脚本将在Default Time执行,该脚本在列表中消失。
    • 优先级相等的脚本,采取默认的执行顺序,最先设置的脚本最后执行。

脚本调试

使用脚本在控制台输出相关信息:

Debug.Log();       //消息       
Debug.LogWarning();//警告
Debug.LogError();  //错误

reference:

基于Unity引擎的游戏开发基础:第四周

你可能感兴趣的:(游戏开发的一砖一瓦)