Listening events
Introduction
The Editor API provides some tools, such as decorators, to help listen for events globally and on nodes. In other words, for example with pointer events, the API can listen for events and pick the selected mesh in order to notify the decorated method(s).
For example, here is how to listen for the pointer tap event on the current mesh that has this script attached:
import { Mesh } from "@babylonjs/core/Meshes/mesh";import { Vector3 } from "@babylonjs/core/Maths/math.vector";import { PointerEventTypes, PointerInfo } from "@babylonjs/core/Events/pointerEvents";
import { onPointerEvent } from "../decorators";
export default class MyMeshComponent extends Mesh { private _physicsEnabled: boolean = true;
...
@onPointerEvent(PointerEventTypes.POINTERTAP, true) protected _tapped(info: PointerInfo): void { if (!this._physicsEnabled) { return; }
const force = this.getDirection(new Vector3(0, 0, 1)); this.applyImpulse(force, this.getAbsolutePosition()); }
...}Available Decorators
On Pointer Event
To listen for pointer events, the decorator @onPointerEvent can be used to decorate methods to call.
This decorator takes 2 arguments:
- the pointer event type (
PointerEventTypesfrom@babylonjs/core/Events/pointerEvents). - a boolean to indicate whether or not the method should be called only when, in the case of a mesh, the mesh is picked.
The second boolean parameter is set to true by default. That means it must be set to false in order to listen for
the pointer event globally.
@onPointerEvent(PointerEventTypes.POINTERTAP, false)protected _tapped(info: PointerInfo): void { // Called on the user clicks anywhere on the canvas.}
@onPointerEvent(PointerEventTypes.POINTERTAP, true)protected _tapped(info: PointerInfo): void { // Called on the user clicks on the mesh.}The method signature can define the PointerInfo reference, which contains all the pointer event info just as we get
using scene.onPointerObservable.add((info) => { ... }).
Note: the method will be called only if the scene containing the mesh is instantiated in the game/application
On Keyboard Event
As with the @onPointerEvent decorator, the @onKeyboardEvent decorator can be used to decorate methods in a script.
This decorator takes 2 arguments:
- the key or keys to listen for (as numbers or strings).
- the type of keyboard event to listen for (key up or key down).
Note: keyboard events are always listened globally
Example of listening for the z key being released:
@onKeyboardEvent("z", KeyboardEventTypes.KEYUP)protected _keyup(info: KeyboardInfo): void { console.log(info.event.key);}Multiple keys can be listened to at the same time, where the decorated method will be called when any of the specified keys is triggered:
@onKeyboardEvent(["z", "q", "s", "d"], KeyboardEventTypes.KEYUP)protected _keyup(info: KeyboardInfo): void { console.log(info.event.key);}Using key codes instead of key values is deprecated but is still supported.
@onKeyboardEvent(32 /* or [32, 53] for multiple keys */, KeyboardEventTypes.KEYUP)protected _keyup(info: KeyboardInfo): void { console.log(info.event.keyCode);}