何为脚本生命周期?
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当程序结束:
应用程序退出时被调用。
代码如下所示:
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- /// <summary>
- /// 脚本生命周期/必然事件/消息Message
- /// </summary>
- public class Lifecycle : MonoBehaviour
- {
- //脚本:.cs的文本文件 类文件
- // 附加到游戏物体中,定义游戏对象行为指令的代码
-
- //序列化字段 作用:在编辑器中显示私有变量
- [SerializeField]
- private int a = 100 ;
-
- //作用:在编辑器中隐藏字段
- [HideInInspector]
- public float b;
-
- [Range(0,100)]
- public int c;
-
- //属性:在编辑器中不能显示,通常在脚本中不写
- public int A
- {
- get { return this.a; }
- set { this.a = value; }
- }
-
- public Lifecycle()
- {
- Debug.Log("构造函数");
- //不要再脚本中写构造函数
- //不能在子线程中访问主线程成员
- //b = Time.time;
- }
-
- //***********初始阶段****************
- //执行时机:创建游戏对象 --> 立即执行1次(早于start)
- //作用:初始化
- private void Awake()
- {
- Debug.Log("Awark-"+Time.time+"-"+this.name);
- }
-
- //执行时机:创建游戏对象 -> 脚本启用 -> 才执行(1次)
- //作用:初始化
- private void Start()
- {
- Debug.Log("Start-"+Time.time+"-"+this.name);
- }
-
- //****************物理阶段*****************
- //执行时机:每隔固定时间(大概0.02s)执行1次。(时间可以修改)
- //适用性:适合对物体做物理操作(移动、旋转......),不会受到渲染影响
- private void FixedUpdate()
- {
- //渲染时间不固定(每帧渲染量不同、机器性能不同)
- //Debug.Log(Time.time);
- }
-
- private void OnMouseEnter()
- {
- Debug.Log("OnMouseEnter");
- }
-
- private void OnMouseDown()
- {
- Debug.Log("OnMouseDown");
- }
-
-
- //*************游戏逻辑*****************
- //执行时机:渲染帧执行,执行间隔不固定
- //适用性:处理游戏逻辑
- private void Update()
- {
- //向前移动1m
-
- //查看某一帧程序执行情况
- //启动调试 F5 --> 运行场景 --> 暂停 --> 在可能出错的行加断点 --> 单帧运行 --> 调试…… --> 停止调试 Shift + F5
- int a = 1;
- int b = 2;
- int c = a + b;
- }
- }