Unity之组件的生命周期

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

一、组件的概念

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

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


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

偷的表情包(手动狗头)

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


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

二、创建新组件并挂载

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

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

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

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

三、组件的生命周期函数

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

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Move: MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){}
}

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

3.1  Awake()

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

很简单接着往下看 

3.2 OnEnable()

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

看起来不难,但是这里的每次激活组件都会调用一次

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

3.3  Start()

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

我们来打印输出一下:

反复激活后可以看到 Start()只执行了一次。

3.4  Update()

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

可以看到我刚运行一会就打印了一千多次了

3.5 LateUpdate()

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

3.6 FixedUpdate()

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

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


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

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


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

3.7 OnDisable()

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

没错,就是大家想的那样,激活 OnEnable()就会执行一次,不激活OnDisable() 就会执行一次。

3.8 OnDestroy()

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

我们来移除组件:

移除后 OnDestory  就会打印出来了

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 updatevoid Start(){Debug.Log("Start");//Debug.Log("我是move脚本");}//每一帧都会调用一次,帧和电脑性能有关// Update is called once per framevoid 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脚本

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

 我们打印输出一下:设置的数值越小就越先执行

好了,到此本篇博客知识点全部讲完了,拜拜┏(^0^)┛ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/583906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【rosbag】rosbag命令--查看提取bag中的内容

1.查看消息 rosbag info --.bag topics是其中的话题内容,/imu中只写了包含imu的数据,但是imu是9轴的,到底磁力计信息是否包含在其中呢? 2.将bag中的某个话题转为txt 将file_name.bag文件中topic_name话题的消息转换到Txt_name.…

BIT-666 的 2023 年度总结

<<< 年度总结 >>> <<< 年度数据 >>> ◆ 发博情况 ◆ 学习成就 ◆ 代码提交 ◆ 博文表现 <<< 年度创作 >>> ◆ LLM - LLaMA2 <<< 年度风景 >>> ◆ 春 - 中关村软件园 - 百望山 ◆ 夏 - 乌兰…

Python开发一个电商平台历史价格查询软件

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境介绍: python 3.8 pycharm 专业版 第三方模块使用 requests ——> 发送 HTTP 请求 execjs ——> 用来执行JavaScript代码 pyecharts ——> 生成…

视频美颜sdk是什么?美颜sdk贴纸技术详解

如今&#xff0c;贴纸技术作为视频美颜的一个创新分支&#xff0c;为用户提供了更加丰富多彩的互动体验。本文将深入探讨视频美颜SDK中的贴纸技术&#xff0c;揭示其技术原理、应用场景以及未来发展趋势。 一、贴纸技术的背后&#xff1a;图像处理与人脸识别 这一步骤是实现贴…

关于IDEA中Git版本回滚整理

Git分区理解 git的版本回滚本质上就是回滚不同的分区&#xff0c;所以咱们有必要简单了解一下git的分区。git在本地有三大分区&#xff1a;暂存区、工作区、版本库。 暂存区: add后的代码&#xff0c;绿色。 **工作区&#xff1a;**正在编写&#xff0c;还未add的部分&#…

【Vue】事件修饰符详解

✨ 专栏介绍 在当今Web开发领域中&#xff0c;构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架&#xff0c;正是为了满足这些需求而诞生。它采用了MVVM架构模式&#xff0c;并通过数据驱动和组件化的方式&#xff0c;使…

【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean)

文章目录 &#x1f354;Bean的获取&#x1f384;注入IOC容器对象⭐代码实现&#x1f6f8;根据bean的名称获取&#x1f6f8;根据bean的类型获取&#x1f6f8;根据bean的名称和类型获取 &#x1f384;Bean的作用域⭐代码实现&#x1f388;注意 &#x1f384;第三方Bean⭐代码实现…

设计模式-对象池模式

设计模式专栏 模式介绍模式特点应用场景对象池模式和工厂模式的区别代码示例Java实现对象池模式Python实现对象池模式 对象池模式在spring中的应用 模式介绍 对象池模式是一种创建型设计模式&#xff0c;它将对象预先创建并初始化后放入一个池中&#xff0c;以供其他对象使用。…

IDEA 2022.2 安装教程

1.下载2020.3版本IDEA 链接&#xff1a;https://pan.baidu.com/s/1IFK8VRjT7vM2VM75ToveGQ?pwd176m 提取码&#xff1a;176m 2.安装 下载完成后&#xff0c;双击exe安装包&#xff0c;出现IDEA安装欢迎首页&#xff1a; 3.将 ja - netfiltet 文件复制到idea安装目录附件 …

