Unity-生命周期函数

目录

生命周期函数是什么?

生命周期函数有哪些?

Awake()

OnEnable()

Start()

FixedUpdate()

Update()

Late Update()

OnDisable()

OnDestroy()

Unity中生命周期函数支持继承多态吗?


生命周期函数是什么?

在Unity中,生命周期函数(Lifecycle Function)是指一组特定的函数,它们会在游戏对象或脚本组件的生命周期中被自动调用。这些函数可以让我们在游戏运行的不同阶段做出相应的响应和处理,例如初始化、更新、销毁等。

生命周期函数有哪些?

下面是一些常见的生命周期函数及其作用:

1. `Awake()`:该函数在游戏对象或脚本组件被创建时调用,用于进行初始化操作。通常在该函数中获取组件引用、设置默认值等。

2.`OnEnable()`:该函数用于在对象被启用时执行。具体来说,当一个脚本组件被添加到一个游戏对象上,或者该游戏对象被激活时,都会触发该组件的OnEnable函数。

3. `Start()`:该函数在游戏对象或脚本组件第一次被启用时调用,用于进行一些初始化操作。通常在该函数中进行游戏开始前的准备工作、设置初始状态等。

4. `FixedUpdate()`:该函数在一定时间间隔后(通常为0.02秒)调用,用于更新游戏对象或脚本组件的物理属性。通常在该函数中进行物理模拟、刚体操作等。

5. `Update()`:该函数在每一帧更新时调用,用于更新游戏对象或脚本组件的状态。通常在该函数中进行游戏逻辑的处理、数据的更新等。

6.LateUpdate():LateUpdate()是一个生命周期函数,它在Update()函数之后被调用,用于在Update()函数执行完毕后更新游戏对象的逻辑和状态。

6. `OnDisable()`:在Unity中,OnDisable() 是游戏对象的生命周期函数之一,用于处理对象失活时的逻辑。当游戏对象失活时,Unity会自动调用 OnDisable() 函数。

7. `OnDestroy()`:该函数在游戏对象或脚本组件被销毁时调用,用于进行资源释放、清理等。通常在该函数中释放内存、关闭文件句柄等。

生命周期函数让我们可以方便地在游戏运行的不同阶段进行处理和响应,从而实现更加灵活的游戏逻辑。需要注意的是,如果我们不继承自MonoBehaviour类,则无法使用Unity的生命周期函数。

还有,生命周期函数一般被定义为protected或private,而不是public。

Awake()

关键字:初始化

当对象(自己这个类对象被创建时),才会调用该周期函数。

具体来说,当你在Unity中创建一个新的对象,例如一个游戏物体或是一个脚本挂载的组件,该对象会在内存中被实例化。在实例化过程中,对象的构造函数会被调用,然后在构造函数之后,Awake()函数会被自动调用。

Awake()函数的作用是在对象被创建后,但在场景中启用和激活之前进行必要的初始化和设置。可以在Awake()函数中执行一些需要提前完成的操作,例如变量的初始化、注册事件监听器、获取其他组件的引用等。这样,在Start()函数和Update()函数等后续的生命周期函数中,就可以使用已经初始化好的数据了。

总结起来,Awake()函数是用来在对象被创建时进行初始化的生命周期函数,它在构造函数之后被调用,用于准备对象在场景中使用所需的数据和状态。

OnEnable()

关键字:激活

在Unity游戏引擎中,OnEnable()是一个生命周期函数,用于在对象被启用时执行特定的操作。

当一个对象从非激活状态变为激活状态时(例如,在对象被创建、场景加载、禁用后重新启用等情况下),Unity会自动调用OnEnable()函数。

当一个对象被启用时,它会先调用Awake()函数进行初始化,然后调用OnEnable()函数进行进一步的准备工作。

通常,OnEnable()函数用于注册事件监听器、进行资源加载、启动协程、打开文件或网络连接等需要在对象激活时进行的操作。

