MonoBehaviour生命周期

unity MonoBehaviour 生命周期+编辑器UnityEditor学习 它源自基类MonoBehaviour,以确保此脚本将在游戏循环中运行,并具有对某些事件作出反应的附加功能。通过AddItem()添加列表元素。"Tools/菜单选项" 阅读详情

上图中重要的信息点很多,需要特别注意的是所有脚本的Awake方法都执行完才会执行Start,但是如果在Awake 中开启了一个协程这个协程中每一帧执行一些操作然后等待,那么Start方法执行是不会等待这个协程结束的,也就是说Start方法中的代码会比协程的代码结束早晚是不一定的。另外可以看到Unity中所有的方法都是在一个大循环里,所以协程只是换一个地方循环中的位置执行,并不是另一个线程。

在Unity脚本中,有一些按照预定顺序执行的事件函数,脚本即是按照此顺序执行的。这个执行顺序描述如下:

First Scene Load 第一个场景加载

These functions get called when a scene starts (once for each object in the scene).

这些函数在场景开始时就被调用了(对场景中的每个对象执行一次)。

  • Awake: This function is always called before any Start functions and also just after a prefab is instantiated.
    Awake:这个函数是在Start函数之前以及预制物体实例化后被调用。
  • OnEnable: (only called if the Object is active): This function is called just after the object is enabled.
    OnEnable:(仅在对象激活状态下可用):这个函数在对象可用之后被调用。

Before the first frame update 第一帧更新之前

  • Start: Start is called before the first frame update only if the script instance is enabled.
    Start:如果脚本实例化被启用,则Start函数在第一帧更新之前被调用。

In between frames 执行期间

  • OnApplicationPause: This is called at the end of the frame where the pause is detected, effectively between the normal frame updates. One extra frame will be issued after OnApplicationPause is called to allow the game to show graphics that indicate the paused state.
    OnApplicationPause:若暂停被检测到,当前帧执行后就调用此函数,在正常的运行期间调用是有效的。在OnApplicationPause被调用后,额外的用一帧来显示图像表明暂停状态。

Update Order 更新顺序

When you’re keeping track of game logic and interactions, animations, camera positions, etc., there are a few different events you can use. The common pattern is to perform most tasks inside the Update() function, but there are also other functions you can use.

这里有一些不同的事件函数供你来追踪游戏逻辑,动画和相机的位置等。在Update()函数中执行大多数任务是比较常见的,然而也有其他函数可以使用。

  • FixedUpdate: FixedUpdate() is often called more frequently than Update(). It can be called multiple times per frame, if the frame rate is low and it may not be called between frames at all if the frame rate is high. All physics calculations and updates occur immediately after FixedUpdate(). When applying movement calculations inside FixedUpdate(), you do not need to multiply your values by Time.deltaTime. This is because FixedUpdate() is called on a reliable timer, independent of the frame rate.
    FixedUpdate: FixedUpdate()比Update()函数调用的更频繁。当帧率比较低时,它每帧被调用多次,如果帧率比较高,它有可能就不会被调用。所有的物理计算和更新都立即发生在FixedUpdate()之后。当在FixedUpdate()中计算物体移动时,你不需要乘以Time.deltaTime。因为FixedUpdate()是基于可靠的定时器的,不受帧率的影响。
  • Update: Update() is called once per frame. It is the main workhorse function for frame updates.
    Update() 每帧调用一次。这是帧更新的主要函数。
  • LateUpdate: LateUpdate() is called once per frame, after Update() has finished. Any calculations that are performed in Update() will have completed when LateUpdate() begins. A common use for LateUpdate() would be a following third-person camera. If you make your character move and turn inside Update(), you can perform all camera movement and rotation calculations in LateUpdate(). This will ensure that the character has moved completely before the camera tracks its position.
    LateUpdate: 在Update()执行后,LateUpdate() 也是每帧都被调用。在Update()中执行的任何计算都会在LateUpdate()开始之前完成。LateUpdate()的一个常见应用就是第三人称控制器的相机跟随。如果你把角色的移动和旋转放在Update()中,那么你就可以把所有相机的移动旋转放在LateUpdate()。这是为了在相机追踪角色位置之前,确保角色已经完成移动。

