Unity中函数调用顺序

文章详细介绍了Unity引擎中各种MonoBehaviour的生命周期方法,如Update、LateUpdate、FixedUpdate等,以及鼠标和碰撞事件处理函数,帮助开发者理解何时何地调用这些关键函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Update
当MonoBehaviour启用时,其Update在每一帧被调用。仅调用一次(每帧)

LateUpdate
当Behaviour启用时, 每帧调用一次;

FixedUpdate
当MonoBehaviour启用时,其 FixedUpdate 在每一帧被调用。可以多次调用,不能用于帧频很高的情况;

Awake
当一个脚本实例被载入时Awake被调用。

Start
Start仅在Update函数第一次被调用前调用。

Reset
重置为默认值。

OnMouseEnter
当鼠标进入到GUIElement(GUI元素)或Collider(碰撞体)中时调用OnMouseEnter。

OnMouseOver
当鼠标悬浮在GUIElement(GUI元素)或Collider(碰撞体)上时调用 OnMouseOver .

OnMouseExit
当鼠标移出GUIElement(GUI元素)或Collider(碰撞体)上时调用OnMouseExit。

OnMouseDown
当鼠标在GUIElement(GUI元素)或Collider(碰撞体)上点击时调用OnMouseDown。

OnMouseUp
当用户释放鼠标按钮时调用OnMouseUp。

OnMouseUpAsButton

OnMouseUpAsButton只有当鼠标在同一个GUIElement或Collider按下,在释放时调用。

OnMouseDrag
当用户鼠标拖拽GUIElement(GUI元素)或Collider(碰撞体)时调用 OnMouseDrag 。

OnTriggerEnter
当Collider(碰撞体)进入trigger(触发器)时调用OnTriggerEnter。

OnTriggerExit
当Collider(碰撞体)停止触发trigger(触发器)时调用OnTriggerExit。

OnTriggerStay
当碰撞体接触触发器时,OnTriggerStay将在每一帧被调用。

OnCollisionEnter
当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionEnter将被调用。

OnCollisionExit
当此collider/rigidbody停止触发另一个rigidbody/collider时,OnCollisionExit将被调用。

OnCollisionStay
当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionStay将会在每一帧被调用。

OnControllerColliderHit
在移动的时,当controller碰撞到collider时OnControllerColliderHit被调用。

OnJointBreak
当附在同一对象上的关节被断开时调用。

OnParticleCollision
当粒子碰到collider时被调用。

OnBecameVisible
当renderer(渲染器)在任何相机上可见时调用OnBecameVisible。

OnBecameInvisible
当renderer(渲染器)在任何相机上都不可见时调用OnBecameInvisible。

OnLevelWasLoaded
当一个新关卡被载入时此函数被调用。

OnEnable
当对象变为可用或激活状态时此函数被调用。

OnDisable
当对象变为不可用或非激活状态时此函数被调用。

OnDestroy
当MonoBehaviour将被销毁时,这个函数被调用。

OnPreCull
在相机消隐场景之前被调用。

OnPreRender
在相机渲染场景之前被调用。

OnPostRender
在相机完成场景渲染之后被调用。

OnRenderObject
在相机场景渲染完成后被调用。

OnWillRenderObject
如果对象可见每个相机都会调用它。

OnGUI
渲染和处理GUI事件时调用。每帧调用一次

OnRenderImage
当完成所有渲染图片后被调用,用来渲染图片后期效果。

OnDrawGizmosSelected
如果你想在物体被选中时绘制gizmos,执行这个函数。

OnDrawGizmos
如果你想绘制可被点选的gizmos,执行这个函数。

OnApplicationPause
当玩家暂停时发送到所有的游戏物体。

OnApplicationFocus
当玩家获得或失去焦点时发送给所有游戏物体。

OnApplicationQuit
在应用退出之前发送给所有的游戏物体。

