当前位置:   article > 正文

初识Unity3DC#脚本开发-脚本生命周期_c#脚本的生命周期

c#脚本的生命周期

初识Unity3DC#脚本开发-脚本生命周期

首先,为了避免浪费一些同学的时间,我对本次博客的内容进行说明。(避免一些同学白花时间没有找到自己想看的东西)

本次博客的内容是:

1.介绍什么是脚本的生命周期。
2.挑出这写函数中最常用的一些,分阶段的对这些函数进行说明。
3.最后通过代码在unity3d引擎的控制台打印文字来实际证明以上我所说的生命周期执行顺序的正确性。

一、什么是脚本的生命周期

首先废话不多说上图:
在这里插入图片描述从图中可以看出所谓的脚本生命周期说通俗一点就是这个脚本从开始执行到被销毁着整个过程的函数执行次序和内循环逻辑。(我个人的一种理解方式)

二、在这个生命周期中我们常用的函数说明

常用函数:

初始化阶段

该阶段的函数从物体被创建开始只会执行一次

1、Awake()

Awake()函数执行时间是:绑定了该脚本的物体被创建时(无论是否启用该脚本)

2、Start()

Start()函数的执行时间是:绑定了该脚本的物体被创建且脚本启用时

对比Awake和Start方法只需要在分别将脚本勾选和取消勾选即可知道他们的差别
  • 1

物理循环阶段

该阶段的适用于物体做物理操作,且不会受到机器渲染性能的影响,固定执行频率

1、FixedUpdate()

执行时间初始化阶段之后,游戏逻辑循环之前

常见的鼠标输入事件

这些脚本都是玩家对被绑定脚本做操作时,且物体上拥有Collider碰撞器组件时执行

1、OnMouseDown()

鼠标点击事件,鼠标点击该物体时执行

2、OnMouseOver()

鼠标经过事件

3、OnMouseExit()

鼠标移开事件

4、OnMouseUp()

鼠标抬起

游戏逻辑循环阶段

该阶段的函数都受机器渲染性能影响执行频率

1、Update()

每帧调用一次

2、LateUpdate()

每帧调用一次,与Update函数同帧,且在Update函数之后调用

结束阶段

1、OnDisable()

该函数当对象为不可用或者附属游戏对象非激活状态是此函数被调用

2、OnDistroy()

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

3、OnApplicationQuit()

当应用程序结束时被调用

我想额外说明的函数

这些函数需要物体有Mash Renderer组件才会被调用,因为如果物体没有Mash Renderer组件是不可见的。

1、OnBecameVisible()

当摄像机看见挂有该脚本的物体时会自动调用该方法

2、OnBecameInVisible()

当摄像机看不见挂有该脚本的物体时会自动调用该方法

三、通过程序来证明以上我所说明的顺序

局部的顺序

1、初始化阶段

Awake在Start函数之前执行

    //初始阶段:游戏物体创建执行
    private void Awake()
    {
        Debug.Log("Awake--"+Time.time);
    }

    //初始阶段:游戏物体创建脚本启用执行
    private void Start()
    {
        Debug.Log("Start--" + Time.time);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

结果如下:在这里插入图片描述Start函数与Awake函数的区别:
我们先将脚本激活状态和物体激活状态取消勾选,执行程序:
在这里插入图片描述在这里插入图片描述在这里插入图片描述点击物体激活:
在这里插入图片描述在这里插入图片描述点击脚本激活:
在这里插入图片描述在这里插入图片描述

2、物理阶段和游戏逻辑阶段

//物理阶段
    //固定时间执行,摆脱了电脑性能约束
    //适用时机:地物体做物理操作(移动、旋转。。。),不会受到渲染影响
    private void FixedUpdate()
    {
        Debug.Log("FixedUpdate--" + Time.time);
    }
    
    //游戏逻辑阶段
    //执行时间:渲染帧执行,受到电脑性能约束
    //适用性:处理游戏逻辑
    private void Update()
    {
        Debug.Log("Update--" + Time.time);
    }
    
    //执行时间:再update之后马上执行
    //适用性:用于跟随逻辑
    private void LateUpdate()
    {
        Debug.Log("LateUpdate--" + Time.time);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

结果如下:
在这里插入图片描述可以看到FixedUpdate在Update函数之前执行且每个0.02秒固定时间执行一次,而Update函数因为机器性能在0.04秒没有执行,甚至还会因此出现多次执行FixedUpdate再执行Update的情况,如下图:
在这里插入图片描述

整体的顺序

我们在程序中加上一个函数:

	//当对象为不可用或者附属游戏对象非激活状态是此函数被调用
    private void OnDisable()
    {
        Debug.Log("OnDisable");
    }
  • 1
  • 2
  • 3
  • 4
  • 5

然后执行程序执行过程中将对象激活状态关闭:
在这里插入图片描述
结果如下:
在这里插入图片描述
执行顺序如下:Awake-Start-(FixedUpdate循环-(Update-LateUpdate循环))
将物体设为未激活时:在这里插入图片描述FixedUpdate循环-Update-LateUpdate循环-OnDisable

总结

就这样通过这次学习我把unity脚本的生命周期常用的函数大概的滤了一遍,并通过代码证明了这个生命周期的执行顺序确实是如流程图所示。
其实还有几个常用的鼠标事件和OnBecameXXX函数我在私底下也试过了,但是由于过程比较无聊无非就是写一下函数,点点移移的比较简单就没有在博客中进行描述。
由于初识脚本编程,所以只能够通过这种打印文字的方式来证明脚本生命周期,确实有点可惜。
在这之后我会进一步学习Unity3d的脚本编程,比如改变对象的位置、角度、大小等等等。然后再学习游戏人工智能的编程,争取通过自己的学习实现智能的游戏AI。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/108379
推荐阅读
相关标签
  

闽ICP备14008679号