> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-es/scenes-sdk7/interactividad/avatares/locomotion.md).

# Configuración y restricciones de locomoción

Cambia la velocidad y la altura del salto del jugador, o restringe cómo puede moverse

Puedes cambiar cómo se mueve el avatar del jugador mientras está dentro de tu escena. Usa el `AvatarLocomotionSettings` componente para ajustar velocidades y alturas de salto, y el `InputModifier` componente para congelar al jugador o bloquear tipos específicos de movimiento. Ambos componentes se colocan en `engine.PlayerEntity`, y ambos solo surten efecto mientras el jugador está dentro de los límites de tu escena.

## Configuración de locomoción

Puedes afectar la locomoción del jugador, como su velocidad de carrera, altura de salto y más. Esto se puede alterar dinámicamente, por ejemplo para permitir que un jugador obtenga un aumento temporal de velocidad al interactuar con un objeto, o para deshabilitar la capacidad del jugador de saltar durante un breve período de tiempo.

{% hint style="info" %}
**💡 Consejo**: Puedes establecer estos valores sin escribir código. Arrastra el **Configuración de locomoción** smart item en tu escena en el [Scene Editor en Creator Hub](/creator/content-creator-es/scene-editor/primeros-pasos/about-editor.md) y mueve sus deslizadores. Consulta [Ajustes de locomoción](/creator/content-creator-es/scene-editor/interactividad/smart-items.md#locomotion-settings).
{% endhint %}

Para hacerlo, añade un `AvatarLocomotionSettings` componente al `engine.PlayerEntity`.

```ts
import {AvatarLocomotionSettings, engine} from '@dcl/sdk/ecs'

AvatarLocomotionSettings.create(engine.PlayerEntity, {
	runSpeed: 10,
	jumpHeight: 2,
})
```

Las siguientes propiedades están disponibles:

* `walkSpeed`: La velocidad a la que el jugador camina, en metros por segundo. En el cliente de escritorio, los jugadores caminan al presionar la tecla Control.
* `jogSpeed`: La velocidad a la que el jugador trota, en metros por segundo. Esta es la forma predeterminada en que se mueve el jugador.
* `runSpeed`: La velocidad a la que el jugador corre, en metros por segundo. En el cliente de escritorio, los jugadores corren al presionar la tecla Shift.
* `jumpHeight`: La altura a la que el jugador salta, en metros.
* `runJumpHeight`: La altura a la que el jugador salta después de correr, en metros.
* `doubleJumpHeight`: La altura del segundo salto al hacer doble salto, en metros.
* `glidingSpeed`: La velocidad horizontal a la que se mueve el jugador mientras planea, en metros por segundo.
* `glidingFallingSpeed`: La velocidad máxima de caída del jugador mientras planea, en metros por segundo. Esto solo limita el descenso del jugador: el movimiento ascendente, como un impulso de una fuerza continua de la escena, no está limitado.
* `hardLandingCooldown`: El tiempo de espera después de un aterrizaje brusco, en segundos. Este es el tiempo que el jugador debe esperar antes de poder moverse de nuevo después de caer desde una gran altura.

Como referencia, aquí están los valores predeterminados de esas propiedades:

* `walkSpeed`: 1.5 m/s
* `jogSpeed`: 8 m/s
* `runSpeed`: 10 m/s
* `glidingSpeed`: 6 m/s
* `glidingFallingSpeed`: 1 m/s
* `jumpHeight`: 1 m
* `runJumpHeight`: 1.5 m
* `doubleJumpHeight`: 2 m
* `hardLandingCooldown`: 0.75 s

{% hint style="info" %}
**💡 Consejo**: Mientras planea, las fuerzas continuas aplicadas por la escena son 1.5 veces más fuertes, y las fuerzas ascendentes pueden elevar al jugador. Consulta [Fuerzas mientras planea](/creator/content-creator-es/scenes-sdk7/interactividad/player-physics.md#forces-while-gliding).
{% endhint %}

{% hint style="info" %}
**💡 Consejo**: Ninguna de estas propiedades puede ser menor que 0. Si estableces alguna de ellas en un valor negativo, se limitará a 0. Establecer estos valores en cero tendrá el mismo efecto que usar el `InputModifier` para bloquear el uso de ciertas teclas.

Solo puedes afectar la locomoción del jugador si está dentro de los límites de la escena. Para afectar los avatares de otros jugadores, debes ejecutar el código que afecta su locomoción en su propia instancia.
{% endhint %}

Puedes crear un [proyecto de smart wearable](/creator/content-creator-es/scenes-sdk7/tipos-de-proyectos/smart-wearables.md) que haga que el jugador siempre corra más rápido o salte más alto. Si tanto la escena como un smart wearable definen valores distintos para estos parámetros, siempre se usan los valores de la escena.

Para asegurarte de que nadie tenga ventajas injustas en una escena de parkour, puedes aplicar los parámetros predeterminados añadiendo explícitamente sus valores predeterminados en tu escena:

```ts
import {AvatarLocomotionSettings, engine} from '@dcl/sdk/ecs'

AvatarLocomotionSettings.create(engine.PlayerEntity, {
	runSpeed: 10,
	walkSpeed: 1.5,
	jogSpeed: 8 ,
	jumpHeight: 1,
	runJumpHeight: 1.5,
	hardLandingCooldown: 0.75
})
```

## Restringir la locomoción

Puedes restringir qué acciones puede realizar el jugador en tu escena. Úsalo para congelar al jugador o para restringir formas específicas de locomoción, por ejemplo para impedir que el jugador salte o corra.

### Congelar al jugador

Puedes congelar al jugador para que ninguna de las teclas de entrada pueda mover el avatar. Esto puede ser útil para muchas mecánicas de juego. También es una buena práctica congelar a un jugador mientras realiza una animación importante que no debería interrumpirse por el movimiento, o mientras un [Virtual Camera](/creator/content-creator-es/scenes-sdk7/fundamentos-del-contenido-3d/camera.md) apunta lejos del avatar y no quieres que el jugador se mueva a ciegas.

Usa el `InputModifier` componente en el `engine.PlayerEntity` para impedir que las entradas del jugador afecten la locomoción del avatar. El avatar permanecerá quieto; el jugador solo podrá rotar la cámara.

```ts
import {InputModifier, engine} from '@dcl/sdk/ecs'

InputModifier.create(engine.PlayerEntity, {
	mode: InputModifier.Mode.Standard({
		disableAll: true,
	}),
})
```

Ten en cuenta las siguientes consideraciones:

* Mientras las interacciones del jugador están deshabilitadas, su avatar sigue viéndose afectado por fuerzas externas, como la gravedad o las plataformas móviles.
* El `InputModifier` componente solo puede usarse con la `engine.PlayerEntity` entidad. Solo puede afectar al jugador actual; no puede afectar a otros jugadores.
* Este componente solo afecta al jugador mientras el avatar está dentro de los límites de tu escena. Su locomoción deja de estar restringida en cuanto sale de la escena.
* Mientras las interacciones del jugador están deshabilitadas, el jugador no puede realizar emotes libremente, pero la escena puede activar animaciones en el avatar.
* Las entradas del jugador no afectan al avatar, pero las [eventos de entrada globales](/creator/content-creator-es/scenes-sdk7/interactividad/eventos-de-button/system-based-events.md#global-input-events) aún pueden ser escuchadas por la escena. Podrías usarlas para controlar un vehículo, o usar un [Virtual Camera](/creator/content-creator-es/scenes-sdk7/fundamentos-del-contenido-3d/camera.md) para seguir a otra entidad mientras se mueve, tratándola como un avatar alternativo.

### Restringir tipos específicos de locomoción

En lugar de congelar por completo al jugador, puedes restringir ciertas formas específicas de locomoción del jugador. Esto podría usarse por razones de jugabilidad, por ejemplo para preservar la dificultad de un juego de plataformas impidiendo el doble salto y el planeo. Estas habilidades incluso podrían alternarse dinámicamente como mecánica de juego, por ejemplo dando al jugador una barra de resistencia y evitando que corra cuando se agota. También podría usarse para definir el tono de una escena, por ejemplo impidiendo correr o saltar en un lugar que se supone sereno. El `InputModifier` incluye las siguientes opciones:

* `disableWalk`: El jugador no puede caminar lentamente (presionando Control). Si el jugador intenta caminar, en su lugar trotarán o correrán, si está permitido.
* `disableRun`: El jugador no puede correr (presionando Shift). Si el jugador intenta correr, en su lugar trotará, si está permitido.
* `disableJog`: El jugador no puede trotar (esta es la velocidad de movimiento predeterminada). Si el jugador intenta trotar, en su lugar correrá o caminará, si está permitido.
* `disableJump`: El jugador no puede saltar.
* `disableEmote`: El jugador no puede realizar emotes voluntariamente. La escena puede activar animaciones en el avatar del jugador.
* `disableDoubleJump`: El jugador no puede hacer un doble salto.
* `disableGliding`: El jugador no puede planear.

```ts
import {InputModifier, engine} from '@dcl/sdk/ecs'

InputModifier.create(engine.PlayerEntity, {
	mode: InputModifier.Mode.Standard({
		disableAll: false,
		disableWalk: false,
		disableRun: true,
		disableJog: true,
		disableJump: true,
		disableEmote: true,
		disableDoubleJump: true,
		disableGliding: true
	}),
})
```

### Sintaxis avanzada

Para usar el componente sin ayudas, puedes usar la siguiente sintaxis:

```ts
import {InputModifier, engine} from '@dcl/sdk/ecs'

InputModifier.createOrReplace(engine.PlayerEntity, {
	mode: {
		$case: 'standard',
		standard: {
			disableAll: false,
			disableWalk: false,
			disableRun: true,
			disableJog: true,
			disableJump: true,
			disableEmote: true,
		},
	},
})
```

{% hint style="info" %}
**💡 Consejo**: Para ver un ejemplo funcional, consulta la [`0,1-input-modifier`](https://github.com/decentraland/sdk7-test-scenes/tree/main/scenes/0,1-input-modifier) escena de prueba, que alterna cada `InputModifier` bandera de movimiento por separado y muestra un avatar que sigue siendo transportado por una plataforma móvil mientras el movimiento está bloqueado.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.decentraland.org/creator/content-creator-es/scenes-sdk7/interactividad/avatares/locomotion.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
