---
title: 事件函数
slug: world-sdk-guide-ch/3MFIJMGmqDWgPRM0ge7J4
docTags: 
createdAt: 2024-09-02T08:34:13.135Z
---

事件函数是在Unity引擎中，GameObject或组件生命周期内自动调用的特殊函数，因此，它们也被称为生命周期事件函数。

事件函数由Unity引擎在特定时机自动调用。

事件函数是在Unity引擎中，GameObject或组件生命周期内自动调用的特殊函数，因此，它们也被称为生命周期事件函数。

![ZEPETO脚本生命周期流程图](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-W3Bs4OH3eIu7HCrvM8MgR-20240904-102409.png "ZEPETO脚本生命周期流程图")



## 初始化事件

- 您可以使用初始化事件在更新之前调用初始化代码。
- Start函数在任何物理更新之前和第一帧之前被调用，而Awake函数在调用场景时为场景中的每个对象被调用。

- 不同对象的Start和Awake函数以随机顺序被调用，但所有Awake调用在Start被调用之前完成。

- 这意味着Start函数可以使用在Awake函数中之前进行的其他初始化。



## 定期更新事件

- 定期更新是指每帧调用的所有更新。

- 它们在每帧渲染之前改变对象的位置、状态和行为。
- ZEPETOScript为在更新函数中处理计算提供了指导。
  &#x20;


## 物理事件

- 物理事件通过添加到GameObject中的脚本调用事件函数。
- 当接触发生、保持和断开时，调用OnCollisionEnter、OnCollisionStay和OnCollisionExit函数。

- 当对象碰撞体被配置为触发器时（即一个不对碰撞做物理反应而只是检测碰撞的碰撞体），调用OnTriggerEnter、OnTriggerStay和OnTriggerExit函数。
- 如果在物理更新期间检测到多个接触，这些函数可能会连续调用多次，因此会将提供碰撞详细信息（位置、对象身份）的参数发送到函数中。



## GUI事件

- ZEPETOScript支持渲染GUI控件的事件，并对元素的点击做出反应。它们的工作方式与正常的帧更新不同，因此与UI相关的逻辑应放在OnGUI函数中。
  &#x20;


## 鼠标事件

- 在ZEPETOScript中，支持响应鼠标交互的事件。
- 然而，鼠标事件需要在相关的GameObject上存在一个Collider或Collider2D，并且只有在该Collider被鼠标点击时才会触发。
- 当用户点击鼠标按钮时，会调用OnMouseDown()。
- 当用户释放鼠标按钮时，会调用OnMouseUp()。
- 当鼠标光标在GameObject的Collider或Collider2D上时，每帧都会调用OnMouseOver()。



## 终止事件

- 终止事件在场景中所有激活的对象中被调用。
- 当给定对象被禁用或处于非活动状态时，会调用OnDisable函数，并且在应用程序关闭之前，会在所有GameObjects上调用OnApplicationQuit。

:::hint{type="info"}
**📘 Unity事件函数**
[https://docs.unity3d.com/kr/current/Manual/EventFunctions.html](https://docs.unity3d.com/kr/current/Manual/EventFunctions.html)
:::



ZEPETOScript固有支持的所有事件函数在下面的示例代码中列出。

:::CodeblockTabs
示例\_单行为生命周期

```typescript
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { Collider, Collider2D, Collision, Collision2D } from 'UnityEngine';

export default class SampleMonoBehaviourLifeCycle extends ZepetoScriptBehaviour {

    Awake() {
        console.log('唤醒。');
    }
    OnEnable() {
        console.log('启用。');
    }
    Start() {
        console.log('开始。');
    }

    Update() {
        console.log('更新。');
    }
    FixedUpdate() {
        console.log('固定更新。');
    }
    LateUpdate() {
        console.log('延迟更新。');
    }

    OnDisable() {
        console.log('禁用。');
    }
    OnDestroy() {
        console.log('销毁。');
    }

    OnTriggerEnter(coll: Collider) {
        console.log(`触发进入 ${coll.gameObject.name}。`);
    }
    OnTriggerExit(coll: Collider) {
        console.log(`触发退出 ${coll.gameObject.name}。`);
    }
    OnTriggerStay(coll: Collider) {
        console.log(`触发停留 ${coll.gameObject.name}。`);
    }

    OnTriggerEnter2D(coll: Collider2D) {
        console.log(`触发进入2D ${coll.gameObject.name}。`);
    }
    OnTriggerExit2D(coll: Collider2D) {
        console.log(`触发退出2D ${coll.gameObject.name}。`);
    }
    OnTriggerStay2D(coll: Collider2D) {
        console.log(`触发停留2D ${coll.gameObject.name}。`);
    }

    OnCollisionEnter(coll: Collision) {
        console.log(`碰撞进入 ${coll.gameObject.name}。`);
    }
    OnCollisionExit(coll: Collision) {
        console.log(`碰撞退出 ${coll.gameObject.name}。`);
    }
    OnCollisionStay(coll: Collision) {
        console.log(`碰撞停留 ${coll.gameObject.name}。`);
    }

    OnCollisionEnter2D(coll: Collision2D) {
        console.log(`碰撞进入2D ${coll.gameObject.name}。`);
    }
    OnCollisionExit2D(coll: Collision2D) {
        console.log(`碰撞退出2D ${coll.gameObject.name}。`);
    }
    OnCollisionStay2D(coll: Collision2D) {
        console.log(`碰撞停留2D ${coll.gameObject.name}。`);
    }

    OnGUI() {
        console.log('GUI。');
    }
    OnMouseDown() {
        console.log('鼠标按下。');
    }
    OnMouseDrag() {
        console.log('鼠标拖动。');
    }
    OnMouseUp() {
        console.log('鼠标抬起。');
    }
    OnMouseEnter() {
        console.log('鼠标进入。');
    }
    OnMouseExit() {
        console.log('鼠标退出。');
    }
    OnMouseOver() {
        console.log('鼠标悬停。');
    }
    OnMouseUpAsButton() {
        console.log('鼠标抬起作为按钮。');
    }

    OnAnimatorIK(layerIndex: number) {
        console.log(`动画师IK ${layerIndex}。`);
    }

    OnApplicationFocus() {
        console.log('应用程序聚焦。');
    }
    OnApplicationPause() {
        console.log('应用程序暂停。');
    }
    OnApplicationQuit() {
        console.log('应用程序退出。');
    }

}
```
:::



请查看下面的测试代码输出屏幕。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-X6PplO2PMFFJT3KU2IIWT-20240904-102409.png)

您可以通过点击下面的链接了解更多关于ZEPETOScript提供的Unity事件函数的信息。

:::hint{type="info"}
**📘 事件函数的执行顺序**
[https://docs.unity3d.com/kr/current/Manual/ExecutionOrder.html](https://docs.unity3d.com/kr/current/Manual/ExecutionOrder.html)
:::

