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

ZEPETO脚本生命周期流程图
初始化事件
- 您可以使用初始化事件在更新之前调用初始化代码。
- Start函数在任何物理更新之前和第一帧之前被调用,而Awake函数在调用场景时为场景中的每个对象被调用。
- 不同对象的Start和Awake函数以随机顺序被调用,但所有Awake调用在Start被调用之前完成。
- 这意味着Start函数可以使用在Awake函数中之前进行的其他初始化。
定期更新事件
- 定期更新是指每帧调用的所有更新。
- 它们在每帧渲染之前改变对象的位置、状态和行为。
- ZEPETOScript为在更新函数中处理计算提供了指导。
物理事件
- 物理事件通过添加到GameObject中的脚本调用事件函数。
- 当接触发生、保持和断开时,调用OnCollisionEnter、OnCollisionStay和OnCollisionExit函数。
- 当对象碰撞体被配置为触发器时(即一个不对碰撞做物理反应而只是检测碰撞的碰撞体),调用OnTriggerEnter、OnTriggerStay和OnTriggerExit函数。
- 如果在物理更新期间检测到多个接触,这些函数可能会连续调用多次,因此会将提供碰撞详细信息(位置、对象身份)的参数发送到函数中。
GUI事件
- ZEPETOScript支持渲染GUI控件的事件,并对元素的点击做出反应。它们的工作方式与正常的帧更新不同,因此与UI相关的逻辑应放在OnGUI函数中。
鼠标事件
- 在ZEPETOScript中,支持响应鼠标交互的事件。
- 然而,鼠标事件需要在相关的GameObject上存在一个Collider或Collider2D,并且只有在该Collider被鼠标点击时才会触发。
- 当用户点击鼠标按钮时,会调用OnMouseDown()。
- 当用户释放鼠标按钮时,会调用OnMouseUp()。
- 当鼠标光标在GameObject的Collider或Collider2D上时,每帧都会调用OnMouseOver()。
终止事件
- 终止事件在场景中所有激活的对象中被调用。
- 当给定对象被禁用或处于非活动状态时,会调用OnDisable函数,并且在应用程序关闭之前,会在所有GameObjects上调用OnApplicationQuit。
ZEPETOScript固有支持的所有事件函数在下面的示例代码中列出。
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('应用程序退出。');
}
}
请查看下面的测试代码输出屏幕。

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