> 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-pt/scenes-sdk7/interatividade/avatares/locomotion.md).

# Configurações e Restrições de Locomoção

Altere a velocidade e a altura do salto do jogador, ou restrinja como ele pode se mover

Você pode alterar como o avatar do jogador se move enquanto estiver dentro da sua cena. Use o `AvatarLocomotionSettings` component para ajustar velocidades e alturas de salto, e o `InputModifier` component para congelar o jogador ou bloquear tipos específicos de movimento. Ambos os components são colocados em `engine.PlayerEntity`, e ambos só entram em vigor enquanto o jogador estiver dentro dos limites da sua cena.

## Definições de Locomotion

Você pode afetar a locomoção do jogador, como a velocidade de corrida, a altura do salto e mais. Isto pode ser alterado dinamicamente, por exemplo, para permitir que um jogador recolha um aumento temporário de velocidade ao interagir com um item, ou para desativar a capacidade do jogador de saltar por um curto período de tempo.

{% hint style="info" %}
**💡 Dica**: Você pode definir estes valores sem escrever código. Arraste o **Definições de Locomotion** smart item para a sua cena no [Scene Editor no Creator Hub](/creator/content-creator-pt/scene-editor/primeiros-passos/about-editor.md) e ajuste os seus sliders. Veja [Configurações de locomoção](/creator/content-creator-pt/scene-editor/interatividade/smart-items.md#locomotion-settings).
{% endhint %}

Para fazer isto, adicione um `AvatarLocomotionSettings` componente na `engine.PlayerEntity`.

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

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

As seguintes propriedades estão disponíveis:

* `walkSpeed`: A velocidade a que o jogador anda, em metros por segundo. No cliente de desktop, os jogadores andam ao pressionar a tecla Control.
* `jogSpeed`: A velocidade a que o jogador faz jog, em metros por segundo. Esta é a forma padrão como o jogador se move.
* `runSpeed`: A velocidade a que o jogador corre, em metros por segundo. No cliente de desktop, os jogadores correm ao pressionar a tecla Shift.
* `jumpHeight`: A altura a que o jogador salta, em metros.
* `runJumpHeight`: A altura a que o jogador salta depois de correr, em metros.
* `doubleJumpHeight`: A altura do segundo salto ao fazer double-jump, em metros.
* `glidingSpeed`: A velocidade horizontal a que o jogador se move enquanto está a planar, em metros por segundo.
* `glidingFallingSpeed`: A velocidade máxima de queda do jogador enquanto está a planar, em metros por segundo. Isto apenas limita a descida do jogador: o movimento ascendente, como o de uma elevação por uma força contínua da cena, não é limitado.
* `hardLandingCooldown`: O cooldown após uma aterragem forte, em segundos. Este é o tempo que o jogador tem de esperar antes de se poder mover novamente depois de aterrar de uma queda alta.

Para referência, aqui estão os valores padrão dessas propriedades:

* `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" %}
**💡 Dica**: Enquanto estiver a planar, as forças contínuas aplicadas pela cena são 1,5 vezes mais fortes, e as forças ascendentes podem levantar o jogador. Veja [Forças enquanto desliza](/creator/content-creator-pt/scenes-sdk7/interatividade/player-physics.md#forces-while-gliding).
{% endhint %}

{% hint style="info" %}
**💡 Dica**: Nenhuma destas propriedades pode ser inferior a 0. Se definir uma delas para um valor negativo, ela será limitada a 0. Definir estes valores para zero terá o mesmo efeito que usar o `InputModifier` para bloquear o uso de certas teclas.

Só pode afetar a locomoção do jogador se ele estiver dentro dos limites da cena. Para afetar os avatars de outros jogadores, tem de executar o código que afeta a locomoção deles na própria instância deles.
{% endhint %}

Você pode criar um [smart wearable](/creator/content-creator-pt/scenes-sdk7/tipos-de-projetos/smart-wearables.md) que faz o jogador correr sempre mais depressa ou saltar mais alto. Se tanto a cena como um smart wearable definirem valores diferentes para estes parâmetros, os valores da cena são sempre usados.

Para garantir que ninguém tenha vantagens injustas numa cena de parkour, pode impor os parâmetros padrão adicionando explicitamente os seus valores padrão na sua cena:

```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 locomoção

Pode restringir que ações o jogador pode realizar na sua cena. Use isto para congelar o jogador, ou para restringir formas específicas de locomoção, por exemplo para impedir o jogador de saltar ou correr.

### Congelar o jogador

Pode congelar o jogador para que nenhuma das teclas de entrada possa mover o avatar. Isto pode ser útil para muitas mecânicas de jogo. Também é uma boa prática congelar um jogador enquanto é executada uma animação importante que não deve ser interrompida pelo movimento, ou enquanto um [Virtual Camera](/creator/content-creator-pt/scenes-sdk7/fundamentos-de-conteudo-3d/camera.md) aponta para longe do avatar e não quer que o jogador se mova às cegas.

Use o `InputModifier` component na `engine.PlayerEntity` para impedir que os inputs do jogador afetem a locomoção do avatar. O avatar permanecerá imóvel, o jogador só poderá rodar a câmera.

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

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

Tenha em mente as seguintes considerações:

* Enquanto as interações do jogador estiverem desativadas, o avatar continua a ser afetado por forças externas, como a gravidade ou plataformas móveis.
* O `InputModifier` component só pode ser usado com a `engine.PlayerEntity` entity. Só pode afetar o jogador atual; não pode afetar outros jogadores.
* Este component só afeta o jogador enquanto o avatar estiver dentro dos limites da sua cena. A locomoção deixa de ser restringida assim que ele sai da cena.
* Enquanto as interações do jogador estiverem desativadas, o jogador não pode fazer emotes livremente, mas a cena pode acionar animations no avatar.
* Os inputs do jogador não afetam o avatar, mas o [eventos globais de input](/creator/content-creator-pt/scenes-sdk7/interatividade/eventos-de-botao/system-based-events.md#global-input-events) ainda pode ser escutado pela cena. Poderia usá-los para controlar um veículo, ou usar um [Virtual Camera](/creator/content-creator-pt/scenes-sdk7/fundamentos-de-conteudo-3d/camera.md) para seguir outra entity à medida que se move, tratando-a como um avatar alternativo.

### Restringindo tipos específicos de locomoção

Em vez de congelar totalmente o jogador, pode restringir formas específicas de locomoção do jogador. Isto pode ser usado por razões de jogabilidade, por exemplo para preservar a dificuldade de um jogo de plataformas impedindo o double-jump e o glide. Estas habilidades podem até ser alternadas dinamicamente como uma mecânica de jogo, por exemplo dando ao jogador uma barra de stamina e impedindo-o de correr quando esta se esgota. Também pode ser usado para definir o tom de uma cena, por exemplo impedindo correr ou saltar num local que pretende ser sereno. O `InputModifier` inclui as seguintes opções:

* `disableWalk`: O jogador não pode andar lentamente (pressionando Control). Se o jogador tentar andar, irá fazer jog ou correr em vez disso, se permitido.
* `disableRun`: O jogador não pode correr (pressionando Shift). Se o jogador tentar correr, irá fazer jog em vez disso, se permitido.
* `disableJog`: O jogador não pode fazer jog (esta é a velocidade de movimento padrão). Se o jogador tentar fazer jog, irá correr ou andar em vez disso, se permitido.
* `disableJump`: O jogador não pode saltar.
* `disableEmote`: O jogador não pode fazer emotes voluntariamente. A cena pode acionar animations no avatar do jogador.
* `disableDoubleJump`: O jogador não pode realizar um double-jump.
* `disableGliding`: O jogador não pode planar.

```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
	}),
})
```

### Sintaxe avançada

Para usar o component sem quaisquer helpers, pode usar a seguinte sintaxe:

```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" %}
**💡 Dica**: Para um exemplo funcional, veja a [`0,1-input-modifier`](https://github.com/decentraland/sdk7-test-scenes/tree/main/scenes/0,1-input-modifier) test scene, que alterna cada `InputModifier` flag de movimento separadamente e mostra um avatar a continuar a ser transportado por uma plataforma móvel enquanto o movimento 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-pt/scenes-sdk7/interatividade/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.
