Unity 脚本的生命周期

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

目标

Unity 脚本的生命周期有哪些?什么时机会触发/执行?什么时候用?

过程

手册

Unity 手册地址

生命周期

初始化

方法说明:

  • Awake:当物体载入时立即调用一次,在 Start 函数之前调用。
  • OnEnable:在脚本对象启用时调用。
  • Start:仅当启用脚本实例时,才会在第一帧调用。
  • Reset:编辑器下调用,当脚本第一次附加到物体上或者点击 Reset 时执行,来初始化脚本属性。

实际应用:

  • Awake:通常使用为需要提前初始化的逻辑。比如单例赋值private void Awake(){Instance = this;}

  • OnEnable:处理每次显示时都需要进行初始化的逻辑,通常和 OnDisable 配合使用。比如: 游戏逻辑使用并修改了变量Number,而下次显示时使用是又需要Number = 1,此时就可以写private void Awake(){Number = 1;}

  • Start:通常使用为一些变量初始化逻辑。比如:获取指定物体:private void Start(){child1 = transform.GetChild(0);}

  • Reset:通常在游戏测试调试时,使用编辑器下的初始化。通过点击 Reset 执行一个逻辑。

Awake 和 Start 直到销毁只执行一次。Awake 先于 Start,不管脚本启用还是禁用都会执行,常用于在游戏开始前进行初始,可以判断当满足某种条件执行此脚本 this.enable=true。

更新

方法说明:

  • FixedUpdate:固定时间调用,FixedUpdate 通常比 Update 更频繁地调用。

  • Update:每帧调用一次。

  • LateUpdate:在 Update 完成后,每帧调用一次。

实际应用

  • FixedUpdate:所有物理计算和更新都在 FixedUpdate 中处理。它是固定时间调用,不会受到帧率影响。比如:一些物理属性的更新操作 Force,Collider,Rigidbody 等。

  • Update:每帧调用一次,根据帧率的快慢影响执行速度。通常的游戏逻辑都写在这里,比如:和玩家交换,当用户按下空格时进行执行什么操作。

  • LateUpdate:每次 Update 完成后调用移除。常见用处是相机跟随主角,比如:主角在 Update 中移动,则可以在 LateUpdate 执行相机的移动,这将可以保证摄像机跟着的时候之前的逻辑一起完全执行完成。

FixedUpdate 默认为0.02s 执行一次,可以在 Edit => Project Setting => Time => Fixed Timestep中设置更新频率,一般不建议修改这个值,因为改大了碰撞检测不到,改小了性能消耗变大。

Update 执行间隔不固定,手游30-40帧,pc游戏40-50帧,vr一般要大于70帧。

既然Update执行后必定会执行LateUpdate,那为什么不放在一起执行呢?如果把摄像机跟随的代码放在 Update 中合并执行,那么有可能摄像机跟随的代码会先一步执行完成。

碰撞

碰撞函数

  • OnCollisionEnter: 进入碰撞时触发一次。

  • OnCollisionStay: 在碰撞体中停留时每帧触发一次。

  • OnCollisionExit: 离开碰撞体时触发一次。

触发函数

  • OnTriggerEnter: 进入碰撞体时触发一次。

  • OnTriggerStay: 在碰撞体中停留时每帧触发一次。

  • OnTriggerExit: 离开碰撞体是触发一次。

PS:上面这六个方法,还有对应 2D 碰撞体的六个方法(如:OnCollisionEnter2D) 函数后面添加 2D 接口,触发条件和使用方式和 3D 一致。 使用时注意碰撞体和检测函数同步接口,即用 2D 碰撞体必须用 2D 函数。

函数执行条件

  • 两个物体需要都有碰撞体(Collider)组件。

  • 检测方(挂载脚本物体)需要有刚体(Rigidbody)组件。

  • Collider 上都不勾选 IsTrigger(有一方勾选则执行触发函数)。

交互

方法说明

  • OnMouseEnter: 鼠标进入时调用一次。

  • OnMouseOver: 鼠标停留(经过)时一直调用。

  • OnMouseExit::鼠标退出时调用一次。

  • OnMouseDown:鼠标按下时调用一次。

  • OnMouseDrag:鼠标拖拽(按住)时一直调用。

  • OnMouseUp:鼠标抬起时调用一次。

实际应用