Rendering 渲染

  • OnPreCull: Called before the camera culls the scene. Culling determines which objects are visible to the camera. OnPreCull is called just before culling takes place.
    OnPreCull:在相机剔除场景前被调用。剔除取决于物体在相机中是否可见。OnPreCull仅在剔除执行之前被调用。
  • OnBecameVisible/OnBecameInvisible: Called when an object becomes visible/invisible to any camera.
    OnBecameVisible/OnBecameInvisible:当物体在任何相机中可见/不可见时被调用。
  • OnWillRenderObject: Called once for each camera if the object is visible.
    OnWillRenderObject:如果物体可见,它将为每个摄像机调用一次。
  • OnPreRender: Called before the camera starts rendering the scene.
    OnPreRender: 在相机渲染场景之前被调用。
  • OnRenderObject: Called after all regular scene rendering is done. You can use GL class or Graphics.DrawMeshNow to draw custom geometry at this point.
    OnRenderObject:在所有固定场景渲染之后被调用。此时你可以使用GL类或者Graphics.DrawMeshNow来画自定义的几何体。
  • OnPostRender: Called after a camera finishes rendering the scene.
    OnPostRender: 在相机完成场景的渲染后被调用。
  • OnRenderImage(Pro only): Called after scene rendering is complete to allow postprocessing of the screen image.
    OnRenderImage(仅专业版):在场景渲染完成后被调用,用来对屏幕的图像进行后处理。
  • OnGUI: Called multiple times per frame in response to GUI events. The Layout and Repaint events are processed first, followed by a Layout and keyboard/mouse event for each input event.
    OnGUI: 每帧被调用多次用来回应GUI事件。布局和重绘事件先被执行,接下来是为每一次的输入事件执行布局和键盘/鼠标事件。
  • OnDrawGizmos Used for drawing Gizmos in the scene view for visualisation purposes.
    OnDrawGizmos:为了可视化的目的在场景视图中绘制小图标。

Coroutine 协同程序(协程)

Normal coroutine updates are run after the Update function returns. A coroutine is function that can suspend its execution (yield) until the given given YieldInstruction finishes. Different uses of Coroutines:

正常情况下协程是在Update函数返回时执行。协程的功能是,延缓其执行(yield) ,直到给定的YieldInstruction完成。协程的不同用途:

  • yield; The coroutine will continue after all Update functions have been called on the next frame.
    yield:协程在所有的Update函数于下一帧调用后继续执行。
  • yield WaitForSeconds(2); Continue after a specified time delay, after all Update functions have been called for the frame
    yield WaitForSeconds(2):在一个指定的时间延迟后继续执行,在所有的Update函数被调用之后。
  • yield WaitForFixedUpdate(); Continue after all FixedUpdate has been called on all scripts
    yield WaitForFixedUpdate():在所有脚本上所有的FixedUpdate被调用之后继续执行。
  • yield WWW Continue after a WWW download has completed.
    yield WWW:在WWW加载完成之后继续执行。
  • yield StartCoroutine(MyFunc); Chains the coroutine, and will wait for the MyFunc coroutine to complete first.
    yield StartCoroutine(MyFunc):用于链接协程,此将等待MyFunc协程完成先。

When the Object is Destroyed 当对象被销毁时

  • OnDestroy: This function is called after all frame updates for the last frame of the object’s existence (the object might be destroyed in response to Object.Destroy or at the closure of a scene).
    OnDestroy: 这个函数在所有帧更新之后被调用,在对象存在的最后一帧(对象将销毁来响应Object.Destroy或关闭一个场景)。

When Quitting 当退出时

These functions get called on all the active objects in your scene, :

这些函数对于场景中的所有激活状态的物体都会被调用。

  • OnApplicationQuit: This function is called on all game objects before the application is quit. In the editor it is called when the user stops playmode. In the web player it is called when the web view is closed.
    OnApplicationQuit:在应用退出之前所有的游戏对象都会调用这个函数。在编辑器中当用户停止播放时它将被调用。在webplayer中,当网页关闭时被调用。
  • OnDisable: This function is called when the behaviour becomes disabled or inactive.
    OnDisable: 当行为不可用或非激活时,这个函数被调用。

