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

unity生命周期

unity的生命周期

  • 都是有序的
      • 1. 实例化与初始化阶段
        • Awake()
        • OnEnable()
      • 2. 开始与更新阶段
        • Start()
        • FixedUpdate()
        • Update()
        • LateUpdate()
      • 3. 渲染阶段
        • OnPreCull()
        • OnBecameVisible() 和 OnBecameInvisible()
        • OnWillRenderObject()
        • OnRenderObject()
        • OnPostRender()
      • 4. 销毁阶段
        • OnDisable()
        • OnDestroy()

都是有序的

1. 实例化与初始化阶段

Awake()

调用时机:当脚本实例被载入时调用,在场景加载时,每个对象的脚本实例创建后立即执行,无论脚本是否启用
用途:常用于进行基本的初始化操作,如变量赋值、查找组件引用等,因为此时所有对象的脚本实例都已创建,适合建立对象间的初始关联。

OnEnable()

调用时机:在对象被启用或者脚本被激活时调用。如果对象在场景加载时就处于启用状态,会在 Awake 之后立即调用;若对象在运行时被禁用后又重新启用,此方法也会再次被调用。
用途:适合执行需要在对象启用时进行的操作,例如重置状态、订阅事件等。

2. 开始与更新阶段

Start()

调用时机:仅在脚本实例启用后的第一帧调用,且只会调用一次,在 Awake 和 OnEnable 之后执行
用途:常用于那些依赖于其他对象初始化完成的操作,因为此时场景中所有对象的 Awake 和 OnEnable 方法都已执行完毕。

FixedUpdate()

调用时机:以固定的时间间隔被调用,其调用频率由 Time.fixedDeltaTime 决定,默认值为 0.02 秒(即每秒 50 次)。它与帧率无关,适合进行物理模拟相关的操作。
用途:常用于处理物理计算,如刚体的移动、力的施加等,确保物理模拟的稳定性。

Update()

调用时机:每帧调用一次,其调用频率取决于游戏的帧率。帧率越高,Update 方法被调用的次数就越多。
用途:用于处理游戏中的常规逻辑,如玩家输入处理、对象的移动和旋转等。

LateUpdate()

调用时机:在 Update 方法调用之后的每帧调用。这意味着它会在所有 Update 方法执行完毕后才执行。
用途:常用于处理那些依赖于 Update 中对象状态变化的操作,例如相机跟随玩家角色,确保相机在玩家移动后再进行位置更新。

3. 渲染阶段

OnPreCull()

调用时机:在相机剔除场景中的对象之前调用。剔除是指相机决定哪些对象在视野范围内,哪些对象不在视野范围内的过程
用途:可用于在相机剔除对象之前对场景进行一些预处理,如动态调整对象的渲染状态。

OnBecameVisible() 和 OnBecameInvisible()

调用时机:当对象对任何相机变得可见或不可见时分别调用。
用途:可以用于优化性能,例如当对象不可见时停止某些不必要的计算或动画。

OnWillRenderObject()

调用时机:当对象即将被渲染时,也就是在经过相机剔除确定对象处于视野范围内(不包括被Setactive.false的对象),且即将开始对该对象进行实际渲染操作之前,OnWillRenderObject() 会被调用。每个相机渲染该对象时都会触发此方法,可用于在对象渲染前进行特殊的渲染设置或效果处理。
用途:可用于在对象渲染前进行一些特殊的渲染设置或效果处理。

OnRenderObject()

调用时机:在所有常规渲染完成后调用,允许手动渲染自定义的图形或效果。
用途:用于实现自定义的渲染逻辑,如绘制额外的线条、图形等。

OnPostRender()

调用时机:在相机完成渲染后调用
用途:可用于在相机渲染完成后进行一些后处理操作,如添加屏幕特效。

4. 销毁阶段

OnDisable()

调用时机:当对象被禁用或者脚本被停用(如脚本组件被取消勾选)时调用。
用途:常用于执行一些清理操作,如取消订阅事件、释放资源等。

OnDestroy()

调用时机:当脚本实例即将被销毁时调用,例如当对象被删除或场景被卸载时。
用途:用于进行最后的清理工作,确保释放所有占用的资源


http://www.kler.cn/a/587190.html

相关文章:

  • vue埋点
  • Python实现NOA星雀优化算法优化随机森林分类模型项目实战
  • 前端工程化之前端工程化详解 包管理工具
  • Haskell语言的二进制与编码
  • 基于隐私计算的数据共享与分析平台V1.0源代码说明文档
  • AtCoder AT_abc397_d [ABC397D] Cubes
  • leetcode hot100普通动态规划/基础DP
  • OpenHarmony-SELinux配置
  • R语言高效数据处理-自定义格式EXCEL数据输出
  • 洞悉C++内存结构:解锁深层优化潜力
  • redis主从搭建
  • 《鸿蒙系统下AI模型训练加速:时间成本的深度剖析与优化策略》
  • 【ElasticSearch】学习笔记
  • 如何让ai问答机器人通人性?
  • Day16:最小的k个数
  • craftjs的示例landing项目改成APP路由
  • 我与DeepSeek读《大型网站技术架构》- 总结
  • 【零基础入门unity游戏开发——unity3D篇】物理系统 —— 3D物理材质Physics Material
  • 解锁下一代AI应用:开源项目mcp-server-qdrant如何重塑向量数据库管理?
  • EasyCVR安防视频汇聚平台助力工业园区构建“感、存、知、用”一体化智能监管体系