OnPlayerConnected
当一个新玩家成功连接时在服务器上被调用。

OnServerInitialized
当Network.InitializeServer被调用并完成时,在服务器上调用这个函数。

OnConnectedToServer
当你成功连接到服务器时,在客户端调用。

OnPlayerDisconnected
当一个玩家从服务器上断开时在服务器端调用。

OnDisconnectedFromServer
当失去连接或从服务器端断开时在客户端调用。

OnFailedToConnect
当一个连接因为某些原因失败时在客户端调用。

OnFailedToConnectToMasterServer
当报告事件来自主服务器时在客户端或服务器端调用。

OnMasterServerEvent
当报告事件来自主服务器时在客户端或服务器端调用。

OnNetworkInstantiate
当一个物体使用Network.Instantiate进行网络初始化时调用。

OnSerializeNetworkView
在一个网络视图脚本中,用于自定义变量同步。

### Unity 生命周期函数调用顺序Unity 中,生命周期函数的执行顺序是固定且有序的。对于每个对象上的每个脚本实例而言,这些函数会依照特定序列被逐一触发。 #### 初始化阶段 - **Awake** 当场景加载完成之后,在任何 `Start` 方法前调用该方法。如果多个组件都定义了 `Awake()` 函数,则其实际调用次序不确定,不过开发者可以手动调整以确保预期行为[^2]。 - **OnBeforeTransformParentChanged (仅限于父物变换即将改变时)** 此回调会在当前 GameObject 的 Transform 即将成为另一个 GameObject 子节点之前立即得到通知。 - **OnInitAnimator (仅适用于带有 Animator 组件的对象)** 这是在初始化动画控制器时会调用的方法。 - **Start** 只有当 Script 实例第一次启用并准备开始工作的时候才会被执行一次;它通常位于第一个 Update 前面发生。 #### 更新循环 - **FixedUpdate** 物理计算和物理引擎相关的操作应该放置在此处,因为它是基于固定的时间间隔来进行更新而不是每一帧都刷新。 - **PreLateUpdate 和其他内部更新过程** 包含一系列由 Unity 自身管理的过程,比如摄像机渲染等。 - **Update** 是最常用的每帧更新逻辑所在位置,适合用来处理大多数的游戏逻辑业务,如输入检测、角色移动控制等等[^5]。 - **LateUpdate** 总是在常规 `Update` 循环结束后才运行,常用于跟随相机或者其他依赖于上一帧结果的操作。 #### 渲染相关 - **OnPostRender** 对应着每一个 Camera 执行完毕后的时刻,可用于自定义后期效果绘制等内容。 - **OnGUI/OnGUIScene(已废弃)** #### 销毁清理 - **OnDestroy** 在 MonoBehaviour 被销毁时调用,无论是通过代码还是由于场景切换等原因造成的卸载都会触发展开相应的资源释放动作。 #### 应用程序级别事件响应 - **OnApplicationPause(bool pauseStatus)** 表明应用程序进入暂停状态或是恢复活动状态之时所发生的事件。 - **OnApplicationFocus(bool focusStatus)** 用户界面获得或失去焦点的情况下将会激活此消息传递机制。 - **OnApplicationQuit()** 在应用正式结束前给予最后一次机会去执行必要的收尾任务,例如保存进度数据到持久化存储介质里[^4]。 ```csharp using UnityEngine; public class LifecycleExample : MonoBehaviour { void Awake(){ Debug.Log("Awake called"); } void OnEnable(){ Debug.Log("OnEnable called"); } void Start(){ Debug.Log("Start called"); } private void FixedUpdate(){ Debug.Log("FixedUpdate called"); } void Update(){ Debug.Log("Update called"); } void LateUpdate(){ Debug.Log("LateUpdate called"); } void OnDestroy(){ Debug.Log("OnDestroy called"); } void OnApplicationQuit(){ Debug.Log("OnApplicationQuit called"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值