云上攻防--云服务对象存储(域名接管)弹性计算(元数据泄露)

云上攻防–云服务&&对象存储(域名接管)&&弹性计算(元数据泄露) 目录标题 云上攻防--云服务&&对象存储(域名接管)&&弹性计算(元数据泄露)对象存储权限配置错误域名接管AK/SK泄漏&#xff1a; 弹性计算元数据泄露加固措施 对象存储 各个厂商对于…

纯CSS实现马里奥效果,回忆一下童年吧

&#x1f4e2; 鸿蒙专栏&#xff1a;想学鸿蒙的&#xff0c;冲 &#x1f4e2; C语言专栏&#xff1a;想学C语言的&#xff0c;冲 &#x1f4e2; VUE专栏&#xff1a;想学VUE的&#xff0c;冲这里 &#x1f4e2; CSS专栏&#xff1a;想学CSS的&#xff0c;冲这里 &#x1f4…

竞赛保研 基于大数据的股票量化分析与股价预测系统

文章目录 0 前言1 课题背景2 实现效果3 设计原理QTChartsarma模型预测K-means聚类算法算法实现关键问题说明 4 部分核心代码5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据的股票量化分析与股价预测系统 该项目较为新颖…

【每日一题】LeetCode206.反转链表

个人主页&#xff1a;白日依山璟 专栏&#xff1a;Java|数据结构与算法|每日一题 文章目录 1. 题目描述示例1示例2示例3提示 2. 思路3.代码 1. 题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例1 输入&#xff1a;head [1…

【笔记】Spring的事务是如何回滚的/Spring的事务管理是如何实现的

Spring的事务是如何回滚的/Spring的事务管理是如何实现的 数据库&#xff08;Spring事务&#xff09; 1、建立连接、开启事务&#xff08;准备工作&#xff09; 2、进行sql操作&#xff08;业务逻辑&#xff09; 3、执行成功&#xff0c;则commit&#xff1b; 执行失败&#x…

spellman高压发生器电源维修XRV450PN4500 NY1059

Spellman高压电源X射线发生器维修XRV系列常见维修型号&#xff1a;XRV160N1800, XRV160N3000, XRV160P4000, XRV160P6000/208V 3o, XRV225N3000, XRV225N6000/208V 3o, XRV225P4000, XRV350PN4500, XRV450PN4500。 Spellman所拥有的变频器架构可以使高压电源获得高利用率的效率…

为什么设计制造行业需要数据加密?

设计制造行业是一个涉及多种技术、工艺、材料和产品的广泛领域&#xff0c;它对经济和社会的发展有着重要的影响。然而&#xff0c;随着数字化、智能化和网络化的发展&#xff0c;设计制造行业也面临着越来越多的数据安全风险&#xff0c;如数据泄露、数据篡改、数据窃取等。这…

TSINGSEE青犀智能分析网关V4人体行为检测算法在视频监控中的应用

旭帆科技智能分析网关的算法十分繁多&#xff0c;其中可分为人体事件、车辆事件、环境事件、行为检测、着装检测等等&#xff0c;可覆盖绝大多数场景&#xff0c;如智慧校园、智慧工地、智慧景区等&#xff0c;今天小编就TSINGSEE青犀智能分析网关的行为检测算法和大家进行研讨…

Python 为UnityAndroid端自动化接入Tradplus广告SDK

Python 为UnityAndroid端自动化接入Tradplus广告SDK Tradplus介绍常规接入进入Android开发文档选择渠道配置生成接入代码人工依赖下载官网同版本的 Unity插件 使用自动化工具接入首次 你需要打两个标记来定位运行工具 控制台会列出最新的十个Tradplus版本 任选其一然后拖入项目…

如何利用PPT绘图并导出清晰图片

在写论文的过程中&#xff0c;免不了需要绘图&#xff0c;但是visio等软件绘图没有在ppt上绘图比较熟练&#xff0c;尤其流程图结构图. 但是ppt导出的图片也不够清晰&#xff0c;默认分辨率是96dpi&#xff0c;而杂志投稿一般要求至300dpi。解决办法如下&#xff1a; 1.打开注…

【Azure 架构师学习笔记】- Azure Databricks (4) - 使用Azure Key Vault 管理ADB Secret

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (3) - 再次认识DataBricks 前言 Azure Databricks有access token&#xff0c;是具有ADB内部最高权限的token。在云环境中这些高级别权限的sec…