So in conclusion, this is the execution order for any given script:

因此结论是,对于任意给定的脚本的执行顺序为:

  1. All Awake calls 所有Awake调用
  2. All Start Calls 所有Start调用
  3. while (stepping towards variable delta time)
    1. All FixedUpdate functions 所有FixedUpdate函数
    2. Physics simulation 物理模拟
    3. OnEnter/Exit/Stay trigger functions OnEnter/Exit/Stay触发函数
    4. OnEnter/Exit/Stay collision functions OnEnter/Exit/Stay碰撞函数
  4. Rigidbody interpolation applies transform.position and rotation
    刚体插值应用于transform.position 和 rotation
  5. OnMouseDown/OnMouseUp etc. events OnMouseDown/OnMouseUp等事件
  6. All Update functions 所有Update函数
  7. Animations are advanced, blended and applied to transform 高级动画、混合并应用到变换
  8. All LateUpdate functions 所有LateUpdate函数
  9. Rendering 渲染

Hints 提示

  • If you start a coroutine in LateUpdate it will also be called after LateUpdate just before rendering.
    如果你在LateUpdate中开启一个协程,它将在LateUpdate之后渲染之前也会被调用。
  • Coroutines are executed after all Update functions.
    协程在所有的Update函数完成后执行。

Categories
Unity中Monobehaviour的生命周期 在Unity中给出的MonoBehaviour的描述如下: MonoBehaviour Namespace: UnityEngine Inherits from: Behaviour Description 描述 MonoBehaviour is the base class every script derives from. MonoBehaviour 阅读详情

相关推荐

Unity3d学习 基础-关于MonoBehaviour的生命周期

其实在刚接触Unity3D,会有一个疑问,关于Unity3D游戏运行的初始入口在哪?不像Cocos2dx还有个AppDelegate文件可以去理解。而且在刚开始就接触Unity3D时,看到所有脚本中编写的类 几乎都继承了MonoBehaviour这个父类,那么MonoBehaviour这个类是干什么的?   首先我们看一关于MonoBehavior这个类的继承关系:   

qiupu4667的博客 2173

【Unity3D】MonoBehaviour的生命周期

Unity3D 中可以给每个游戏对象添加脚本,这些脚本必须继承 MonoBehaviour,用户可以根据需要重写 MonoBehaviour 的部分生命周期函数,这些生命周期函数由系统自动调用,且调用顺序与书写顺序无关。MonoBehaviour 的生命周期函数主要有: 每帧都执行的日志就不放了,读者可以自行打开,这里只看下只执行 1 次的生命周期函数日志,如下:.........

little_fat_sheep 9803

Unity MonoBehaviour生命周期

Unity MonoBehaviour生命周期

W__YH的博客 810

Unity中的MonoBehaviour及生命周期

从第一次在unity创建C#脚本开始就会发现每个脚本都继承了一个叫MonoBehviour的类,那么MonoBehaviour是做什么的呢?一层层进入MonoBehaviour父类,可以看出MonoBehaviour间接继承了Component,所以继承自MonoBehaviour脚本的作用其中之一就是充当组件的角色,

L的博客 3万+

yolo自动化项目实例解析(九) 导航

比如我们经常使用的导航,说白了就是寻找两点之间最近的路径,也就是所谓的寻路,我们需要想办法让程序知道他要去哪里,路径包含(起点、轨迹、路径)

默子昂 1994

GB28181协议心跳机制:从标准解读到代码实现的保活策略

本文深入解析GB28181协议中的心跳机制,从标准解读到代码实现,详细介绍了保活策略的核心价值和底层逻辑。通过实战案例和技术要点,帮助开发者优化心跳间隔、超时次数等参数配置,提升安防监控系统的可靠性和性能。文章还提供了代码实现的防坑指南和特殊场景处理建议,适用于各类网络环境下的设备在线状态管理。

weixin_29611239的博客 105

常用脚本(二) Unity_生命周期