与Awake()函数不同,OnEnable()函数每次对象激活时都会被调用,可以用来处理需要在对象每次激活时执行的逻辑。这样,在对象被禁用再重新启用时,可以确保所需的操作得到正确执行。

需要注意的是,OnEnable()函数在对象第一次被创建时也会被调用,因此在编写代码时应该注意处理好初始化和重复执行的逻辑。

总结,OnEnable()是Unity中的一个生命周期函数,用于在对象被启用时进行特定的操作。它可以用来执行在对象激活时需要执行的逻辑,如注册事件、加载资源等。

Start()

关键字:一次

Start()是一个生命周期函数,用于在对象被启用后的第一次帧开始时执行初始化操作。一个对象只能调用一次

当对象被启用后,首先会调用Awake()函数进行基本的初始化,然后在下一帧开始时调用Start()函数,进行进一步的初始化操作。

通常,我们将在Start()函数中进行一些需要在对象第一次启动时进行的操作,例如设置初始状态、初始化变量、获取其他组件的引用等。

Start()函数只在对象第一次启动时被调用,它不会被再次触发。这意味着,在对象重新激活时(例如场景切换回来或对象被禁用再启用),Start()函数不会再次执行。如果需要每次对象激活时都执行一些逻辑,应该使用OnEnable()函数。

需要注意的是,Start()函数的执行顺序是根据对象在场景中的顺序决定的。如果存在多个对象挂载了相同的脚本,并且这些对象在场景中的顺序不同,它们的Start()函数将按照场景中的顺序依次执行。

总结起来,Start()是Unity中的一个生命周期函数,用于在对象被激活后的第一帧开始时进行初始化操作。它用于执行需要在对象第一次启动时进行的逻辑,只会在对象第一次激活时被调用。

Start()和OnEnable()是Unity中常用的两个生命周期函数,它们在对象激活时分别执行不同的操作,有以下区别和联系:

1. 触发时机:
   - Start():在对象第一次被激活后的下一帧开始时调用,只会执行一次。
   - OnEnable():在对象被启用时调用,包括对象第一次被创建、场景加载、禁用后重新启用等情况,每次对象激活时都会被调用。

2. 执行顺序:
   - Start():根据对象在场景中的顺序决定执行顺序。如果存在多个对象挂载了相同的脚本,并且这些对象在场景中的顺序不同,它们的Start()函数将按照场景中的顺序依次执行。
   - OnEnable():按照对象被启用的顺序依次执行。通常情况下,与对象在场景中的顺序无关。

3. 功能:
   - Start():用于进行对象的初始化操作,例如设置初始状态、初始化变量、获取其他组件的引用等。适合处理在对象第一次启动时需要执行的逻辑。
   - OnEnable():用于在对象每次激活时执行特定的操作,例如注册事件监听器、进行资源加载、启动协程、打开文件或网络连接等。适合处理需要在对象激活时执行的逻辑。

需要注意的是,如果对象在Awake()函数中被禁用了,那么在对象重新启用时,只会调用OnEnable()函数而不会调用Start()函数。因此,如果需要确保在对象第一次启用和每次启用时都执行一些逻辑,应该将相应的代码放在OnEnable()函数中。

FixedUpdate()

关键字:物理

在Unity中,FixedUpdate()是一个生命周期函数,用于在固定的时间间隔(可以在project setting-Time里)内执行物理相关的更新操作。它会在每一帧渲染之前被调用,而不受帧率的影响。因此,FixedUpdate()适用于需要与物理引擎交互或进行精确计算的场景。

Update()

关键字:更新

在Unity中,Update()是一个常用的生命周期函数,它会在每一帧中被调用,用于更新游戏对象的核心逻辑和状态。

1. 触发时机:
   Update()函数在每一帧渲染之前被调用,因此它的执行频率与帧率相关。默认情况下,每秒调用次数与当前帧率一致,即每秒60次(或其他帧率)。