使用时一般都是成对使用。

  • OnMouseEnter,OnMouseOver,OnMouseExit 一组。比如模拟选中状态:鼠标进入时物体变色,鼠标退出时再变回来。

  • OnMouseDown,OnMouseDrag,OnMouseUp 一组。比如射击游戏:鼠标按下拖拽时调整方向,抬起时发射子弹。

  • 当鼠标按下并停留在当前游戏对象上时,OnMouseOver,OnMouseDrag 会同时触发。

检测原理

  • 只能检测当前脚本挂载的游戏对象。

  • 当前游戏对象需要有碰撞体。Edit => Project Settings => Physics 中的 Queries Hit Triggers。可以启用和关闭碰撞。

  • 不能有其他物体(UI)遮挡到此游戏对象。

渲染

方法说明:

  • OnBecameVisible:当 Mesh Renderer 在任何相机上可见时调用。

  • OnBecameInvisible:当 Mesh Renderer 在任何相机上都不可见时调用。

销毁

方法说明:

  • OnDisable:对象变为不可用或者附属游戏对象非激活状态时此函数被调用。
  • OnDestroy:当脚本销毁或者附属游戏对象被销毁时此函数被调用。
  • OnApplicationQuit:当应用程序退出时被调用。

实际应用

  • OnDisable: 通常和 OnEnable 配合使用。比如:在 OnEnable 添加监听,在 OnDisable 移除监听

  • OnDestroy: 当物体销毁或者场景关闭时触发。比如:子弹打到墙壁时,需要销毁子弹并触发一个打击音效。

结果

这些不用全部记住,弄清楚生命周期就行,要用的时候知道去查。重点的部分为初始化和更新。还有很多的生命周期方法,这里没有写全,有些生命周期可能永远也不会的用上,用的上的时候去查就行了。

生命周期是 MonoBehaviour 类中的方法,所有的生命周期方法都在里边了。哪里查?查手册,文章开头已经给了,这里跳转一下,MonoBehaviour API 地址 ,Unity 里也有对应版本的手册。

周期方法都在里边了。哪里查?查手册,文章开头已经给了,这里跳转一下,MonoBehaviour API 地址 ,Unity 里也有对应版本的手册。
unity的脚本生命周期,Unity 学习,unity,游戏引擎文章来源地址https://www.toymoban.com/news/detail-845578.html

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

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

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

相关文章

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

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

    2024年02月14日
    浏览(28)
  • unity的C#学习——多线程编程(线程的生命周期、创建与管理)与线程相关类

    多线程编程是 C# 一个比较难且涵盖面比较广的知识点,本文整理仓促而且属于笔记向博客,有些地方必然还存在不严谨和错误,本人会在日后的使用过程中不断完善。如果发现问题或有改进意见可以在评论区提出,我会及时修改。 线程是程序的执行流程,也被称为 轻量级进

    2024年02月12日
    浏览(29)
  • unity生命周期简单叙述

    1Awake(),2 OnEnable(), 3 Start(), 4 FixedUpdate(), 5 Update(), 6 LateUpdate(), 7 OnGUI(), 8 OnDisable(), 9 OnDestroy(). 特殊一点的方法Reset() Reset 方法是在编辑器中调用的,并且仅在以下情况下执行: 脚本组件被添加到 GameObject 上: 当你将一个脚本组件添加到一个 GameObject 上时,如果该脚本包含 Re

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

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

    2024年02月03日
    浏览(26)
  • 【Unity】一文了解生命周期

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

    2023年04月22日
    浏览(25)
  • Unity之组件的生命周期

    PS:第二天,依旧在摸鱼学unity 我本身是由Web后端转到了游戏后端,最近因为工作原因在学ET框架。学到了 ECS 编程模式开发(E —— Entity,C —— Component , S —— System)实体、组件、逻辑开发。 我是这么理解的:组件是挂载到实体上的,组件中记录了实体所需要的数据,然

    2024年02月02日
    浏览(26)
  • 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】认识常用的生命周期函数(Awake、Start、Update...)

    游戏的本质就是一个死循环 每一次循环都会处理游戏逻辑 并 更新一次游戏画面 之所以能看到画面在动 是因为 切换画面速度达到一定速度时 人眼就会认为画面是动态且流畅的 一帧就是执行了一次循环 Unity底层已经封装好了这个死循环 我们只需要利用Unity的生命周期函数的

    2024年02月02日
    浏览(24)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包