【Unity】一文了解生命周期

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


前言

又新开一个坑,这个系列主要是记录Unity的干货,就不像之前那几个有点口水话了233 当然我会改正

时隔半个月 经历了开学 换教室等等一系列杂七杂八的事情也算步入正轨了~

没杂七杂八的介绍什么,不水字数,直接开干!(暴论)


一、生命周期

编写顺序会严格按照真实的生命周期顺序 自上而下 具体图片请baidu

1. Editor (编译)

变量声明赋值

变量最终的值只看最后调用的方法,因为会逐步覆盖
变量声明并直接赋值>>检视面板赋值>>Awake>>OnEnable>>Start>>外部赋值(在其他脚本调用变量赋值)

我们一般对一个对象赋值,或者说想要从外部一个对象的属性或者成员变量的值进行更改的前提是:这个对象已经有了(意味着已经初始化Strart方法已经调用)所以外部赋值会后语Start方法进行调用

Reset()(重置)

初始化数值 用于角色等信息更改后初始化

  • 调用情况
    此函数只能在编辑器模式下(不运行)调用
  • 调用时间,次数与作用
    当脚本第一次挂载到对象或者使用了Reset命令之后调用。
    来初始化脚本的各个属性,Reset方法最常用于在检视面板中提供良好的默认值
  • 使用
    • 将脚本挂在物体上
    • 点击脚本右上角三个点 点击Reset 即可执行Reset命令,一般用于重赋值
      【Unity】一文了解生命周期

2. Initialization (初始化)

Awark()(唤醒)

从非激活状态转激活状态会调用一次 创建游戏物体后会调用一次 场景启动会调用一次

  • 调用情况
    • 在加载场景时初始化包含脚本的激活状态的GameObject时
    • GameObject从非激活转变为激活状态
    • 在初始化使用Instantite创建的GameObject之后
  • 调用时间,次数与作用
    • 在脚本实例的生存期内,Unity仅调用Awake-次。脚本的生存期持续到包含它的场景被卸载为止。
    • Unity调用每个Game0b ject的Awake的顺序是不确定的,人为干涉(即设计)来保证程序的正确性和稳定性
    • Awake 来代替构造函数进行初始化,在Unity这里,组件的初始化不使用构造函数

OnEnable (激活)

游戏物体被激活 调用
脚本组件被激活 调用

  • 调用情况
    • 游戏物体被激活
    • 脚本组件被激活
  • 调用时间,次数与作用
    • 重复赋值 变回初始状态

Start()(开始)

只会在首次和初次调用,且仅调用一次

  • 调用情况
    • 游戏物体被激活
    • 脚本组件被激活
  • 调用时间,次数与作用
    • 在脚本实例激活时在第一帧的Update之前被调用
    • 后与 Awake 执行,方便控制逻辑的前后调用顺序

外部赋值

如使用B类持有A类引用给其中变量赋值
如果在B类中的Start方法中赋值则顺序末知
因为不同类的相同初始化方法的执行顺序随机


3. Physis (物理检测)

FixedUpdate() (固定刷新)

每0.02秒嗲用一次,且早于Update

  • 调用情况
    • 游戏物体被激活
    • 脚本组件被激活
  • 调用时间,次数与作用
    • 每0.02秒嗲用一次,早于Update

yield WaitForFixedUpdate

暂时挂起直到固定更新执行一次

OnTriggerXXX (触发检测)

OnCollisionXXX (碰撞检测)


4. Input events (输入检测)

OnMouseXXX

鼠标输入检测


5. Game logic(游戏逻辑)

Update() (更新)

每帧调用

  • 调用情况
    • 游戏物体被激活
    • 脚本组件被激活
  • 调用时间,次数与作用
    • 每帧调用,是最常见用的函数,每秒调用60次左右(根据当前电脑的性能和状态)
    • 实时更新数据,接收输入数据

yield null (暂缓一帧,在下一帧接着往下处理)

这边

yield WaitForSeconds(协程等待的方法)

yield WWW (等待web请求完成(恢复为WaitForSeconds或null))

yield StartCoroutine (开启协程)

LateUpdate() (延迟更新)