2. 功能:
   - 游戏逻辑更新:Update()函数是实现游戏逻辑的主要场所。例如,处理玩家输入、移动游戏对象、检测碰撞、进行游戏状态切换等都可以放在Update()函数中。
   - 动画更新:如果游戏对象具有动画组件,Update()函数也可以用于更新动画状态。通过修改动画的播放速度、切换动画片段等操作来控制动画的播放。

3. 注意事项:
   - 避免在Update()中使用过多的计算,以防止性能问题。如果需要进行复杂的计算,可以考虑将计算操作放在FixedUpdate()函数中,以固定时间间隔执行。
   - 对于需要在固定间隔内执行的物理相关操作,应该使用FixedUpdate()而不是Update()函数。

总结起来,Update()是Unity中的一个生命周期函数,用于在每一帧中更新游戏对象的逻辑和状态。它适用于处理游戏逻辑、玩家输入、移动游戏对象、检测碰撞等操作。需要注意避免过多的计算,并对于物理相关操作应该使用FixedUpdate()函数。

Late Update()

关键字:摄像机

在Unity中,LateUpdate()是一个生命周期函数,它在Update()函数之后被调用,用于在Update()函数执行完毕后更新游戏对象的逻辑和状态。

1. 触发时机:
   LateUpdate()函数在每一帧渲染之后被调用,因此它会在所有Update()函数执行完毕后执行。这样可以确保在更新游戏对象之前,所有的Update()函数都已经执行完毕。

2. 功能:
  跟随相机:如果游戏对象需要跟随相机移动,可以将跟随相机的代码放在LateUpdate()中执行。这样可以确保相机移动后游戏对象的位置也更新了。

总结起来,LateUpdate()是Unity中的一个生命周期函数,它在Update()函数之后被调用,用于在Update()函数执行完毕后更新游戏对象的逻辑和状态。它适用于进行碰撞检测、跟随相机等操作。

FixedUpdate()、Update()、Late Update()都是会不停地被调用的帧循环函数这些帧循环函数通过按照固定的顺序被调用,使得游戏对象能够在每一帧中更新并保持正确的状态。

OnDisable()

关键字:失活

在Unity中,OnDisable() 是游戏对象的生命周期函数之一,用于处理对象失活时的逻辑。每次对象失活时,Unity都会自动调用 OnDisable() 函数。

OnDestroy()

关键字:销毁

OnDestroy() 是游戏对象的生命周期函数之一,用于处理对象即将销毁时的逻辑。当游戏对象被销毁删除时,Unity会自动调用 OnDestroy() 函数。

OnDestroy() 函数常用于以下情况:
1. 清理资源:在游戏对象即将销毁时,可以使用 OnDestroy() 函数释放或清理该对象使用的资源。这包括关闭文件句柄、取消订阅事件、销毁其他对象的引用等。通过在 OnDestroy() 中进行资源清理,可以确保在对象销毁时不会出现资源泄漏或无效引用。

2. 停止协程和计时器:如果在游戏对象上启动了协程或计时器,需要在对象销毁时停止它们的执行。可以在 OnDestroy() 中调用 StopCoroutine() 或 CancelInvoke() 来停止协程或计时器,以避免在对象销毁后仍然执行相关代码。

3. 取消注册监听器:如果游戏对象注册了监听器(例如事件监听器、输入监听器等),可以在 OnDestroy() 中取消注册以避免对象销毁后仍然接收到事件或输入。这是为了确保对象在销毁状态下不会响应或处理任何事件。

需要注意的是,OnDestroy() 在对象被销毁时会被调用,但当对象再次创建时并不会自动调用任何生命周期函数。如果需要在对象重新创建时执行特定的逻辑,可以使用 Awake() 或 Start() 函数。

总之,OnDestroy() 是 Unity 中一个重要的生命周期函数,用于在游戏对象即将销毁时处理资源释放、协程停止和监听器取消注册等操作。它是确保对象在销毁前执行必要清理的关键函数。

Awake()、Start()、OnDestroy()都是只会调用一次的函数。

FixedUpdate()、Update()、Late Update()都是会不停地被调用的帧循环函数

OnEnable()、OnDisable()是激活/失活的时候都会被调用。

