当前位置: 首页 > news >正文

Unity生命周期函数解析

本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com

Unity生命周期函数解析

Unity 生命周期函数是在游戏对象的不同阶段被调用的方法,通过这些函数,我们可以在不同的时刻执行特定的代码。在这篇文章中,我们将一步步解析 Unity 生命周期函数,分为不同阶段来理解它们的作用。

事件函数的执行顺序 - Unity 手册 (unity3d.com)

1. 初始化阶段 Initialization
- Awake(唤醒)

始终在任何 Start 函数之前并在实例化预制件之后调用此函数。(如果游戏对象在启动期间处于非活动状态,则在激活之后才会调用 Awake。)

- OnEnable(当可用)

(仅在对象处于激活状态时调用)在启用对象后立即调用此函数。在创建 MonoBehaviour 实例时(例如加载关卡或实例化具有脚本组件的游戏对象时)会执行此调用。

- Reset(重置)(Editor)

调用 Reset 可以在脚本首次附加到对象时以及使用 Reset 命令时初始化脚本的属性。

- Start(开始)

在对象的第一帧更新前调用,常用于初始化游戏对象之间的引用关系等操作。

仅当启用脚本实例后,才会在第一次帧更新之前调用 Start。

2. 物理阶段Physics
- FixedUpdate(固定更新)

在固定的物理时间间隔内调用,适合处理物理相关的逻辑,如移动、碰撞检测等。调用 FixedUpdate 的频度常常超过 Update。如果帧率很低,可以每帧调用该函数多次;如果帧率很高,可能在帧之间完全不调用该函数。在 FixedUpdate 之后将立即进行所有物理计算和更新。在 FixedUpdate 内应用运动计算时,无需将值乘以 Time.deltaTime。这是因为 FixedUpdate 的调用基于可靠的计时器(独立于帧率)。

- OnTriggerXXX(触发)

处理触发器事件,例如 OnTriggerEnter、OnTriggerStay、OnTriggerExit 等。

- OnCollisionXXX(碰撞)

处理碰撞事件,例如 OnCollisionEnter、OnCollisionStay、OnCollisionExit 等。

- yield WaitForFixedUpdate(协程:物理帧结束)

在协程中使用,等待物理帧结束后继续执行。

3. 输入事件阶段 Input events
- OnMouseXXX(输入)

处理用户输入事件,例如鼠标点击、键盘输入等。

4. 游戏逻辑阶段 Game logic
- Update(更新)

在每一帧更新时调用,用于处理游戏逻辑。每帧调用一次 Update。这是用于帧更新的主要函数。

- 判断多个协程点

在 Update 中可以判断多个协程的执行点,进行逻辑控制:yield null, yield WaitForSeconds, yield WWW, yield StartCoroutine

- 内部动画更新 Internal animation update

在 Update 中更新内部动画。

- LateUpdate(延后更新)

在 Update 之后调用,适合处理与 Update 相关的逻辑。每帧调用一次 LateUpdate__(在 Update__ 完成后)。LateUpdate 开始时,在 Update 中执行的所有计算便已完成。LateUpdate 的常见用途是跟随第三人称摄像机。如果在 Update 内让角色移动和转向,可以在 LateUpdate 中执行所有摄像机移动和旋转计算。这样可以确保角色在摄像机跟踪其位置之前已完全移动。

5. 渲染阶段

渲染阶段包括多个生命周期函数,用于处理与渲染相关的逻辑,例如特效、相机视觉效果等。以下是这些函数的解释:

- OnPreCull

在摄像机剔除场景之前调用。剔除操作将确定摄像机可以看到哪些对象。正好在进行剔除之前调用 OnPreCull。

OnPreCull 在剔除阶段(culling)之前调用,用于在相机剔除不可见物体之前执行逻辑。在这里进行的操作将在剔除阶段考虑,可以用于自定义剔除逻辑或计算视觉效果。

- OnWillRenderObject

如果对象可见,则为每个摄像机调用一次

OnWillRenderObject 在相机渲染之前调用,用于确定是否渲染当前对象。通常在自定义渲染脚本中使用,允许我们在渲染之前执行特定的逻辑,如动态调整材质或更新纹理。

- OnBecameVisible(即将可见)

对象变为对任何摄像机可见时调用。

OnBecameVisible 当对象在相机视野中变得可见时调用。可以用于激活或处理一些与可见性相关的逻辑,例如开始播放特效或启用特殊效果。

