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更新:

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

       循环调用,每帧调用一次,一秒钟大概执行60次。

        帧:我们的游戏画面是在不停的刷新的,每刷新一次,就是一帧。

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;
    }
}

猜你喜欢

转载自blog.csdn.net/LOVE_Me__/article/details/125461863