Unity中生命周期函数支持继承多态吗?

在Unity中,生命周期函数(如Awake()、Start()、Update()等)是通过组件脚本来实现的,而组件脚本是可以继承的。因此,生命周期函数在继承关系中也会支持多态性。

当一个游戏对象上添加了多个组件脚本时,每个组件都可以重写生命周期函数。

如果子类重写了父类的生命周期函数,那么在运行时,Unity会根据组件的实际类型调用正确的生命周期函数。

例如,如果一个游戏对象上有一个父类组件脚本和一个子类组件脚本,并且它们都重写了 Start() 函数,那么在游戏对象启动时,Unity会首先调用子类组件的 Start() 函数,然后再调用父类组件的 Start() 函数。

这种继承多态的特性使得在Unity中可以方便地实现组件的复用和定制化。你可以在子类中添加特定的逻辑,同时保留父类的共同功能。通过重写生命周期函数,你可以自定义游戏对象的行为,并根据实际需求进行灵活的扩展和定制。

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

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

相关文章

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -关于我们页面实现

锋哥原创的uniapp微信小程序投票系统实战: uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

4_【Linux版】重装数据库问题处理记录

1、卸载已安装的oracle数据库。 2、知识点补充: 3、调整/dev/shm/的大小 【linux下修改/dev/shm tmpfs文件系统大小 - saratearing - 博客园 (cnblogs.com)】 mount -o remount,size100g /dev/shm 4、重装oracle后没有orainstRoot.sh 【重装oracle后没有orains…

隧道应用2-netsh端口转发监听Meterpreter

流程介绍: 跳板机 A 和目标靶机 B 是可以互相访问到的,在服务器 A 上可以通过配置 netsh 端口映射访问 B 服务器。如果要拿 B 服务器的权限通常是生成正向后门,使用 kali 的 msf 正向连接B服务器,进而得到 Meterpreter&#xff0c…

点云相关论文总结

点云Backbone 全链接 - PointNet: https://arxiv.org/pdf/1706.02413.pdf Transformer - Point Transformer: https://openaccess.thecvf.com/content/ICCV2021/papers/Zhao_Point_Transformer_ICCV_2021_paper.pdf 3D CNN - https://arxiv.org/abs/1904.08755 点云检测 PointP…

大模型微调及生态简单介绍

大模型 大模型生态OpenAI大模型生态: 全球开源大模型性能评估榜单中文语言模型——ChatGLM基于ChatGLM的多模态⼤模型 大模型微调LLM⼤语⾔模型 ⼀般训练过程为什么需要微调高效微调技术⽅法概述⾼效微调⽅法一:LoRA微调方法高效微调⽅法⼆:P…

代码随想录算法训练营第五天天| 总结数组专题

数组:二分查找、双指针(包括快慢指针)、滑动窗口、模拟 链表:双指针、三指针、虚拟头指针、复杂指针操作画图明确每一步(标好次序) 数组 代码随想录总结的很好,如下图。我再结合自己的一些理解…

具于xilinx FPGA的可动态配置DDS频率控制字的DDS IP核使用例程详解

目录 1 概述2 IP examples功能3 IP 使用例程4注意事项5 DDS IP Examples下载位置 1 概述 本文用于讲解xilinx IP 的dds ip examples(动态配置频率)的功能说明,方便使用者快速上手。 2 IP examples功能 本examples 是月隐编写的针对DDS的使…

Awesome Mac:好用的Mac应用程序、软件以及工具

优秀好用的Mac应用:https://github.com/jaywcjlove/awesome-mac/blob/master/README-zh.md Awesome Mac目录开发者工具 编辑器开发者实用工具正则编辑器API开发和分析网络分析命令行工具版本控制GUI版本控制系统数据库设计和产品 设计工具原型流程作图工具截图工具其…

一篇文章带你了解Redis的发展史

Redis 是一个开源的内存数据存储和处理系统,它在过去的几十年中经历了重大的发展和演进。以下是 Redis 的发展历程概述: 早期阶段(2000年代初至中期):在这个时期,网站的访问量通常较低,单个数据…

