Unity生命周期函数详解

Unity生命周期函数详解

Unity生命周期函数是Unity引擎中用于控制游戏对象行为的一系列方法。它们在游戏的不同阶段被自动调用,允许开发者在适当的时机执行特定的代码。了解和正确使用生命周期函数对于创建流畅和高效的游戏至关重要。

生命周期函数概述

Unity生命周期函数分为几个主要类别,包括:

  • 初始化函数:在游戏对象首次创建时调用。
  • 更新函数:在每一帧被调用,用于处理游戏逻辑和物理。
  • 渲染函数:在渲染每一帧时调用,用于处理图像渲染。
  • 事件处理函数:响应用户输入和游戏事件。
  • 销毁函数:在游戏对象被销毁时调用。

主要生命周期函数详解

Awake

Awake 是Unity中最早被调用的生命周期函数之一,它在游戏对象被实例化后立即执行,并且只会执行一次。这个函数通常用于初始化变量和注册事件监听器。

void Awake() {// 初始化代码
}

Start

Start 函数在所有Awake函数执行完毕后调用,同样只会执行一次。与Awake不同,Start可以被用来调用其他游戏对象的Awake函数,这在需要跨对象通信时非常有用。

void Start() {// 启动代码
}

Update

Update 是Unity中的核心生命周期函数,它在每一帧结束后被调用。这个函数用于处理游戏逻辑,如移动、碰撞检测和输入响应。

void Update() {// 每帧更新的代码
}

FixedUpdate

FixedUpdate 与Update类似,但它以固定时间步长被调用,不受帧率影响。这使得它非常适合处理物理和需要精确时间控制的逻辑。

void FixedUpdate() {// 固定时间步长更新的代码
}

LateUpdate

LateUpdate 在所有Update和FixedUpdate函数执行完毕后调用。它可以用来执行那些需要在所有其他更新之后发生的操作,如摄像机跟随。

void LateUpdate() {// 延迟更新的代码
}

OnDestroy

OnDestroy 在游戏对象被销毁之前调用,是清理资源和注销事件监听器的理想位置。

void OnDestroy() {// 销毁前的清理代码
}

使用生命周期函数的最佳实践

  • 避免在Awake中调用其他游戏对象的Awake:这可能导致初始化顺序问题。
  • 使用Update进行逻辑处理:如移动和输入响应。
  • 使用FixedUpdate进行物理处理:如刚体的力和速度更新。
  • 在OnDestroy中清理资源:如注销事件监听器和释放资源。

Unity脚本所有生命周期函数