- OnBecameInvisible(即将不可见)

对象变为对任何摄像机不可见时调用。

OnBecameInvisible 当对象在相机视野中变得不可见时调用。适用于处理不可见时的逻辑,如停止播放特效或禁用一些效果以提高性能。

- OnPreRender(即将渲染)

在摄像机开始渲染场景之前调用。

OnPreRender 在相机渲染之前调用,用于在渲染之前执行特定逻辑。在这里进行的操作将影响相机渲染的结果,可以用于修改材质、设置全局效果等。

- OnRenderObject

所有常规场景渲染完成之后调用。此时,可以使用 GL 类或 Graphics.DrawMeshNow 来绘制自定义几何形状。

OnRenderObject 在相机渲染物体时调用,通常用于自定义渲染逻辑。在这里可以执行一些与对象渲染相关的操作,例如绘制辅助几何或实现特殊的渲染效果。

- OnPostRender

在摄像机完成场景渲染后调用。

OnPostRender 在相机完成渲染后调用,用于在渲染之后执行逻辑。适用于处理与整体渲染结果相关的操作,如后期处理效果。

- OnRenderImage

在场景渲染完成后调用以允许对图像进行后处理,请参阅后期处理效果。

OnRenderImage 在相机完成渲染后,但在渲染结果被绘制到屏幕之前调用。允许对渲染结果进行后期处理,生成最终的图像效果。

- OnDrawGizmos(Gizmos 渲染)

用于在场景视图中绘制辅助图标以实现可视化。

OnDrawGizmos 用于在 Scene 视图中渲染场景的 Gizmos。适用于在编辑器中可视化调试信息,通常用于显示场景中的边界、路径、碰撞体等信息。

- GUI 渲染

处理 GUI 渲染的逻辑。

OnGUI

每帧调用多次以响应 GUI 事件。首先处理布局和重新绘制事件,然后为每个输入事件处理布局和键盘/鼠标事件。

- yield WaitForEndOfFrame(协程:帧结束)

在协程中使用,等待帧结束后继续执行。

6. 暂停阶段
- OnApplicationPause(应用暂停)

在应用暂停时调用,可用于处理暂停时的逻辑。

7. 退出阶段
- OnApplicationQuit(应用退出)

在应用退出时调用,可用于处理退出时的逻辑。

**- OnDisable(隐藏)

行为被禁用或处于非活动状态时,调用此函数。

- OnDestroy(销毁)

在对象被销毁时调用,进行资源释放等清理操作。

通过了解和合理使用这些生命周期函数,我们可以更好地掌握 Unity 中对象的生命周期,实现精确的逻辑控制和资源管理。希望这份解析能够帮助你更好地理解 Unity 生命周期函数的作用和运行顺序。

相关文章:

Unity生命周期函数解析

本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com Unity生命周期函数解析 Unity 生命周期函数是在游戏对象的不同阶段被调用的方法,通过这些函数,我们可以在不同的时刻执行特定的代码。在这篇文章中,我们将一步步解析 Unit…...

【Qt】QTextEdit/QPlainTextEdit 实现 Tab 键多行缩进与反缩进

【Qt】QTextEdit/QPlainTextEdit 实现 Tab 键多行缩进与反缩进 文章目录 I - 主要原理II - 代码实现2.1 - 自定义类2.2 - 实现 Tab 缩进2.3 - 实现反缩进 III - 参考链接 I - 主要原理 由于 QTextEdit 和 QPlainTextEdit ,都无法实现多行选中缩进与反缩进&#xff…...

C++缺陷与思考

数组隐式转换为指针 size_t func(int a[10]) {return sizeof(a); }int a[100]; func(a); // 指针大小 sizeof(a); // 数组大小函数的参数看似是一个数组形式,但事实上他已经退化为指针了,也就是等价于size_t func(int* a),而数组作为参数传…...

无公网ip环境使用DS file软件远程访问内网群晖NAS中储存的文件

文章目录 1. 群晖安装Cpolar2. 创建TCP公网地址3. 远程访问群晖文件4. 固定TCP公网地址5. 固定TCP地址连接 DS file 是一个由群晖公司开发的文件管理应用程序,主要用于浏览、访问和管理存储在群晖NAS(网络附加存储)中的文件。这个应用程序具有…...

软件工程基础

