Unity 脚本的生命周期

简介: Unity 脚本的生命周期

脚本的生命周期(MonoBehaviour Lifecycle)是Unity官方给出的术语。实际上我们可以简单地将它理解为,一个脚本的创建和销毁两个关键事件,以及在此过程中可能触发的各种事件。这里最关心的是所有事件的种类,以及它们的触发事件,因为脚本逻辑只有写在合适的事件里,且在合适的时机执行,在能恰到好处实现想要的功能。


理解脚本的生命周期

首先要确认,脚本虽然功能强大,但它毕竟是Unity的众多系统之一,完全受到引擎的管理。在脚本中可以编写各种功能,但什么时候脚本会被调用,完全由Unity决定。

以熟悉的Start方法和Update方法为例。当在组件脚本中写下Update方法时,就意味着向引擎"注册"了更新事件。当引擎对所有组件执行更新操作时,也会稍带着这个脚本组件。反过来说,如果没有定义Update方法,那么引擎在更新时,就会跳过这个脚本。

可以把引擎每一帧需要做的事,想象成在标准跑道上跑一圈。在跑一圈的过程中会有很多项常规工作,也有一些突发事件需要处理。引擎允许脚本订阅它所挂载物体的各类事件,并运行相应方法。这些事件的种类众多,大体上包括了初始化、物理计算、更新、渲染和析构等方面。

常见的事件方法

事件

说明

Awake

脚本被加载后调用,时机早于Start

Start

脚本可用的第一帧,正好在第一次Update之前调用

Update

每帧调用

LateUpdate

每帧调用,保证在所有的Update执行过后才执行

FixedUpdate

物理更新,会尽可能保证调用频率

OnCollisionEnter

碰撞开始事件

OnCollisionStay

碰撞持续中

OncollisionExit

结束碰撞

OnTriggerEnter

触发器开始事件

OnTriggerStay

触发持续

OnTriggerExit

触发器结束事件

OnParticleCollision

粒子碰撞时间,Unity的粒子系统也支持物理特性

OnParticleSystemStopped

粒子系统结束

OnParticleTrigger

粒子触发器事件

OnGUI

渲染与处理GUI事件时调用

OnEnable

物体被激活时调用

OnDisable

物体被禁用时调用

OnDestroy

销毁组件时调用

OnPreRender

即将渲染事件,某个摄像机渲染场景时调用

OnRenderObject

渲染事件,某个摄像机渲染场景时调用

OnPostRender

渲染事件后,某个摄像机结束渲染时调用

OnWillRenderObject

每个摄像机渲染非UI的可见物体时调用

OnPreCull

摄像机进行可见性裁剪之前使用

OnTransformChildrenChanged

物体的子物体发生变化时调用

OnTransformParentChanged

物体的父物体发生变化时调用

OnApplicationFocus

Game窗口失去或获得焦点时调用

OnApplicationPause

游戏被暂停时调用

OnApplicationQuit

游戏退出时调用

OnBecameVisible

物体变得可见时调用

OnBecameInvisible

物体变得不可见时调用

OnMouseDown

鼠标在UI元或碰撞体上摁下时调用

OnMouseDrag

鼠标在UI元或碰撞体上持续摁下时调用

OnMouseEnter

鼠标进入UI元素或碰撞体范围时调用

OnMouseExit

鼠标离开UI元素或碰撞体范围时调用

OnMouseOver

鼠标在UI元素u或碰撞体范围内时,每帧调用

OnMouseUp

用户放开鼠标键时调用

OnMouseUpAsButton

用户在同一个UI元素或碰撞体上,松开鼠标按键时调用

 


相关文章
|
存储 人工智能 Java
Unity优化——脚本优化策略4
Unity优化——脚本优化策略4
175 0
|
4月前
|
图形学 开发者
Unity编辑器脚本(添加/删除)碰撞盒
这段代码提供了两个Unity编辑器工具,用于批量处理模型的碰撞盒。一是“一键添加所有碰撞盒”,通过选择模型的父物体,自动为其子物体添加`MeshCollider`。二是“一键清理所有Collider碰撞盒”,同样选择父物体后,递归删除子物体上的`BoxCollider`组件。两者均通过Unity的菜单项实现便捷操作,方便开发者快速调整场景中的物理属性。
|
9月前
|
设计模式 存储 人工智能
深度解析Unity游戏开发:从零构建可扩展与可维护的游戏架构,让你的游戏项目在模块化设计、脚本对象运用及状态模式处理中焕发新生,实现高效迭代与团队协作的完美平衡之路
【9月更文挑战第1天】游戏开发中的架构设计是项目成功的关键。良好的架构能提升开发效率并确保项目的长期可维护性和可扩展性。在使用Unity引擎时,合理的架构尤为重要。本文探讨了如何在Unity中实现可扩展且易维护的游戏架构,包括模块化设计、使用脚本对象管理数据、应用设计模式(如状态模式)及采用MVC/MVVM架构模式。通过这些方法,可以显著提高开发效率和游戏质量。例如,模块化设计将游戏拆分为独立模块。
576 3
|
9月前
|
图形学 开发者 UED
Unity游戏开发必备技巧:深度解析事件系统运用之道,从生命周期回调到自定义事件,打造高效逻辑与流畅交互的全方位指南
【8月更文挑战第31天】在游戏开发中,事件系统是连接游戏逻辑与用户交互的关键。Unity提供了多种机制处理事件,如MonoBehaviour生命周期回调、事件系统组件及自定义事件。本文介绍如何有效利用这些机制,包括创建自定义事件和使用Unity内置事件系统提升游戏体验。通过合理安排代码执行时机,如在Awake、Start等方法中初始化组件,以及使用委托和事件处理复杂逻辑,可以使游戏更加高效且逻辑清晰。掌握这些技巧有助于开发者更好地应对游戏开发挑战。
399 0
|
10月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
380 0
|
12月前
|
人工智能 图形学
【unity小技巧】使用动画状态机脚本实现一个简单3d敌人AI功能
【unity小技巧】使用动画状态机脚本实现一个简单3d敌人AI功能
165 0
|
12月前
|
人工智能 定位技术 图形学
【Unity小技巧】一个脚本实现控制3D远程/近战敌人AI
【Unity小技巧】一个脚本实现控制3D远程/近战敌人AI
159 0
|
12月前
|
自然语言处理 图形学
【unity实战】一个通用的FPS枪支不同武器射击控制脚本
【unity实战】一个通用的FPS枪支不同武器射击控制脚本
329 0
|
12月前
|
程序员 图形学 Android开发
Unity脚本生命周期
Unity脚本生命周期
|
存储 人工智能 缓存
Unity优化——脚本优化策略3
Unity优化——脚本优化策略3
151 0