一帧中 在Update之后调用 / 每帧的末尾被调用
例如摄像机移动,可以放在这,人物移动放在Update 因为摄像机大部分都是要比人物后移动

  • 调用情况
    • 游戏物体被激活
    • 脚本组件被激活
  • 调用时间,次数与作用
    • LateUpdate在调用所有Update函数后调用,每秒调用60次作用

6. Scene rendering (场景渲染)

OnWillRenderObject (即将渲染物体)

物体被当前场景的摄像机看见(不能是UI物体)调用

  • 调用情况
    • 如果对象可见并且不是 UI 元素,则为每个摄像机调用 OnWillRenderObject
    • 如果禁用了 MonoBehaviour,则不会调用该函数。
    • 该函数在剔除处理期间(即将渲染每个剔除的对象时)调用
    • 从 UI 元素调用时无效
  • 调用时间,次数与作用
    • 每帧将调用多次,调用频率目测和Update类似
  • 实验代码
    • 挂载到想被看见的物体上即可【Unity】一文了解生命周期

OnPreCull

``不好说 说什么的都有 有大佬知道可以留言 - 调用情况
- 在相机消隐场景之前被调用。
- `在相机开始渲染场景之前调用此函数。
- 该函数在剔除处理期间(即将渲染每个剔除的对象时)调用
- 这个函数仅用于宿主为摄像机的脚本。当此摄像机剔除了某个渲染场景时候触发此消息

  • 调用时间,次数与作用
    • 貌似渲染前还是渲染后都会调用

OnBecameVisible&OnBecameInvisible (即将课件&即将不可见)

表示当该物体上挂载的脚本中有这个函数时,进入当前摄像机渲染的画面时调用该函数

  • 调用情况

    • 在 Editor (编辑器)中运行时,Scene 视图摄像机也会导致调用该函数,如果物体已被该摄像机渲染则其他摄像机将无法触发调用
      【Unity】一文了解生命周期

    如图所示该物体(cube)已经被Scene 视图摄像机给渲染,调用了一次OnBecameVisible函数,当主摄像机(Main Camera)进入时则不再会触发,离开时也不会触发OnBecameInvisible函数

    • `缺少MeshRenderer组件或未激活则不会调用。
    • 场景中有个多摄像机,如果物体(cube)被其中一个摄像机给渲染则其余的摄像机再次进入也不会再次触发OnBecameVisible函数,离开时也不会触发OnBecameInvisible函数(跟1同理)
  • 调用时间,次数与作用

    • 渲染成功一次 离开一次

OnPreRender (即将渲染)

``Unity 在相机渲染场景之前调用的事件函数。 个人感觉编辑器环境下 Scene窗口已经渲染完成了 所以不能触发 个人拙见

OnPostRender (渲染完成)

``Unity 在相机渲染场景之后调用的事件函数。 个人感觉编辑器环境下 Scene窗口已经渲染完成了 所以不能触发 个人拙见
上述两个好像都要挂载到摄像机才执行

OnRenderImage

效果和上述一致
具体原理请参考这个播客(现在还太菜了=0=)

OnRenderImage原理


7.Gizmo rendering (自写工具类)

OnGrawGizmos(Gizmos渲染)

Gizmos一般是为开发者使用的,指的是开发时场景编辑器中所展示的那些相机、线框之类的物体。所以此方法里的内容一般不会需要发布到生产环境中。


8. Gui rendering(Gui渲染)

OnGUI (用户界面渲染的工作会在这一步执行。)


9. End of frame(结束帧)

yield WaitForEndOfFrame (协程:帧结束)

暂时挂起直到关闭窗口

当前帧彻底结束后会执行此协程。:


10. Pausing (暂停阶段)

OnApplicationPause (应用暂停)

应用暂停时会调用此方法,取消暂停后会从FixedUpdate开始重新执行。


11. OnDisable/Enable (脚本被禁用/激活)

游戏物体被禁用 调用
脚本组件被禁止 调用
游戏物体被销毁 调用

  • 调用情况
    • 游戏物体被禁用
    • 脚本组件被销毁
  • 调用时间,次数与作用
    • 满足调用情况时即时调用一次,用于一些对象的状态重置,资源回收与清理

12. Decommissioning (退出阶段)

