> 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/modifier-areas.md).

# Áreas modificadoras de Avatar

Oculta Avatares, oculta los nametags o desactiva los pasaportes para los jugadores dentro de una región de tu escena

Los avatares se comportan y se ven de forma consistente en todo Decentraland mientras atraviesan scenes. Sin embargo, puedes añadir un `AvatarModifierArea` a una región de tu scene para afectar cómo se comportan los avatares de los jugadores cuando entran en esa área.

{% hint style="danger" %}
**❗Advertencia**\
Por favor, limita la cantidad de `AvatarModifierAreas` que uses en tu scene a solo un par. Si usas demasiados, puede tener un impacto significativo en el rendimiento.
{% endhint %}

### Colocación de Avatar Modifier Areas

Añade una entity con un `AvatarModifierArea` component y posiciona esta entity usando un `Transform` componente.

```ts
const entity = engine.addEntity()

AvatarModifierArea.create(entity, {
	area: Vector3.create(4, 3, 4),
	modifiers: [AvatarModifierType.AMT_HIDE_AVATARS],
	excludeIds: []
})

Transform.create(entity, {
	position: Vector3.create(8, 0, 8),
})
```

Al crear un `AvatarModifierArea` componente, debes proporcionar lo siguiente:

* `area`: Tamaño del área modificadora
* `modifiers`: Un array que enumera los modifiers a implementar en el área. Esta propiedad usa valores de `AvatarModifierType` enum.

Los modificadores compatibles son:

* `AvatarModifierType.AMT_HIDE_AVATARS`
* `AvatarModifierType.AMT_DISABLE_PASSPORTS`
* `AvatarModifierType.AMT_HIDE_NAMETAGS`

Todos los efectos de un `AvatarModifierArea` solo tienen lugar dentro de la región de su área. Los jugadores vuelven a la normalidad cuando salen del área.

Una `AvatarModifierArea` afecta solo a los jugadores que están dentro del área. Entrar en el área no afecta a cómo se percibe a otros jugadores fuera del área.

Los efectos de un `AvatarModifierArea` se calculan localmente para cada jugador. Puedes tener un `AvatarModifierArea` que solo está presente en la scene para algunos jugadores y no para otros. Por ejemplo, podrías hacer un juego de "marco polo", donde solo un jugador en la scene tiene un modifier area que oculta a todos los demás jugadores. Todos los demás jugadores que no tienen este modifier area en su versión local de la scene pueden verse entre sí normalmente.

Si el área oculta avatares, entonces los jugadores que no tienen el área en su versión local de la scene verán todos los avatares normalmente, incluso aquellos que se experimentan a sí mismos como ocultos. Los jugadores que sí tienen el área se percibirán a sí mismos y a todos los demás avatares como afectados por el área cuando entren en ella.

{% hint style="warning" %}
**📔 Nota**: Las Avatar modifier areas se ven afectadas por el *posición* y *rotación* del componente Transform de su entidad anfitriona, pero no se ven afectadas por la *escala*.
{% endhint %}

{% hint style="warning" %}
**📔 Nota**: La `AvatarModifierArea`el componente debe importarse mediante

> `import { AvatarModifierArea } from "@dcl/sdk/ecs"`