void Update()
{//当MonoBehaviour启用时,其Update在每一帧被调用。
}void LateUpdate()
{//当Behaviour启用时,其LateUpdate在每一帧被调用。}
void FixedUpdate()
{//当MonoBehaviour启用时,其 固定时间调用一次}void Awake()
{//当一个脚本实例被载入时Awake被调用。}void Start()
{//Start仅在Update函数第一次被调用前调用。}void Reset()
{//重置为默认值。}void OnMouseEnter()
{//当鼠标进入到GUIElement(GUI元素)或Collider(碰撞体)中时调用OnMouseEnter。}void OnMouseOver()
{//当鼠标悬浮在GUIElement(GUI元素)或Collider(碰撞体)上时调用 OnMouseOver .}void OnMouseExit()
{//当鼠标移出GUIElement(GUI元素)或Collider(碰撞体)上时调用OnMouseExit。}void OnMouseDown()
{//当鼠标在GUIElement(GUI元素)或Collider(碰撞体)上点击时调用OnMouseDown。
}void OnMouseUp()
{//当用户释放鼠标按钮时调用OnMouseUp。}void OnMouseUpAsButton()
{//OnMouseUpAsButton只有当鼠标在同一个GUIElement或Collider按下,在释放时调用。}void OnMouseDrag()
{//当用户鼠标拖拽GUIElement(GUI元素)或Collider(碰撞体)时调用 OnMouseDrag 。}void OnTriggerEnter()
{//当Collider(碰撞体)进入trigger(触发器)时调用OnTriggerEnter。}void OnTriggerExit()
{//当Collider(碰撞体)停止触发trigger(触发器)时调用OnTriggerExit。}
void OnTriggerStay()
{//当碰撞体接触触发器时,OnTriggerStay将在每一帧被调用。}void OnCollisionEnter()
{//当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionEnter将被调用。}void OnCollisionExit()
{//当此collider/rigidbody停止触发另一个rigidbody/collider时,OnCollisionExit将被调用。
}void OnCollisionStay()
{//当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionStay将会在每一帧被调用。}void OnControllerColliderHit()
{//在移动的时,当controller碰撞到collider时OnControllerColliderHit被调用。}
void OnJointBreak()
{//当附在同一对象上的关节被断开时调用。}void OnParticleCollision()
{//当粒子碰到collider时被调用。}void OnBecameVisible()
{//当renderer(渲染器)在任何相机上可见时调用OnBecameVisible。}void OnBecameInvisible()
{//当renderer(渲染器)在任何相机上都不可见时调用OnBecameInvisible。}void OnLevelWasLoaded()
{//当一个新关卡被载入时此函数被调用。}
void OnEnable()
{//当对象变为可用或激活状态时此函数被调用。
}void OnDisable()
{//当对象变为不可用或非激活状态时此函数被调用。}void OnDestroy()
{//当MonoBehaviour将被销毁时,这个函数被调用。}
void OnPreCull()
{//在相机消隐场景之前被调用。
}void OnPreRender()
{//在相机渲染场景之前被调用。
}void OnPostRender()
{//在相机完成场景渲染之后被调用。}void OnRenderObject()
{//在相机场景渲染完成后被调用。
}void OnWillRenderObject()
{//如果对象可见每个相机都会调用它。
}void OnGUI()
{//渲染和处理GUI事件时调用。
}void OnDrawGizmosSelected()
{//如果你想在物体被选中时绘制gizmos,执行这个函数。}void OnDrawGizmos()
{//如果你想绘制可被点选的gizmos,执行这个函数。}void OnApplicationPause()
{//当玩家暂停时发送到所有的游戏物体。
}void OnApplicationFocus()
{//当玩家获得或失去焦点时发送给所有游戏物体。}void OnApplicationQuit()
{//在应用退出之前发送给所有的游戏物体。}void OnPlayerConnected()
{//当一个新玩家成功连接时在服务器上被调用。
}void OnServerInitialized()
{//当Network.InitializeServer被调用并完成时,在服务器上调用这个函数。}void OnConnectedToServer()
{//当你成功连接到服务器时,在客户端调用。}void OnPlayerDisconnected()
{//当一个玩家从服务器上断开时在服务器端调用。}void OnDisconnectedFromServer()
{//当失去连接或从服务器端断开时在客户端调用。}void OnFailedToConnect()
{//当一个连接因为某些原因失败时在客户端调用。}void OnFailedToConnectToMasterServer()
{//当报告事件来自主服务器时在客户端或服务器端调用。
}void OnMasterServerEvent()
{//当报告事件来自主服务器时在客户端或服务器端调用。}

Unity中文API参考手册完整版下载

Unity API参考手册是Unity开发者的宝贵资源,它提供了Unity引擎中所有类、接口、结构体、枚举和委托的详细文档。这份手册对于理解Unity的内部工作原理、使用Unity提供的各种功能以及扩展Unity的能力至关重要。
Unity圣典
Unity圣典
链接:https://pan.baidu.com/s/1S6Ezqou2i8Z4NpWrffii7g?pwd=umms
提取码:umms

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

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

相关文章

leetcode经典例题之使用栈实现队列

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 目录 1、题目展示2、题目分析3、完整代码演示4、结语 1、题目展示 前面我们了解过如何实现栈相…

搭建nacos集群

1.修改nacos/conf/application.properties 2.在数据库中执行nacos/conf/nacos-mysql.sql脚本 3.修改nacos/conf/cluster.conf文件 4.修改startup.sh文件模式为集群 5.启动服务 附:安装nginx 修改/usr/local/openresty/nginx/conf/nginx.confi文件 http{}中增加如下…

电机控制系列模块解析(20)—— MTPA

一、MTPA MTPA 是 "Maximum Torque Per Ampere" 的缩写,意为“最大转矩电流比”。在电机控制系统中,特别是永磁同步电机(PMSM)或其它永磁电机的控制策略中,MTPA 控制旨在实现电机在给定负载条件下&#xff…

uniapp 生成安卓证书没有md5指纹怎么办?

由于最新的jdk版本对应的keystore工具无法查看到md5指纹信息 但是不代表它没有md5指纹信息,只是看不到而已 解决方案: 登录uniapp开发者后台生成安卓云端证书

获取Linux上的Redis的用户名、密码、端口、host等信息

目录 进入redis-cli的目录 启动./redis-cli服务 查询密码 查询用户名 查询端口 查询host 参考文章:解决redis-cli连接时出现Could not connect to Redis at 127.0.0.1:6379: Connection refused-阿里云开发者社区 (aliyun.com) linux查看redis用户和密码_mo…

ChatGPT付费创作系统软件开发

uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 框架支持:springboot/Ssm/thinkphp/django/flask/express均支持 前端开发:vue.js 可选语言:pythonjavanode.jsphp均支持 运行软件…

【Spring Boot】Spring Boot 中的 Starter

Spring Boot 中的 Starter 1.常用 Starter2.为什么要用 Starter3.Starter 有哪些要素 我们都知道,Spring 的功能非常强大,但也有些弊端。比如:我们需要手动去配置大量的参数,没有默认值,需要我们管理大量的 jar 包和它…

【JS面试题】闭包

一、自由变量 在学习闭包之前,首先了解一下什么是自由变量: 一个变量在当前作用域(比如函数内)没有定义,但是被使用了,这个变量就是自由变量。在定义该函数的位置,向上级作用域,一…

【C++】STL — map和set的使用详细介绍

前言 本章将继续学习STL中的两个很重要的容器map和set,其底层实现是封装了一个红黑树,我们通过本节来学习和深入了解一下这两大容器。。。 序列式容器: string 、Vector、List 、dequeue 关联式容器:MAP 、SET、nordered_map、uno…

MySql软件安装

1.打开mysql官网网址 MySQL :: Download MySQL Community Server 2.本次针对版本8的图形化界面安装,下载成功后接下来对MySQL进行安装 3.图形化下载后有一个MSI文件 4.我们安装典型即可,选择第一个 5.选择数据库信息存放的路径,我默认放在C盘…

如何解决pycharm在HTML文件中注释快捷键出错的问题(HTML注释规则出错)

文章目录 💢 问题 💢🏡 演示环境 🏡💯 解决方案 💯⚓️ 相关链接 ⚓️💢 问题 💢 你是否在编程时遇到过这样的烦恼?当你正专注地编写HTML代码,想要快速注释掉某部分内容时,却发现PyCharm的注释快捷键失灵了(没有使用正确的注释格式)。这不仅打断了你的工作…

Spring Event--踩坑(注意事项)

原文网址:Spring Event--踩坑(注意事项)-CSDN博客 简介 本文介绍Spring的事件的使用注意事项。 Spring Event框架实现了基于事件的发布订阅机制。开发者可以自定义事件,发布事件,Spring 会将该事件广播给监听该事件的监听者。监听者可以实…

linux学习:视频输入+V4L2

目录 V4L2 视频采集流程 代码例子 核心命令字和结构体 VIDIOC_ENUM_FMT VIDIOC_G_FMT / VIDIOC_S_FMT / VIDIOC_TRY_FM VIDIOC_REQBUFS VIDIOC_QUERYBUF VIDIOC_QBUF /VIDIOC_DQBUF VIDIOC_STREAMON / VIDIOC_STREAMOFF V4L2 是 Linux 处理视频的最新标准代码模块&…

Java后端实现对象与文件接收数据(minio测试)

实现思路: 1. 两个接口实现,一个接对象数据(file),一个接文件数据(json)。 2. json对象(base64String) 实体类信息 ,请求体统一接收 3. file, String name ,String password ,String name , Controller层接收 统一…

OpenHarmony 实战开发——如何编译OpenHarmony自带APP

概述 OpenHarmony 的主干代码是开源社区的重要学习资源,对于想进行应用开发和熟悉 OpenHarmony 能力的同学主干代码是非常重要的资源,在主干代码的 applications 目录里聚集了很多原生的应用实现,那么如何编译这些代码就是我们这篇文章的主要…

Vue3项目打包部署到云服务器的Nginx中

文章目录 一、打包vue3项目二、dist文件夹上传到服务器三、改nginx配置文件Docker安装nginx 一、打包vue3项目 npm run build 二、dist文件夹上传到服务器 将dist文件夹放到docker安装的nginx中的html目录下 三、改nginx配置文件 然后重启nginx【改了配置文件重启nginx才能…

消息中间件Kafka(PHP版本)

小编最近需要用到消息中间件,有需要要复习一下以前的东西,有需要的自取,强调一点,如果真的想了解透彻,一定要动手,脑袋会了不代表就会写了 Kafka是由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅…

等保一体机能过三级等保吗?过等保无需再买安全设备如何做到?

等保一体机能过三级等保吗?过等保无需再买安全设备如何做到? 全云在线 2024-03-28 12:08 广东 尽管等保建设的标准是统一的,但由于不同行业和用户规模的差异,建设方案呈现出多样化的特点。 虽然重点行业过等保现象确实已经十分…

免费思维13招之八:跨行业思维

免费思维13招之八:跨行业思维 免费思维的另一大战略思维——跨行业型思维。 跨行业型思维有两种:一种是通过跨行业,把自己的产品免费掉,从而赚取其他行业的利润。另一种是通过跨行业,把别人的主流产品免费掉,从而增大自己产品的销量。 第一种,把自己的产品免费,从而赚…

Hadoop3.4.0 完全分布式集群 运行环境搭建 VMware Workstation 虚拟机 大数据系列 一

一 生产环境集群模式部署,需要多台主机,主机之间通过密钥相互访问. 1 配置如图 节点名字节点IP系统版本master11192.168.50.11centos 8.5slave12192.168.50.12centos 8.5slave13192.168.50.13centos 8.5 2 安装服务器 #先安装一台master11&#xff…