代码随想录算法训练营29期Day18|LeetCode 513,112,113,106,105

文档讲解:找树左下角的值 路径总和 从中序与后序遍历序列构造二叉树 513.找树左下角的值 题目链接:https://leetcode.cn/problems/find-bottom-left-tree-value/description/ 思路: 本题要求我们找到树最深一层的最左节点的值。搜索的话复…

xtu oj 1183 sum times

题目描述 整数a,b,其中ab c,a*b d,已知c和d,问是否存在a和b? 输入 第一行是一个整数K,表示样例个数。 每个样例占1行,两个整数c和d,0≤c,d≤109。 输出 每行输出一个样例的结果,a和b(a≤b)&#xff…

vite 创建 react 项目

npm create vitelatest 选择 react 和 ts 安装 react-redux 、react-router-dom 、redux 安装 reset-css 样式初始化 npm i --save-dev sass // 禁用文字选中 user-select: none; img{ // 禁止图片拖动 -webkit-user-drag: none; } 正确的样式引入顺序 样式初始化即 re…

51-11 多模态论文串讲—VLMo 论文精读

VLMo: Unified Vision-Language Pre-Training with Mixture-of-Modality-Experts (NeurIPS 2022) VLMo 是一种多模态 Transformer 模型,从名字可以看得出来它是一种 Mixture-of-Modality-Experts (MoME),即混合多模态专家。怎么理解呢?主流 …

yolov5无人机视频检测与计数系统(创新点和代码)

标题:基于YOLOv5的无人机视频检测与计数系统 摘要: 无人机技术的快速发展和广泛应用给社会带来了巨大的便利,但也带来了一系列的安全隐患。为了实现对无人机的有效管理和监控,本文提出了一种基于YOLOv5的无人机视频检测与计数系…

[软件工具]通用OCR识别文字识别中文识别服务程序可局域网访问

【软件界面】 【算法介绍】 采用业界最先进算法之一paddlocr,PaddleOCR,全称PaddlePaddle OCR,是一种基于深度学习的光学字符识别(OCR)技术。相较于传统的OCR技术,PaddleOCR具有许多优点。 首先&#xff0…

Activity 启动流程log分析

为了方便跟踪启动过程相关流程,打开debug开关,并添加Log打印 1.Log打点 1)打开debug开关 打开 WindowManagerDebugConfig开关,会打开InputMonitor InputManagerCallback PhoneWindowManager中的input向相关日志打印 public st…

南京观海微电子----时序分析基本概念(一)——建立时间

1. 概念的理解 以上升沿锁存为例,建立时间(Tsu)是指在时钟翻转之前输入的数据D必须保持稳定的时间。如下图所示,一个数据要在上升沿被锁存,那么这个数据就要在时钟上升沿的建立时间内保持稳定。 建立时间是对触发器而…

RibbonGroup 添加QLineEdit

RibbonGroup添加QLineEdit: QLineEdit* controlEdit new QLineEdit(); controlEdit->setToolTip(tr("Edit")); controlEdit->setText(tr("Edit")); controlEdit->setMinimumWidth(150); …

C //练习 5-20 扩展dcl程序的功能,使它能够处理包含其他成分的声明,例如带有函数参数类型的声明、带有类似于const限定符的声明等。

C程序设计语言 (第二版) 练习 5-20 练习 5-20 扩展dcl程序的功能,使它能够处理包含其他成分的声明,例如带有函数参数类型的声明、带有类似于const限定符的声明等。 注意:代码在win32控制台运行,在不同的I…

Codeforces Round 919 (Div. 2)补题

Satisfying Constraints&#xff08;Problem - A - Codeforces&#xff09; 题目大意&#xff1a;有三种限定方式&#xff1a; 1.k>x; 2.k<x; 3.k!x; 根据若干限定&#xff0c;找出合法的k的个数。 思路&#xff1a;通过1&#xff0c;2定出区间&#xff0c;同时记录…