本博客地址:https://security.blog.csdn.net/article/details/136446772 一. 软件工程 1、软件危机。具体表现为:软件开发进度难以预测、软件开发成本难以控制、软件功能难以满足用户期望、软件质量无法保证、软件难以维护和软件缺少适当的文档资料。 …...

alzet供应商你值得拥有

在20世纪70年代,ALZE公司研发出来一款巧妙的药物输送装置——Alzet osmotic pump。这款产品如胶囊般精致小巧,它既有胶囊的外表,也具有胶囊的作用。在Alzet osmotic pump中藏有可以装配药物溶液的空间。此款胶囊泵如同一个小投递员&#xff0…...

x86中的TSS与任务切换

前言 今天在学习《深入理解Linux内核》的时候,发现出现了一个新的名词TSS(Task-State Segment),这还是我第一次了解到原来x86提供了硬件级别的任务切换功能,之前以为任务切换都是操作系统实现的来着,这里也…...

打造去中心化透明储蓄罐:Solidity智能合约的又一实践

一、案例背景 传统的储蓄罐通常是由个人或家庭使用,用于存放硬币或小额纸币。然而,这样的储蓄罐缺乏透明性,用户无法实时了解储蓄情况,也无法确保资金的安全性。 通过Solidity智能合约,我们可以构建一个去中心化…...

Java Mybatis数据库面试题

Java Mybatis数据库面试题 前言1、什么是 Mybatis?2、Mybaits 的优缺点:3、SQL 注入如何防止?4、MyBatis 框架适用场合:5、MyBatis 与 Hibernate 有哪些不同?6、#{}和${}的区别是什么?7、当表中的字段名和实…...

LeetCode-第14题-最长公共前缀

1.题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 2.样例描述 3.思路描述 按字符串数组每个数组的长度,将字符串数组从小到大排序;他们的公共前缀一定小于或等于最长元素长度…...

TCP/UDP模型:2024/2/29

作业1&#xff1a;TCP模型 服务器端&#xff1a; #include <myhead.h> #define SER_IP "192.168.199.129" #define SER_PORT 8899int main(int argc, const char *argv[]) {//1.创建用于连接的套接字文件int sfdsocket(AF_INET,SOCK_STREAM,0);if(sfd-1){per…...

微信如何设置自动回复消息,提升沟通效率的?

在日常微信聊天过程中&#xff0c;我们可能会频繁遇到相同问题的客户提问&#xff0c;特别是对于从事销售工作的朋友们而言&#xff0c;客户添加好友后的第一句话常常为“在吗”或“你好”。当我们拥有大量好友&#xff0c;手动逐一回复可能会耗费大量时间。因此&#xff0c;自…...

PCIE的BAR空间

1.PCIe 简介 PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;是一种高速 串行计算机扩展总线标准&#xff0c;主要用于连接主板上的中央处理器&#xff08;CPU&#xff09;和 各种外部设备&#xff0c;如显卡、声卡、硬盘等。PCIe 总线取代了传统的 PC…...

11.互信息-机器学习模型性能的常用的评估指标

互信息&#xff08;Mutual Information&#xff09;是机器学习中常用的一种评估指标&#xff0c;特别是在无监督学习和聚类分析中。它用于衡量两个随机变量之间的相关性或相似性。 定义 给定两个随机变量X和Y&#xff0c;它们的互信息I(X;Y)定义如下&#xff1a; 其中&…...

SpringCloud(18)之Sleuth +Zipkin链路追踪

一、Zipkin介绍 Zipkin是一个开放源代码分布式的跟踪系统&#xff0c;它可以帮助收集服务的时间数据&#xff0c;以解决微服务架构中的延迟问 题&#xff0c;包括数据的收集、存储、查找和展现。每个服务向zipkin报告计时数据&#xff0c;zipkin会根据调用关系通 过Zipkin UI…...

GVA快速使用

1. clone 代码&#xff0c; 使用goland打开Server目录&#xff0c; 使用vsc打开前端web目录&#xff0c;运行后端&#xff0c;前端 gin-vue-admin后台管理系统 - 知乎 (zhihu.com) 2.了解端口配置 参考&#xff0c; 基于Go的后台管理框架Gin-vue-admin_go vue admin-CSDN博客…...

Linux文本处理三剑客:awk(内置函数详解笔记)

Linux系统中&#xff0c;AWK 是一个非常强大的文本处理工具&#xff0c;它的内置函数使得对文本数据进行处理更加高效和便捷。 本文将介绍 AWK 内置函数的几种主要类型&#xff1a; 算数函数字符串函数时间函数位操作函数其他常用函数 我们将使用一个示例文本文件来演示这些函…...

