Unity之组件的生命周期

这篇具有很好参考价值的文章主要介绍了Unity之组件的生命周期。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PS:第二天,依旧在摸鱼学unity

一、组件的概念

我本身是由Web后端转到了游戏后端,最近因为工作原因在学ET框架。学到了 ECS 编程模式开发(E —— Entity,C —— Component , S —— System)实体、组件、逻辑开发。

我是这么理解的:组件是挂载到实体上的,组件中记录了实体所需要的数据,然后实体的业务和行为在逻辑里编写。


举个例子:关羽拿青龙偃月刀斩了颜良,这里关羽看做实体,青龙偃月刀作为组件挂载在关羽身上,斩颜良是实体关羽所做出来的行为动作。

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎偷的表情包(手动狗头)

 那么问题来了:关羽可以拿刀砍人;我可以拿刀砍人;在看博客的你也可以拿刀砍人,难不成每次写程序都要新写一个刀组件?


写程序就要学会偷懒,游戏引擎的开发者们就把一些可以共用的组件抽出来,比如Unity里的Box Collider  ——  碰撞组件、Rigidbody  ——  重力组件(刚学Unity第二天一共就知道这俩 —— doge.jpg)

二、创建新组件并挂载

说到这里大家大概明白什么是组件了吧,这里我们创建一个新组件。在项目一栏的空白处点击鼠标右键创建一个C#脚本,我这里给它命名为Move。

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

如果我们想把组件添加到实体上,我目前知道的有三种方式

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

 或者点击添加组件按钮进行搜索

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

 这样我们就把组件挂到实体上了。

三、组件的生命周期函数

说完了怎么挂载组件我们正式进入正题,来谈谈组件的生命周期。所谓生命周期就是一个事物由创建到销毁的全过程。

我们双击打开创建好的C#脚本,它会打开编辑器,我这里用的是visual studio,打开后会看到下边这段代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move: MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
       
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

 这里的  Start()Update() 是生命周期中的两种函数,此外还有 Awake() 、OnEnable() 、LateUpdate() FixedUpdate() 、OnDisable() 、OnDestroy()   ,一共八种,我们来看一下这些生命周期函数。

3.1  Awake()

Awake  ——  唤醒,这是当组件挂载在实体上第一个要执行的函数,庆祝诞生。我们来把 Debug.Log("awake");   的注释解开在控制台打印输出一下看看。

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎很简单接着往下看 

3.2 OnEnable()

OnEnable()  函数在Awake执行之后执行,每次激活组件都会调用一次,打印一下Log日志

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎看起来不难,但是这里的每次激活组件都会调用一次

每次激活??都会调用一次?? 来详细看,这个Move脚本旁边的   “√”   勾上就是激活,不勾就是不激活,我们反复勾一下可以看到下边控制台  awake  只执行了一次,而  OnEnable  执行了多次,这就是所谓的  每次激活组件都会调用一次。

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

3.3  Start()

 调用时机是第一次 OnEnable() 调用之后,只调用一次

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎我们来打印输出一下:

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎反复激活后可以看到 Start()只执行了一次。

3.4  Update()

Update() 每帧都会调用一次,帧数就是在1秒钟时间里传输的图片的数量 和电脑的性能有关

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎可以看到我刚运行一会就打印了一千多次了

3.5 LateUpdate()

LateUpdate(),看函数名就能猜出大概的作用,在 Update() 函数执行之后执行

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

3.6 FixedUpdate()

FixedUpdate()  每隔固定的时间间隔都会运行一次,和帧无关。

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

我第一次学这个函数的时候差点和  Update()  混了。


举个例子: 当用 Update() 函数的时候,关羽每秒可以砍 60 个人,而我每秒只能砍一个人还差点被反杀。

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

而当用  FixedUpdate()  函数的话我和关羽每秒砍的人数就一样了   约等于   我和关羽一样强(doge.jpg)


FixedUpdate() 函数默认每隔0.02秒执行一次。这里我们可以修改执行的时间间隔  ——  在unity界面上边菜单栏里  编辑——》 项目设置 ——》 时间 ——》 固定时间步进

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

3.7 OnDisable()

非激活状态下调用一次,和OnEnable是相对的关系。OnEnable()  函数懂了大家这个也就懂了吧😃,我们反复激活,来打印输出一下看看

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎没错,就是大家想的那样,激活 OnEnable()就会执行一次,不激活OnDisable() 就会执行一次。

3.8 OnDestroy()

终于最后一个函数了,当组件销毁的时候被调用,比如进行移除组件操作,要死了写遗书。

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

我们来移除组件:

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

移除后 OnDestory  就会打印出来了

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour
{
    //组件挂载在实体上第一个执行的函数,庆祝诞生
    private void Awake()
    {
        Debug.Log("awake");
    }

    //在Awake执行之后执行,每次激活组件都会调用一次
    private void OnEnable()
    {
        Debug.Log("OnEnable");
    }

    //唯一调用的,调用时机是第一次 OnEnable 调用之后
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("Start");
        //Debug.Log("我是move脚本");
    }

    //每一帧都会调用一次,帧和电脑性能有关
    // Update is called once per frame
    void Update()
    {
        //Debug.Log("Update");
    }

    //Update每次执行完都会跟着执行一次
    private void LateUpdate()
    {
        //Debug.Log("LateUpdate");
    }

    //和帧无关,每隔固定的时间间隔都会运行一次,默认每隔0.02秒执行一次
    //在unity界面上边菜单栏里  编辑——》 项目设置 ——》 时间 ——》 固定时间步进
    private void FixedUpdate()
    {
        //Debug.Log("FixedUpdate");
    }

    //非激活状态下调用一次,和OnEnable是相对的关系
    private void OnDisable()
    {
        Debug.Log("OnDisable");
    }

    //当组件销毁的时候被调用,比如进行移除组件操作,要死了写遗书
    private void OnDestroy()
    {
        Debug.Log("OnDestroy");
    }
}

