• Unity脚本生命周期 Day02


    何为脚本生命周期?

    Unity脚本从唤醒到销毁的过程。

    消息:当满足某种条件Unity引擎自动调用的函数。

    图表如下所示:

    初始阶段:

    1、Awake唤醒:

         当物体载入时立即调用1次;

         常用于在游戏开始前进行初始化,可以判断当满足某种条件执行此脚本this.enable = true

    2、OnEnable当可用:每当脚本对象启用时调用。

    3、Start开始

         物体载入且脚本对象启用时被调用1次。

         常用于数据或游戏逻辑初始化,执行时机晚于Awake。

    物理阶段:

    1、FixedUpdate固定更新:脚本启用后,固定时间被调用,适用于对游戏对象做物理操作,例如移动等。设置更新频率:“Edit”--> "Project Setting" --> "Time" --> "Fixed Timestep"值,默认为0.02.

    2、OnCollisionXXX碰撞:当满足碰撞条件时调用。

    3、OnTriggerXXX触发:当满足触发条件时调用。

    4、OnMouseEnter鼠标移入:鼠标移入到当前Collider时调用。

    5、OnMouseOver鼠标经过:鼠标经过当前Collider时调用。

    6、OnMouseExit鼠标离开:鼠标离开当前Collider时调用。

    7、OnMouseDown鼠标按下:鼠标按下当前Collider时调用。

    8、OnMouseUp鼠标抬起:鼠标在当前Collider上抬起时调用。

    游戏逻辑:

    1、Update更新:

           脚本启用后,每次渲染场景时调用,频率与设备性能及渲染量有关。

    2、LateUpdate延迟更新:

           在Update函数被调用后执行,适用于跟随逻辑。

    场景渲染:

    1、OnBecameVisible当可见:

           当Mesh Renderer在任何相机上可见时调用。

    2、OnBecameInvisible当不可见:

           当Mesh Renderer在任何相机上都不可见时调用。

    结束阶段:

    1、OnDisable当不可用:

           对象变为不可用或附属游戏对象非激活状态时此函数被调用。

    2、OnDestroy当销毁:

           当脚本销毁或附属的游戏对象被销毁时被调用。

    3、OnApplicationQuit当程序结束:

           应用程序退出时被调用。

     代码如下所示:

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. /// <summary>
    5. /// 脚本生命周期/必然事件/消息Message
    6. /// </summary>
    7. public class Lifecycle : MonoBehaviour
    8. {
    9. //脚本:.cs的文本文件 类文件
    10. // 附加到游戏物体中,定义游戏对象行为指令的代码
    11. //序列化字段 作用:在编辑器中显示私有变量
    12. [SerializeField]
    13. private int a = 100 ;
    14. //作用:在编辑器中隐藏字段
    15. [HideInInspector]
    16. public float b;
    17. [Range(0,100)]
    18. public int c;
    19. //属性:在编辑器中不能显示,通常在脚本中不写
    20. public int A
    21. {
    22. get { return this.a; }
    23. set { this.a = value; }
    24. }
    25. public Lifecycle()
    26. {
    27. Debug.Log("构造函数");
    28. //不要再脚本中写构造函数
    29. //不能在子线程中访问主线程成员
    30. //b = Time.time;
    31. }
    32. //***********初始阶段****************
    33. //执行时机:创建游戏对象 --> 立即执行1次(早于start)
    34. //作用:初始化
    35. private void Awake()
    36. {
    37. Debug.Log("Awark-"+Time.time+"-"+this.name);
    38. }
    39. //执行时机:创建游戏对象 -> 脚本启用 -> 才执行(1次)
    40. //作用:初始化
    41. private void Start()
    42. {
    43. Debug.Log("Start-"+Time.time+"-"+this.name);
    44. }
    45. //****************物理阶段*****************
    46. //执行时机:每隔固定时间(大概0.02s)执行1次。(时间可以修改)
    47. //适用性:适合对物体做物理操作(移动、旋转......),不会受到渲染影响
    48. private void FixedUpdate()
    49. {
    50. //渲染时间不固定(每帧渲染量不同、机器性能不同)
    51. //Debug.Log(Time.time);
    52. }
    53. private void OnMouseEnter()
    54. {
    55. Debug.Log("OnMouseEnter");
    56. }
    57. private void OnMouseDown()
    58. {
    59. Debug.Log("OnMouseDown");
    60. }
    61. //*************游戏逻辑*****************
    62. //执行时机:渲染帧执行,执行间隔不固定
    63. //适用性:处理游戏逻辑
    64. private void Update()
    65. {
    66. //向前移动1m
    67. //查看某一帧程序执行情况
    68. //启动调试 F5 --> 运行场景 --> 暂停 --> 在可能出错的行加断点 --> 单帧运行 --> 调试…… --> 停止调试 Shift + F5
    69. int a = 1;
    70. int b = 2;
    71. int c = a + b;
    72. }
    73. }

  • 相关阅读:
    MySQL 社区开源备份工具 Xtrabackup 详解
    数据通信——传输层TCP(可靠传输机制的滑动窗口)
    数据图表软件-FineReport控件简介
    【SpringCloud】-Ribbon负载均衡
    python 线程池ThreadPoolExecutor
    android10.0(Q) MTK 6765 user版本打开root权限
    数据分析学习及实用技巧 —— LF《数据分析集训营》
    Kotlin语法入门-数据类、伴生类、枚举类(9)
    圆柱模型分割
    ROS标定海康威视摄像头
  • 原文地址:https://blog.csdn.net/LOVE_Me__/article/details/125461863