player-physics

Installation
SKILL.md

Player Physics in Decentraland

Apply forces to the player's avatar using the Physics API from @dcl/sdk/ecs. All physics operations affect the local player only.

Authoring split

Force calls are runtime — they live in src/index.ts. The trigger entities that cause forces (the launch pad, the wind tunnel volume, the repulsion field marker) are static placements and belong in main-entities.ts with a Transform (and optional MeshRenderer / GltfContainer). Wire pointer/proximity events or trigger systems in src/index.ts to call the Physics.* methods.

Why this skill exists — the Transform mistake

The player's Transform (on engine.PlayerEntity) is engine-controlled and read-only from scene code. Writing to it via Transform.getMutable, Transform.createOrReplace, or direct .position / .rotation mutation silently does nothing — the code compiles, the system ticks, no error is thrown, and the avatar never moves.

If your goal is to lift, float, push, knock back, or apply any sustained force to the player, use this skill's Physics API. For instant teleports / smooth slides to a specific position, use movePlayerTo from ~system/RestrictedActions (skill: player-avatar).

// WRONG — has no effect in-world
const t = Transform.getMutable(engine.PlayerEntity)
t.position.y += 0.1   // ignored every frame
Installs
7
GitHub Stars
17
First Seen
May 26, 2026
player-physics — dcl-regenesislabs/opendcl