C++调用lua函数

C 调用Lua全局变量(普通) lua_getglobal(lua, "width");int width lua_tointeger(lua,-1);lua_pop(lua,1);std::cout << width << std::endl;lua_close(lua); 这几行代码要放到lua_pcall(lua, 0,0,0);之后才可以. C给lua传递变量 lua_pushstring(lua, …...

java找工作之Mybatis(入门及xml配置相关)

Mybatis 学习Mybatis就要学会查看官网&#xff0c;官网地址如下&#xff1a;<MyBatis中文网 > 1、简介 1.1什么是Mybatis MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取…...

如何保证 HTTPS 证书的有效性?

随着互联网的蓬勃发展&#xff0c;保障用户在网络上的隐私和安全成为至关重要的任务。HTTPS证书&#xff0c;作为一种安全套接字层协议&#xff0c;扮演着网站安全的守护者。 1. 什么是HTTPS 证书&#xff1f; HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff…...

从工业控制到智能家居:手把手教你根据项目需求选对RTOS(ThreadX vs. FreeRTOS实战指南)

从工业控制到智能家居&#xff1a;手把手教你根据项目需求选对RTOS&#xff08;ThreadX vs. FreeRTOS实战指南&#xff09; 在嵌入式系统开发中&#xff0c;选择合适的实时操作系统&#xff08;RTOS&#xff09;往往决定了项目的成败。面对工业控制的高精度需求或智能家居的成本…...

OmenSuperHub终极指南:掌控惠普游戏本性能与散热的完整解决方案

OmenSuperHub终极指南&#xff1a;掌控惠普游戏本性能与散热的完整解决方案 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度&#xff0c;自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否曾因惠普游戏本过热降频…...

终极鼠标键盘录制自动化工具:5分钟快速上手KeymouseGo完整指南

终极鼠标键盘录制自动化工具&#xff1a;5分钟快速上手KeymouseGo完整指南 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo …...

GitHub趋势-AI工具链生态

GitHub 2026年4月开源趋势&#xff1a;AI工具链正在形成完整生态分类&#xff1a;开源社区 / 开发工具 / GitHub趋势 标签&#xff1a;GitHub 开源 AI工具 Claude Code TypeScript一、数据背景 本文基于 2026 年 4 月 5 日 GitHub 实时趋势榜单数据&#xff08;来源&#xff1a…...

HS2-HF Patch:Honey Select 2游戏体验全面优化解决方案

HS2-HF Patch&#xff1a;Honey Select 2游戏体验全面优化解决方案 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF Patch是针对Honey Select 2游戏开发的…...

bilibili-comment-checker:让B站评论管理效率提升300%的智能分析工具

bilibili-comment-checker&#xff1a;让B站评论管理效率提升300%的智能分析工具 【免费下载链接】bilibili-comment-checker B站评论区自动标注成分油猴脚本&#xff0c;主要为原神玩家识别 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-comment-checker 当你…...

ST-Link固件升级全攻略:从Keil MDK到STM32CubeIDE,解决“检测不到芯片”的玄学问题

ST-Link固件升级实战指南&#xff1a;跨越IDE差异的稳定调试之道 当红色LED灯开始不规则闪烁&#xff0c;调试窗口弹出"Device not detected"的瞬间&#xff0c;每个STM32开发者都经历过这种挫败感。固件版本不匹配、IDE兼容性问题、时好时坏的连接状态——这些看似…...

Qwen3.5推理模型应用实战:快速搭建你的智能学习与代码助手

Qwen3.5推理模型应用实战&#xff1a;快速搭建你的智能学习与代码助手 1. 引言&#xff1a;为什么选择Qwen3.5推理模型 在当今AI技术快速发展的时代&#xff0c;找到一个既轻量又强大的推理模型对于开发者来说至关重要。Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF…...

华硕笔记本终极性能优化工具:G-Helper完整使用指南

华硕笔记本终极性能优化工具&#xff1a;G-Helper完整使用指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar,…...

如何通过XUnity.AutoTranslator实现Unity游戏本地化:从入门到精通的实用指南

如何通过XUnity.AutoTranslator实现Unity游戏本地化&#xff1a;从入门到精通的实用指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator是一款专为Unity游戏设计的开源自动翻译工具…...