Unity代码小知识2

必然事件含义

  • 必然事件又叫脚本生命周期,是unity自身的一套脚本运行规则如下图:Unity代码小知识2
  • 图中所有函数都为必然事件(生命周期)的特定函数,他们都有自己特定的名称与调用时间。
  • 图中所展示的也只是必然事件(生命周期)的一小部分,所有必然事件(生命周期)函数在API查询MonoBehaviour可见

常用的必然事件

  • 开始阶段:

    • Awake()函数:
      • 执行时间:创建游戏对象时立即执行
      • 作用:初始化
    • Start()函数:
      • 执行时间:创建游戏对象脚本时立即执行
      • 作用:初始化
  • 物理阶段(运行阶段):

    • FixedUpdate()函数:
      • 执行时间:脚本启用后不受渲染影响固定时间执行
      • 作用:适合对物体做物理操作(移动、旋转等)
    • Update()函数:
      • 执行时间:脚本启用后受渲染影响非固定时间执行
      • 作用:处理程序逻辑(为了常常做些简单的物理操作)
    • LateUpdate()函数:
      • 执行时间:Update执行后立即执行
      • 作用:处理程序跟随逻辑(为了常常做些简单的物理操作)
    • 渲染频率受计算机硬件的影响
  • 其它常用必然事件:

    • 输入事件:

      • OnMouseEnter():当鼠标进入到GUIElement(GUI元素)或Collider(碰撞体)中时OnMouseEnter()被调用
      • OnMouseExit():当鼠标不在GUIElement或Collider上时OnMouseExit()被调用
      • OnMouseDown():当鼠标在GUIElement或Collider上点击时OnMouseDown()被调用
      • OnMouseDrag(): 当鼠标在GUIElement或Collider上拖拽时OnMouseDrag()被调用
      • OnMouseOver():当鼠标在GUIElement或Collider上经过时OnMouseOver()被调用
      • OnMouseUp():
        • 当鼠标在GUIElement或Collider上抬起时调用OnMouseUp()
        • 在鼠标按下的同一GUIElement或Collider上,OnMouseUp()才调用[^1]
    • 场景渲染:

      • OnBecameInvisible():当renderer(渲染器)在任何相机上都不可见时调用OnBecameInvisible()
      • OnBecameVisible():当renderer(渲染器)在任何相机上可见时调用OnBecameVisible()
    • 物理碰撞:

      • OnCollisionEnter(Collision):当此collider/rigidbody触发另一个rigidbody/collider时,调用。

      • OnCollisionExit(Collision):当此collider/rigidbody停止触发另一个rigidbody/collider时调用

      • OnCollisionStay(Collision):当此collider/rigidbody触发另一个rigidbody/collider的每帧调用

    • 触发事件:

      • OnTriggerEnter(Collider) :当Collider(碰撞体)进入trigger(触发器)时调用
      • OnTriggerExit(Collider):当Collider(碰撞体)停止触发trigger(触发器)时调用
      • OnTriggerStay(Collider):当碰撞体接触触发器时,OnTriggerStay将在每一帧被调用
    • 结束阶段:

      • OnDisable() :当对象变为不可用或非**状态时此函数被调用
      • OnDestroy() :当脚本销毁或附属对象被销毁时此函数被调用
      • OnApplicationQuit() :在应用退出之前调用

初始化与必然事件的对比功能

  • Awake()与Start()函数:
    • 执行时间:Awake()早于Start()执行时间
    • 作用:初始化(放在其他地方初始化可能出现异常报错)
  • FixedUpdate()、Update()、LateUpdate()函数:
    • 只有FixedUpadate()不受渲染影响
    • LateUpdate()与Update()同帧执行
    • Update()函数实现物理操作跟随逻辑
      • 一般情况下:正常使用
      • 复杂情况下:可能会出现微小偏差,导致穿模、跟随延迟等情况