OnDestroy (销毁)

场景或游戏结束/关闭 调用
脚本的删除 调用
挂载物体的删除 调用

  • 调用情况
    • 场景或游戏结束时
    • 停止播放模式将终止应用程序时
    • 网页视图关闭时
    • 当前脚本被移除时
    • 当前脚本挂载到的游戏物体被删除时
  • 调用时间,次数与作用
    • 满足调用情况时即时调用一次,用于一些游戏物体的销毁

OnApplicationQuit (程序退出)

程序退出 调用

  • 调用情况
    • 在程序退出之前所有游戏对象都会调用这个函数
    • 在编辑器中会在用户终止播放时
    • 在网页视图关闭时
  • 调用时间,次数与作用
    • 满足调用情况时即时调用一次,用于处理一些游戏退出后的逻辑

总结

刷了一遍API 发现自己还是有很多不懂的 图形渲染顺序和流程什么的;X
希望以后的我能将这篇文章继续更新,争取全部搞懂!文章来源地址https://www.toymoban.com/news/detail-421675.html

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

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

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

相关文章

  • 【Spring 】执行流程解析:了解Bean的作用域及生命周期

     哈喽,哈喽,大家好~ 我是你们的老朋友: 保护小周ღ    今天给大家带来的是 Spring 项目的执行流程解析  和 Bean 对象的6 种作用域 以及 生命周期 , 本文将为大家讲解,一起来看看叭~ 本期收录于博主的专栏 :JavaEE_保护小周ღ的博客-CSDN博客 适用于编程初学者,感兴趣

    2024年02月16日
    浏览(41)
  • Unity-Unity脚本生命周期

    Unity脚本生命周期是指在Unity游戏引擎中,脚本在运行过程中所经历的各个阶段。这些阶段包括:初始化、更新、固定更新、销毁等。下面我们来详细讲解一下Unity脚本生命周期的各个阶段。 1. Awake Awake是脚本的初始化阶段,当脚本被实例化时,Awake函数会被调用且只执行一次

    2024年02月14日
    浏览(38)
  • 【Unity学习笔记】生命周期

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

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

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

    2024年02月03日
    浏览(37)
  • Unity 脚本的生命周期

    Unity 脚本的生命周期有哪些?什么时机会触发/执行?什么时候用? 手册 Unity 手册地址 生命周期 初始化 方法说明: Awake:当物体载入时立即调用一次,在 Start 函数之前调用。 OnEnable:在脚本对象启用时调用。 Start:仅当启用脚本实例时,才会在第一帧调用。 Reset:编辑器下

    2024年04月09日
    浏览(70)
  • 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日
    浏览(40)
  • 创建javaEE项目(无maven),JSP(九大内置对象)、Servlet(生命周期)了解

    1.创建一个普通的java项目 2.项目根目录右键,添加模板 3.配置tomcat服务器 4.配置项目tomcat依赖         用户通过浏览器发送一个请求,服务器tomcat接收到后,解析web.xml配置文件进行分析执行接口对应的类;         Tomcat服务器支持:支持Servlet规范。而要想让它能找到

    2024年02月05日
    浏览(51)
  • Unity之组件的生命周期

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

    2024年02月02日
    浏览(38)
  • 【Unity学习日记01】Unity的生命周期

    参考:Unity官方手册以及Unity生命周期 Unity的生命周期指的是Unity脚本从唤醒到销毁的过程,在这个过程里,Unity脚本会按预定顺序执行大量事件函数。 这些函数全部都是系统定义好的,需要继承MonoBehaviour类才能调用。脚本需要挂在任意游戏对象上,并且一个游戏对象可以挂载

    2024年02月11日
    浏览(36)
  • 【JavaEE】深入了解Spring中Bean的可见范围(作用域)以及前世今生(生命周期)

    【JavaEE】Spring的开发要点总结(4) 在学习Spring中,Bean是最核心的操作资源 使用学习Bean对象是一个重点,我们已经知道如何存储它,获取它,现在我们要知道: 它的作用域,我们才可以知道怎么使用,才能得心应手,符合预期~ 它的生命周期,我们才能更加清楚的了解它的

    2024年02月14日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包