四、组件的执行顺序问题

通过组件的生命周期函数我们知道了8个方法在什么情况下会执行以及执行的顺序,那么组件与组件之间的执行顺序呢?   这是我们通过设置脚本执行顺序来控制的

我们再来创建一个脚本组件test,分别在Start方法里Log输出一下我是test脚本  和  我是Move脚本

然后把这两个组件挂载在同一个实体上,然后对执行顺序进行设置。

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎 我们打印输出一下:设置的数值越小就越先执行

Unity之组件的生命周期,摸鱼学Unity,unity,游戏引擎

好了,到此本篇博客知识点全部讲完了,拜拜┏(^0^)┛ 文章来源地址https://www.toymoban.com/news/detail-781559.html

到了这里,关于Unity之组件的生命周期的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity学习笔记】生命周期

    官方文档:事件函数的执行顺序 如图: 脚本的生命周期主要经历以下几个阶段: 初始化阶段,(包括初始化Awake,OnEnable,然后Editor的Reset被穿插在着初始化过程之间,因此我们可以在脚本里重写Reset方法,这将在编辑器中的game的start之前执行。最后Start),当我们开始游戏的

    2024年02月14日
    浏览(28)
  • Unity-生命周期

    Unity 中,有一个特别重要的知识点,生命周期函数。这些东西全部都是系统定义好的,运行时自动调用,但需要继承 MonoBehaviour 类才能使用。这个类是从 Unity 中创建脚本就自动继承了。 正是因为继承了 MonoBehaviour 这个类,Unity 才能依次调用我们的脚本代码,执行游戏逻辑。

    2024年02月03日
    浏览(27)
  • Unity 脚本的生命周期

    Unity 脚本的生命周期有哪些?什么时机会触发/执行?什么时候用? 手册 Unity 手册地址 生命周期 初始化 方法说明: Awake:当物体载入时立即调用一次,在 Start 函数之前调用。 OnEnable:在脚本对象启用时调用。 Start:仅当启用脚本实例时,才会在第一帧调用。 Reset:编辑器下

    2024年04月09日
    浏览(60)
  • 【Unity】一文了解生命周期

    又新开一个坑,这个系列主要是记录Unity的干货,就不像之前那几个有点口水话了233 当然我会改正 时隔半个月 经历了开学 换教室等等一系列杂七杂八的事情也算步入正轨了~ 没杂七杂八的介绍什么,不水字数,直接开干!(暴论) 编写顺序会严格按照真实的生命周期顺序

    2023年04月22日
    浏览(25)
  • 【Unity函数执行顺序(Unity脚本生命周期函数)】

    温故而知新,下面我将介绍Unity入门需要了解的常用生命周期函数 生命周期函数就是该脚本对象依附的GameObject对象从出生到消亡整个生命周期中 会通过反射自动调用的一些特殊函数。 下面是对各个函数解锁 a.调用情况: 1.在加载场景时初始化包含脚本激活状态的GameObject时。

    2023年04月23日
    浏览(41)
  • unity 打砖块—休闲小游戏,摸鱼必备(完整代码)

    打砖块小游戏通常会被当做Unity学习的第一个案例,下面给大家介绍如何实现打砖块案例的    建立cube,大体这个样子,可以建造自己喜欢的形状和颜色。 给正方形的cube添加刚体  将摄像机的位置对准创建的物体 创建一个“子弹”,添加钢体,然后拖动到文件夹,变成预设

    2023年04月08日
    浏览(39)
  • Unity MonoBehaviour事件函数的生命周期

    Unity运行时候的默认的几个函数的执行顺序: 首先是Awake,OnEnable,Start等,后面是FixUpdate Update 最后是OnDisable、OnDestroy

    2024年02月10日
    浏览(35)
  • unity的函数生命周期以及静态生成方法

    前段时间毕业了,到处跑着玩,玩傻了之后入职了又摸了一个多月鱼~收收心了,近期的学习计划是下半年入门图形学,九月中旬把线性代数学完,所以unity和游戏开发的文章还是很少更新了,等后期学习图形学再慢慢更新和学习记录吧,中间工作中遇到的一些问题还是会记录

    2024年02月03日
    浏览(28)
  • Unity 关于生命周期函数的一些认识

    Unity 生命周期函数主要有以下一些: Awake() : 在脚本被加载时调用。用于初始化对象的状态和引用。 OnEnable() : 在脚本组件被启用时调用。在脚本组件被激活时执行一次,以及在脚本组件被重新激活时执行。 Reset() : 在脚本组件被重置时调用。用于重置脚本的初始状态。 Start

    2024年01月21日
    浏览(41)
  • Unity中常见的脚本生命周期函数及顺序

    以下是Unity中常见的脚本生命周期函数的顺序: Awake():当对象被创建时调用,用于初始化对象的引用和状态。 OnEnable():在对象变为激活状态时调用,用于进行初始化操作。 Start():在 Awake 之后调用,用于在对象被启用前进行初始化操作。 FixedUpdate():固定的时间间隔(一般

    2024年02月06日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包