Consulta [Imports](/creator/content-creator-es/scenes-sdk7/primeros-pasos/coding-scenes.md#imports) para ver cómo manejarlos fácilmente.
{% endhint %}

### Ocultar avatares

Cuando un jugador entra en un `AvatarModifierArea` que tiene el `AvatarModifierType.AMT_HIDE_AVATARS` modifier, el avatar del jugador deja de renderizarse. Esto se aplica tanto para el jugador en vista en tercera persona como cuando otros jugadores entran en el área.

```ts
const entity = engine.addEntity()

AvatarModifierArea.create(entity, {
	area: Vector3.create(4, 3, 4),
	modifiers: [AvatarModifierType.AMT_HIDE_AVATARS],
	excludeIds: []
})

Transform.create(entity, {
	position: Vector3.create(8, 0, 8),
})
```

Esto te permite reemplazar el avatar predeterminado de Decentraland por cualquier avatar personalizado que quieras mostrar en tu scene, consulta [Reemplazar el avatar del jugador](/creator/content-creator-es/scenes-sdk7/interactividad/avatares/npc-avatars.md#replace-the-players-avatar). Ten en cuenta que, si quieres ver a otros jugadores con avatares personalizados, debes encargarte tú mismo de sincronizar las posiciones de los jugadores.

### Desactivar ventana emergente de Passport

Cuando un jugador entra en un `AvatarModifierArea` que tiene el `AvatarModifierType.AMT_DISABLE_PASSPORTS` modifier, al hacer clic en ellos ya no se abre la UI de Passport que muestra la biografía del jugador, el inventario, etc.

```ts
const entity = engine.addEntity()

AvatarModifierArea.create(entity, {
	area: Vector3.create(4, 3, 4),
	modifiers: [AvatarModifierType.AMT_DISABLE_PASSPORTS],
	excludeIds: []
})

Transform.create(entity, {
	position: Vector3.create(8, 0, 8),
})
```

Esto es especialmente útil en juegos en los que abrir accidentalmente esta UI podría interrumpir el flujo del juego, por ejemplo en un juego de disparos multijugador.

### Ocultar nametags

Cuando un jugador entra en un `AvatarModifierArea` que tiene el `AvatarModifierType.AMT_HIDE_NAMETAGS` modifier, el nametag del jugador se oculta mientras el avatar en sí permanece visible.

```ts
const entity = engine.addEntity()

AvatarModifierArea.create(entity, {
	area: Vector3.create(4, 3, 4),
	modifiers: [AvatarModifierType.AMT_HIDE_NAMETAGS],
	excludeIds: []
})

Transform.create(entity, {
	position: Vector3.create(8, 0, 8),
})
```

Esto es útil para escenarios, presentaciones o scripted scenes donde quieres suprimir los nametags de los jugadores sin ocultar los avatares mismos. Por ejemplo, podrías querer una experiencia visual limpia durante una performance, donde los avatares son visibles pero los nombres flotantes no distraen a los espectadores.

`AMT_HIDE_NAMETAGS` también oculta cualquier placa personalizada añadida con el [`AvatarNametag`](/creator/content-creator-es/scenes-sdk7/interactividad/avatares/avatar-nametags.md) componente.

{% hint style="info" %}
**💡 Consejo**: `AMT_HIDE_AVATARS` ya oculta los nametags junto con el avatar, así que no necesitas añadir `AMT_HIDE_NAMETAGS` al usar `AMT_HIDE_AVATARS`. Usa `AMT_HIDE_NAMETAGS` solo cuando quieras ocultar los nametags mientras mantienes visibles los avatares.
{% endhint %}

También puedes combinar `AMT_HIDE_NAMETAGS` con otros modificadores como `AMT_DISABLE_PASSPORTS` en la misma área:

```ts
const entity = engine.addEntity()

AvatarModifierArea.create(entity, {
	area: Vector3.create(4, 3, 4),
	modifiers: [AvatarModifierType.AMT_HIDE_NAMETAGS, AvatarModifierType.AMT_DISABLE_PASSPORTS],
	excludeIds: []
})

Transform.create(entity, {
	position: Vector3.create(8, 0, 8),
})
```

{% hint style="info" %}
**💡 Consejo**: El nametag solo se oculta mientras la cabeza o el torso del jugador están dentro del área. Si el área es demasiado baja y el jugador hace un doble salto por encima de ella, el nametag reaparecerá brevemente. Haz que el área sea lo bastante alta para cubrir el rango esperado de movimiento.
{% endhint %}

### Excluir avatares

Puedes excluir una lista de jugadores para que no se vean afectados por un modifier area añadiendo sus IDs de player a un array en el `excludeIds` propiedad del modifier area.

Este ejemplo oculta todos los avatares en un área, excepto los de los jugadores con IDs específicos. Podrías usarlo, por ejemplo, en un live event, para mostrar solo a los hosts del evento en el stage y ocultar a cualquier otro jugador que salte al stage.

```ts
const entity = engine.addEntity()

AvatarModifierArea.create(entity, {
	area: Vector3.create(4, 3, 4),
	modifiers: [AvatarModifierType.AMT_HIDE_AVATARS],
	excludeIds: ['0xx1...', '0xx2...'],
})

Transform.create(entity, {
	position: Vector3.create(8, 0, 8),
})
```

{% hint style="warning" %}
**📔 Nota**: Asegúrate de que todos los IDs de player estén escritos con letras minúsculas. Usa `.toLowerCase()` si es necesario.
{% endhint %}

Las modifier areas se ejecutan localmente en la instancia de cada player. La lista de IDs excluidos puede ser diferente para cada player. En el ejemplo de abajo, cada player excluye su propio ID de un modifier que oculta avatares, de modo que cada uno vea su propio avatar y ningún otro.

```ts
import { getPlayer } from '@dcl/sdk/src/players'

export function main() {
	let userData = getPlayer()
	if (!userData) return

	const entity = engine.addEntity()

	AvatarModifierArea.create(entity, {
		area: Vector3.create(16, 5, 16),
		modifiers: [AvatarModifierType.AMT_HIDE_AVATARS],
		excludeIds: [userData.userId],
	})

	Transform.create(entity, {
		position: Vector3.create(8, 0, 8),
	})
}
```

{% hint style="danger" %}
**❗Advertencia**\
Si la lista de IDs excluidos va a cambiar periódicamente (por ejemplo, según entren o salgan jugadores de un área), asegúrate de que la lista se mantenga en orden. Realiza un `.sort()` sobre el array, para que la lista permanezca en el mismo orden cada vez que se pase. De este modo, solo se calculan los cambios en la lista. De lo contrario, esto puede tener un impacto significativo en el rendimiento de la scene.

```ts
AvatarModifierArea.create(entity, {
	area: Vector3.create(16, 5, 16),
	modifiers: [AvatarModifierType.AMT_HIDE_AVATARS],
	excludeIds: myAvatarList.sort(),
})
```

{% endhint %}

### Depurar modifier areas

Puede ser difícil saber exactamente qué partes de la scene cubren tus modifier areas basándote en el código. La retroalimentación visual ayuda mucho a confirmar que están bien colocadas.

Para verificar las posiciones de un `AvatarModifierArea` o un `CameraModeArea`, dale a la entity que lo contiene un `MeshRenderer` component con un `caja` shape, y establece la escala con el mismo tamaño que la `area` del modifier area.

{% hint style="warning" %}
**📔 Nota**: Los modifier areas no se ven afectados por la `escala` propiedad del transform, su tamaño se basa en su `area` propiedad.
{% endhint %}

```ts
const entity = engine.addEntity()
const areaSize = Vector3.create(8, 3, 8)

AvatarModifierArea.create(entity, {
	area: areaSize,
	modifiers: [AvatarModifierType.AMT_HIDE_AVATARS],
  	excludeIds: []
})

Transform.create(entity, {
	position: Vector3.create(8, 0, 8),
	scale: areaSize,
})

MeshRenderer.setBox(entity)
Material.setPbrMaterial(entity, {
	albedoColor: Color4.create(0.5, 0.5, 0.5, 0.5),
})
```

Para activar los efectos del modifier area, la cabeza o el torso del jugador deben entrar en el área. No surtirá efecto si solo los feet del jugador están en el área. Asegúrate de que el jugador no pueda evadir fácilmente el área saltando.

{% hint style="warning" %}
**📔 Nota**: El área completa debe caber dentro de los límites de tu scene.
{% endhint %}

{% hint style="info" %}
**💡 Consejo**: Para ver ejemplos que funcionan, consulta el [`9,99-modifier-areas`](https://github.com/decentraland/sdk7-test-scenes/tree/main/scenes/9,99-modifier-areas) test scene, que combina `AvatarModifierArea` con runtime-mutated `excludeIds`, y [`10,99-avatar-modifier-hide-nametags`](https://github.com/decentraland/sdk7-test-scenes/tree/main/scenes/10,99-avatar-modifier-hide-nametags), que aísla el `AMT_HIDE_NAMETAGS` modificador.
{% 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/modifier-areas.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.