常用的生命周期函数: Awake():唤醒事件,游戏一开始运行就执行,只执行一次。 OnEnable():启用事件,只执行一次。当脚本组件被启用的时候执行一次。 Start():开始事件,执行一次。 FixedUpdate():固定更新事件,执行N次,0.02秒执行一次。所有物理组件相关的更新都在这个事件中处理。 Update():更新事件,执行N次,每帧执行一次。 LateUpdat...

qq_43610722的博客 358

企业信息化系统的组成模块-核心业务系统

通过标准化的数据流形成完整的业务闭环,CRM生成的销售订单驱动ERP的生产和采购,ERP将生产计划传递给MES执行,MES报工数据返回ERP进行成本核算,ERP再将交付信息同步给CRM供客户查询。生产管理确保高效交付,缩短订单周期。某贸易公司实施ERP供应链模块后,库存周转率从每年4次提升到8次,库存资金占用从2000万降到1200万,释放800万现金流,同时缺货率从15%降到5%。│ │库存 │ │ MRP │ │ ERP │ │ 云ERP/ │ │。

weiyvyy的博客 694

Unity---MonoBehaviour9大生命周期

1、MonoBehaviour9大生命周期 MonoBehaviour是一个基类,所有Unity脚本都派生自该类。 Awake():在脚本实例化时被调用。 Start():在Awake之后,Update之前调用 Update():每一帧都调用(不同环境频率不同) LateUpdate():在Update之后调用(一般用于摄像机跟随) FixedUpdate():每一帧都调用(固定频率...

ddef54114650的博客 628

基因家族快速鉴定指南:Windows平台下的HMMER实战解析

本文详细解析了在Windows平台下使用HMMER工具进行基因家族快速鉴定的完整实战流程。通过手把手指导,从软件获取、数据准备到模型构建与序列搜索,帮助生物信息学新手无需Linux环境,即可高效完成bZIP转录因子等家族的鉴定工作,大幅降低分析门槛。

weixin_29255731的博客 456

高效复用PCB设计:Cadence Sub-Drawing跨项目复制技巧

本文详细介绍了Cadence Allegro中Sub-Drawing功能的应用技巧,帮助PCB工程师高效复用成熟设计模块。通过分步教学,从精准导出到完美导入,并提供了解决坐标错位与DRC冲突的实用避坑指南。掌握这一技巧能显著提升设计效率,实现团队知识的标准化积累与快速复用。

weixin_29172201的博客 391

Unity中MonoBehaviour的生命周期详解

MonoBehaviour的生命周期涵盖了游戏对象从创建到销毁的整个过程。了解这些阶段及其调用顺序,对于正确实现各种功能至关重要。初始化阶段:设置对象的初始状态。启用阶段:使对象处于可交互状态。更新阶段:每一帧执行,用于实时交互。固定更新阶段:以固定的时间间隔执行,适用于物理计算。物理更新阶段:处理与物理相关的事件。禁用阶段:使对象处于不可交互状态。销毁阶段:移除对象及其资源。•定义:协程函数通常返回,并通过yield关键字暂停执行。•示例// 执行第一步// 等待1秒后执行第二步。

Front_Yue的博客 1890

【短距离通信】【WiFi】精讲802.11n/ac/ax mpdu和ampdu最大长度

在 Wi-Fi 标准(802.11n、802.11ac 和 802.11ax)中,和是数据传输的核心概念。理解它们各自的作用以及不同标准下的最大长度限制,有助于深入了解 Wi-Fi 的性能优化机制。以下是对802.11n802.11ac和802.11ax中MPDU和A-MPDU最大长度的详细技术分析和对比。1. MPDU 和 A-MPDU 的基本概念MPDU 是经过 MAC 层处理后的数据单元,主要由MAC层数据帧和物理层的传输头部(PHY headers)组成。

风云说通信 1107

【Unity入门】脚本生命周期简介及MonoBehaviour常用方法

脚本作为我们游戏的“灵魂”,往往不单独存在,而是经常作为组件的形式挂载到特定的游戏物体身上,比如: 游戏主角,敌人,Boss,子弹,建筑物…脚本的生命周期,也就是所挂载到的游戏物体的生命周期脚本的生命周期,就是挂载到的游戏物体“从出生到死亡”,所经历的一些事件。这些生命周期事件,是一些特定的方法,且是由 Unity 引擎事先定义好的,在游戏的运行过程中,由引擎自动调用。这些生命周期事件,全部定义的 MonoBehaviour 这个类中。也就意味着只有继承自这个类的脚本,才有这些生命周期事件。

希望有志同道合的的朋友可以互相学习! 2158

matlab SAR图像的多视滤波

单视复数数据(Single Look Comple)是原始的最高分辨率数据,但是从单个像元散射的雷达回波信号的相干叠加,导致强度信息有很多噪声。SAR的多视处理是对SLC数据方位向和/或距离向做平均,得到的结果是多视后的强度数据。多视处理可以提高SAR图像的信噪比,有效抑制斑点噪声,但是会降低方位分辨率。

点云侠的博客 533

C# MES通信从入门到精通(10)——C#使用HTTP的Post和Get方法和Mes系统通信

本文详细介绍了如何利用C#完成与HTTP协议的MES系统进行通信,通过POST和GET方法实现与MES系统的交互,由高级工程师的实战经验总结,实属C#与MES通信领域的葵花宝典!

qq_34059233的博客 3413

Unity MonoBehaviour 生命周期整理

先大体的给一个官方的Flowchart然后再说一些实际上可能出现的细节问题。 image.png 原图地址:https://docs.unity3d.com/uploads/Main/monobehaviour_flowchart.svg 就常用的函数来说顺序是这样的: Awake > OnEnable > Start > FixedUpdate >...

chqj_163的专栏 504

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Unity中的MonoBehaviour 及其生命周期

OnAnimatorIK 是一个 MonoBehaviour 的回调函数,它在动画器组件即将更新其内部反向动力学(IK)系统前被调用。这个回调可以用于设置 IK 目标的位置和权重,从而实现一些自定义的动画效果,如手部或足部的对准、头部的注视等¹。你可以重写这个函数,来控制你的角色的 IK 行为。

子燕若水的博客 1012

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Monobehaviour生命周期

转载:http://blog.youkuaiyun.com/qiupu4667/article/details/70215988?locationNum=10&fps=1 其实在刚接触Unity3D,会有一个疑问,关于Unity3D游戏运行的初始入口在哪?不像Cocos2dx还有个AppDelegate文件可以去理解。而且在刚开始就接触Unity3D时,看到所有脚本中编写的类 几乎都继承了

bread's code 1003

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

一图看懂Unity3d的MonoBehaviour脚本生命周期

linxinfa的专栏 1060

Unity3D MonoBehaviour 脚本生命周期全解

合理分层初始化、按频率分流逻辑、减少空 Update 与脚本数量,是工程实践的关键。生命周期是实时 3D 应用的核心运行时机制,定义了脚本从实例化到销毁的调用顺序与职责边界。场景三 启用/禁用与协程编排(OnEnable/OnDisable + Coroutine)场景四 全局应用回调(OnApplicationPause/Quit/Focus)的时机与差异,是写出稳定、高效、可维护代码的前提。场景二 物理与相机跟随(FixedUpdate + LateUpdate)渲染与事件阶段(常见)

走向CTO的路上... 922

MonoBehaviour的生命周期图​​​​​​​

http://www.richardfine.co.uk/2012/10/unity3d-monobehaviour-lifecycle/ MonoBehaviour的生命周期图

Peter的博客 288

Unity3d 中 MonoBehaviour 生命周期

MonoBehaviour Mono行为    一个游戏组件的脚本有一个生命周期——一开始实例化,直到结束实例被销毁。在这期间,他们有时候处于激活状态,有时候处于非激活状态;对于活动,对用户有时候可见,有时候不可见 本文主要讨论常见脚本的的生命周期:   如下图  常见的 script 执行方法和流程       上图为 常见见的脚本 方法

tintick的专栏 1093
上一篇: Unity3D脚本属性
下一篇: Func与Action委托泛型介绍
appppppen
博客等级 码龄11年 13粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值