# Smart Items - Avanzado

La mayoría de los smart items tienen un módulo básico donde puedes configurar solo los ajustes más comunes de forma simple, pero puedes desplazarte hacia abajo más allá del **Advanced** marcador para personalizar casi cualquier aspecto de cómo se comporta el item.

{% embed url="<https://www.youtube.com/watch?v=m_xWCSDDxpQ>" %}

El siguiente item tiene un componente Transform y un módulo básico que expone solo los campos básicos para configurar un botón. Pero si te desplazas hacia abajo más allá del **Advanced** marcador, encontrarás todos los ajustes disponibles.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-f2e51018feb637e8aac6ec99a7998f64f416a0bb%2Fadvanced-settings-smart-item.png?alt=media)

{% hint style="info" %}
**📔 Nota**: La mayoría de los ajustes en el módulo básico también están disponibles en los componentes más abajo. Los cambios realizados en el módulo básico se reflejan en los componentes más abajo y viceversa, excepto en algunos casos donde los ajustes básicos son una abstracción de múltiples ajustes más abajo. En esos casos, cambiar los ajustes avanzados a valores que no son compatibles con el módulo básico hará que el campo en el módulo básico quede marcado como undefined.
{% endhint %}

## Configuración avanzada

Las propiedades se agrupan en [**components**](https://docs.decentraland.org/creator/content-creator-es/scenes-sdk7/arquitectura/entities-components). Diferentes smart items pueden tener diferentes components, dependiendo de su funcionalidad.

El comportamiento de la mayoría de los items está controlado por:

* [**Actions**](#actions): El componente Actions define cosas que el item puede hacer. Por ejemplo reproducir un sonido, reproducir una animación, moverse hacia arriba o volverse invisible.
* [**Triggers**](#triggers): El componente Triggers asigna qué eventos hacen que esas acciones ocurran. Por ejemplo cuando el jugador hace clic en el item, cuando el jugador camina dentro de un área, o cuando la escena se carga por primera vez.

Por ejemplo, en un smart item de puerta, el **Actions** component incluye acciones "Open" y "Close". El **Triggers** component en ese item incluye un **On Click** trigger que activa la acción "Open" cuando la puerta es clickeada por el jugador.

Los triggers de un smart item pueden activar acciones en cualquier smart item de la escena, no solo en ese mismo smart item. Por ejemplo, un smart item de botón puede tener un **Triggers** component que activa la acción "move up" definida en el **Actions** component de una plataforma flotante.

Los Triggers también pueden ocurrir de forma condicional. Por ejemplo, los smart items de puerta incluyen dos **On Click** triggers en su componente Triggers: uno abre la puerta si esa puerta estaba cerrada, el otro cierra la puerta si estaba abierta. Para más detalles ver [States and conditional logic](https://docs.decentraland.org/creator/content-creator-es/scene-editor/interactividad/states-and-conditions).

## Interacciones entre items

Para hacer que los items interactúen entre sí:

* Un item necesita tener al menos una acción definida en un [Actions](#actions) component.
* El otro item necesita un trigger en el [Triggers](#triggers) component que apunte a esa acción.

Por ejemplo, para hacer que un botón abra una puerta:

1. Añade cualquier smart item de botón, abre su **Triggers** component. Tiene un evento trigger por defecto que reproduce un sonido y una animación para el propio botón.
2. Haz clic en el **+** signo junto a **Assigned Actions**, para añadir una tercera acción en ese mismo evento trigger.
3. Selecciona el smart item para la puerta en el primer desplegable.
4. En el segundo desplegable, selecciona la acción "Open".

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-110156bc3c8fa17336e61490402e1cb19d83ff47%2Fbutton-to-door.png?alt=media)

{% hint style="info" %}
**💡 Tip**: En su lugar, puedes crear un nuevo evento Trigger que solo maneje la acción de la puerta. Ambos eventos trigger se llaman cada vez que se hace clic en el botón.

<img src="https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-30d3ef36d5482564fd8b67854fdd9e9ab2c16cc7%2Fbutton-to-door2.png?alt=media" alt="" data-size="original">
{% endhint %}

Cualquier item puede disparar cualquier acción de cualquier otro item, siempre que la acción esté definida. Ver [Triggers](#triggers) para más formas en las que una acción puede ser disparada.

Puedes usar [states and conditional logic](https://docs.decentraland.org/creator/content-creator-es/scene-editor/interactividad/states-and-conditions) para disparar una acción solo si se cumple una condición. La condición incluso puede comprobar el estado de un tercer smart item. Por ejemplo, un botón solo abre la puerta si un smart item personalizado "power generator" tiene su estado en "On".

## Actions

El **Actions** component lista acciones que el item puede llevar a cabo. Cada smart item incluye un conjunto de acciones predefinidas. Puedes personalizar acciones existentes o añadir nuevas. Los siguientes tipos de acciones están disponibles:

* **Play Animation**: Reproduce una animación en el modelo 3D del item. Ver [About playing animations](#about-playing-animations)
* **Stop Animation**: Detiene todas las animaciones reproducidas por el modelo 3D del item.
* **Play Sound**: Reproduce un sonido desde un archivo, en la ubicación del item. Ver [About playing sounds](#about-playing-sounds)
* **Stop Sound**: Detiene todos los sonidos reproducidos por el item.
* **Start Tween**: Realiza un cambio gradual en posición, rotación o escala durante un periodo dado. Ver [Moving, rotating or scaling](#moving-rotating-or-scaling).
* **Set Visibility**: Hace que el item sea visible o invisible.
* **Attach To Player**: Establece el item como hijo del avatar del jugador. Por ejemplo para llevarlo en la mano o sobre la cabeza.
* **Detach From Player**: Desprende el item del avatar del jugador.
* **Open Link**: Abre un enlace a un sitio web externo.

{% hint style="info" %}
**📔 Nota**: Esta acción solo puede ocurrir como resultado de hacer clic en un item. No puede ser activada al caminar dentro de un área trigger.
{% endhint %}

* **Move Player**: Cambia la posición del jugador a un conjunto de coordenadas locales dentro de la escena. Solo es posible mover al jugador dentro de la misma escena.
* **Teleport Player**: Teletransporta a un jugador a las coordenadas de otra escena en Decentraland. Los jugadores aparecerán en el spawn-point de la escena de destino.
* **Move Player**: Cambia la posición del jugador a otra posición dentro de la misma escena, usando coordenadas relativas al origen de la escena.
* **Play Emote**: Hace que el avatar del jugador realice una de las animaciones por defecto del avatar (p. ej.: saludar, aplaudir).
* **Play Custom Emote**: Hace que el avatar del jugador realice una animación personalizada, desde un archivo subido a la escena.
* **Show Text**: Muestra texto en la UI de la pantalla, para ocultarlo después de unos segundos. Ideal para pistas, líneas de diálogo, notificaciones, etc.
* **Hide Text**: Oculta cualquier texto de la UI que pueda estar actualmente mostrado.
* **Start Delay**: Retrasa otra acción del mismo item por tantos segundos como necesites.
* **Stop Delay**: Cancela cualquier acción retrasada en el item.
* **Start Loop**: Repite una acción del mismo item de forma recurrente en un intervalo dado.
* **Stop Loop**: Cancela cualquier acción en bucle del item.
* **Play Video Stream**: Reproduce un video como material en una forma primitiva.
* **Stop Video Stream**: Detiene cualquier video que se esté reproduciendo.
* **Play Audio Stream**: Reproduce un flujo de audio.
* **Stop Audio Stream**: Detiene cualquier flujo de audio que se esté reproduciendo.
* **Open link**: Abre un enlace en una pestaña del navegador. A los jugadores se les pregunta si confían en el dominio antes de hacerlo.
* **Clone**: Duplica un item en la posición designada.
* **Remove**: Elimina un item de la escena.
* **Show Image**: Muestra una imagen en la UI, potencialmente por un tiempo limitado. También puede incluir pie de foto.
* **Hide Image**: Oculta cualquier imagen mostrada actualmente en la UI mediante la acción Show Image.
* **Damage**: Reduce la salud en cualquier barra de salud que esté cerca. La *Layer* propiedad puede determinar si solo actúa sobre barras de salud del jugador, o sobre otros items.
* **Move player here**: Cambia la posición del jugador a la de este item.
* **Place on Player**: Cambia la posición del item a la del jugador.
* **Rotate as Player**: Cambia la rotación del item a la del jugador.
* **Place on Camera**: Cambia la posición del item a la de la cámara.
* **Rotate as Camera**: Cambia la rotación del item a la de la cámara.
* **Set Position**: Cambia la posición del item a una específica. Puede ser absoluta o relativa a su posición actual.
* **Set Rotation**: Cambia la rotación del item a una específica. Puede ser absoluta o relativa a su rotación actual.
* **Set Scale**: Cambia la escala del item a una específica. Puede ser absoluta o relativa a su escala actual.
* **Follow Player**: Comienza a moverse y girar en dirección a la posición del jugador. Ignora cualquier obstáculo en el camino. Puedes ajustar la velocidad y hacer que solo se mueva en ciertos ejes. Min Distance determina qué tan cerca llegará al jugador.
* **Stop Following Player**: Detiene la acción Follow Player.
* **Random Action**: Una de las acciones listadas aquí se reproducirá al azar con igual probabilidad cada vez que se llame la acción aleatoria. Puedes listar cualquiera de las acciones que pertenezcan al item.
* **Batch Actions**: Todas las acciones listadas aquí se reproducirán simultáneamente cada vez que se llame la acción por lotes. Puedes listar cualquiera de las acciones que pertenezcan al item.
* **Heal Player**: Restaura salud en la barra de salud del jugador.

Ver [states and conditional logic](https://docs.decentraland.org/creator/content-creator-es/scene-editor/interactividad/states-and-conditions) para aprender sobre otras acciones relacionadas con condiciones lógicas.

El **Actions** component define posibles actions, pero estas no hacen nada en la escena a menos que sean disparadas. Las actions se activan mediante un [trigger](#triggers), ya sea del mismo smart item, o de uno diferente.

Para añadir una nueva acción a un item, haz clic en el **Add New Action** botón en la parte inferior del componente Action. Luego ponle un nombre a la acción, selecciona un tipo y completa los campos adicionales específicos del tipo de acción.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-61a40f62dff724b5f7b8b0cda353467230c84880%2Fnew-action.png?alt=media)

### Triggers

El **Triggers** component define eventos trigger, estos activan acciones cuando ocurre cierto evento. Existen los siguientes tipos de eventos trigger:

* **On Click**: Cuando el jugador hace clic en el item. Ver [About click triggers](#about-click-triggers)
* **Player Enters Area**: Cuando el jugador entra en un área. Ver [About trigger areas](#about-trigger-areas)
* **Player Leaves Area**: Cuando el jugador sale de un área. Ver [About trigger areas](#about-trigger-areas)
* **On Spawn**: Cuando la escena comienza, o el item es spawneado en la escena. Ver [Trigger on spawn](#trigger-on-spawn)

Ver [states and conditional logic](https://docs.decentraland.org/creator/content-creator-es/scene-editor/interactividad/states-and-conditions) para aprender sobre otros triggers relacionados con condiciones lógicas.

Para añadir un nuevo trigger, haz clic en el **Add New Trigger Event** en la parte inferior del componente Trigger. Luego selecciona el tipo de trigger, la entidad que quieres activar y una acción de esa entidad.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-2fc45edced2a86ac3f0b7f03057b38aec3d2f78b%2Fnew-trigger.png?alt=media)

{% hint style="info" %}
**📔 Nota**: Una acción necesita ser definida en el [Actions](#actions) component de la entidad antes de que puedas dispararla. Los triggers solo pueden afectar entidades que tengan un componente Actions.
{% endhint %}

## About Playing Animations

Usa una acción de tipo **Play Animation** para ejecutar una animación en el modelo 3D del smart item. La animación debe ya existir como parte del archivo del modelo 3D. El **Select Animation** desplegable muestra una lista de todas las animaciones disponibles en el modelo 3D.

El **Play Mode** campo te permite seleccionar si una animación debe reproducirse solo una vez, o si debe seguir en bucle.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-0939df49ccfd7b60a07cf435a5244a13e5b30169%2Fplay-animation.png?alt=media)

Una vez que la acción es creada, puedes activarla a través del [Triggers](#triggers) component de ese mismo item o de cualquier otro item.

Usa la **Stop Animation** action para detener todas las animaciones del item, tanto en bucle como no en bucle.

{% hint style="info" %}
**💡 Tip**: Para comprobar fácilmente el contenido de un modelo 3D, ver qué animaciones incluye y cómo lucen, una buena herramienta es el [Babylon Sandbox](https://sandbox.babylonjs.com/). Simplemente arrastra el archivo del modelo 3D a la ventana. Debería aparecer un desplegable con una lista de sus animaciones en la parte inferior.
{% endhint %}

Para aprender más sobre animaciones y cómo puedes crear las tuyas como parte de un modelo 3D, ver [Animations](https://github.com/decentraland/docs/blob/main/creator/scene-editor/3d-modeling/animations.md).

## About Playing sounds

Usa una acción de tipo **Play Sound** para reproducir un archivo de sonido. Puedes reproducir cualquier archivo de sonido siempre que esté importado en el proyecto de la escena. El sonido se escucha posicionalmente, desde la ubicación del item, lo que significa que suena más fuerte si el jugador está más cerca.

{% hint style="info" %}
**💡 Tip**: En lugar de escribir la ruta al archivo de sonido, puedes arrastrarlo al campo **Path** desde el menú de navegación de archivos en la parte inferior del Scene Editor.
{% endhint %}

Usa la **Play Mode** campo para elegir si reproducir el sonido una vez, o hacerlo en bucle continuamente.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-c1b29ddbf0c123f9f4993f8d0eb1cf18ef458ebd%2Fplay-sound.png?alt=media)

Una vez que la acción es creada, puedes activarla a través del [Triggers](#triggers) component de ese mismo item o de cualquier otro item.

Usa la **Stop Sound** action para detener todos los sonidos del item, tanto en bucle como no en bucle. Esto también detiene sonidos del **AudioSource** component.

Para hacer que un item reproduzca un sonido en bucle siempre, por ejemplo para ambiente o música, es más fácil usar el **AudioSource** component, en lugar de usar Actions y Triggers. Este componente solo requiere que proporciones una ruta a un archivo, y marques las casillas **Start Playing** y **Loop**.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-6b18d4644fc30ae00402f4215163feae8e2ed4e5%2Faudiosource.png?alt=media)

{% hint style="info" %}
**📔 Nota**: Un smart item solo puede reproducir un sonido a la vez. Llamar a un segundo sonido interrumpirá cualquier otro sonido que se esté reproduciendo. Esto también aplica a los sonidos del componente **AudioSource** component. Si necesitas que dos sonidos suenen juntos, considera añadir una entidad invisible en la misma ubicación para contener una **Play Sound** action.
{% endhint %}

Ver [sounds](https://docs.decentraland.org/creator/content-creator-es/scenes-sdk7/fundamentos-del-contenido-3d/sounds) para más sobre la reproducción de sonidos en Decentraland.

## Moving, rotating, or scaling

Usa una **Start Tween** action para cambiar la **position**, **scale**, o **rotation**, del item durante un periodo de tiempo. Todas las **Start Tween** actions comienzan desde el estado original del item y cambian a un estado final durante un periodo de tiempo.

Los tweens en posición pueden ser relativos o absolutos. Un tween absoluto en posición mueve el item a una posición fija en relación con la escena. El item se moverá desde donde esté hasta esa posición. Si ya está ahí, no parecerá moverse. Un tween relativo en posición mueve el item cierta distancia desde donde está ahora, por ejemplo un tween a una posición relativa de `1, 0, 0` mueve el item 1 metro hacia adelante, en la dirección que actualmente enfrenta. Si ejecutas la acción tween una segunda vez, el item se moverá otro metro hacia adelante.

Los tweens en rotación también pueden ser relativos o absolutos. Una rotación relativa se suma a la rotación actual del item. Un tween absoluto en rotación hará que el item apunte en una dirección específica, relativa a la escena.

Usa la **Duration** campo para establecer cuánto debe durar todo el movimiento, en segundos. Ten en cuenta que el control deslizante llega hasta 100 segundos, pero también puedes escribir manualmente un número mayor si lo necesitas.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-02dc2650178474b89c0aabbba8b12b917d09bfa1%2Ftweens.png?alt=media)

Una vez que la acción es creada, puedes activarla a través del [Triggers](#triggers) component de ese mismo item o de cualquier otro item.

Los tweens pueden seguir diferentes **Curve Types** que afectan la tasa de cambio a lo largo del tiempo. Una **linear** curve (por defecto), significa que la velocidad del cambio es constante de principio a fin. Hay muchas opciones para elegir, que trazan curvas con diferentes formas dependiendo de si el inicio y/o el final comienzan lento, y cuánto. Una **easeinexpo** curve comienza lenta y termina rápida, aumentando la velocidad exponencialmente; en cambio una **easeoutexpo** curve comienza rápida y termina lenta.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-707c9c44d39111002ea3b1c4b3000a8ab4122d67%2Feasing-functions.jpeg?alt=media)

{% hint style="info" %}
**💡 Tip**: Experimenta con diferentes curvas de movimiento. Las diferencias suelen ser sutiles, pero subconscientemente interpretamos información por cómo se mueven las cosas, como peso, fricción o incluso personalidad.
{% endhint %}

Usa **On Tween End** trigger events en el **Triggers** component para activar una acción después de que un tween haya terminado. Usa [states and conditional logic](https://docs.decentraland.org/creator/content-creator-es/scene-editor/interactividad/states-and-conditions) para describir una ruta en bucle para una plataforma flotante, de modo que se mueva constantemente entre dos ubicaciones.

Cuando un item realiza un tween, esto afecta todo sobre el item. Por ejemplo, si cambia la escala, cambia la escala de su modelo 3D visible y también la geometría de colisión invisible, el tamaño del texto, etc. Si el item tiene hijos (anidados en el entity tree a la izquierda), estas entidades hijas también se ven afectadas por el tween.

{% hint style="info" %}
**📔 Nota**: Cada entidad solo puede realizar un tween a la vez. Por ejemplo, no puedes hacer que un item se mueva lateralmente y también rote al mismo tiempo. Como solución, puedes usar entidades parentadas. Por ejemplo, puedes tener una entidad padre invisible que se mueva lateralmente, con un hijo visible que rote.
{% endhint %}

## About click triggers

Para activar una acción haciendo clic en un item, crea un **On Click** trigger. La acción se activará cada vez que el jugador haga clic en la entidad.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-89527969929c803b930910be068d3fdc569a36d6%2Fon_click.png?alt=media)

Ver [Haz inteligente cualquier item](https://docs.decentraland.org/creator/content-creator-es/scene-editor/make-any-item-smart#interactivity) para más detalles.

{% hint style="info" %}
**📔 Nota**: Al usar modelos 3D personalizados, el modelo debe tener una geometría de colisión invisible para que sea clickeable. Ver [colliders](https://docs.decentraland.org/creator/content-creator-es/scenes-sdk7/fundamentos-del-contenido-3d/colliders#pointer-blocking).

Como alternativa, puedes configurar el **GLTF** component del item, de modo que su **Visible Layer** de colisión esté configurada en **Pointer**.

Otra alternativa es añadir un **Click Area** smart item, para dibujar un cubo que solape el item que quieres clicar. El smart item Click Area es un [invisible item](#invisible-items).
{% endhint %}

## Trigger on spawn

Los Triggers de tipo **On Spawn** activan una acción cuando la escena se carga. En lugar de esperar a que el jugador interactúe con un item, la acción se ejecuta de inmediato.

Por ejemplo, usa esto para hacer que una plataforma se mueva continuamente. Usa un **On Spawn** trigger para activar una acción tween. Luego usa **On State Change** triggers para mantenerla moviéndose entre dos o más posiciones.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-e7d8cc0fa522e04b35c949d38884c9134c597d0f%2Fon_spawn.png?alt=media)

## Multiplayer

Todos los smart items son multiplayer por defecto. Ver [Smart Items - Basic](https://docs.decentraland.org/creator/content-creator-es/scene-editor/interactividad/smart-items) para más detalles.

Puedes cambiar o ajustar este comportamiento multiplayer para sincronizar solo ciertos components del item.

En el **Multiplayer** component del item, marca las casillas de los components que quieras compartir.

Por ejemplo, una puerta comparte su `Animator` para que todos vean las animaciones de apertura, su `AudioSource` component para que todos escuchen su sonido, y su `State` para que todos lleven el seguimiento de si está actualmente abierta o cerrada. La puerta no comparte su `Visibility` component, porque la puerta normalmente siempre es visible. Si incluyes acciones para activar su visibilidad on y off, quizá quieras tener este componente marcado también, para que los cambios se sincronicen entre todos los jugadores.

## Invisible items

Algunos items no están pensados para ser vistos por el jugador, pero son visibles mientras editas tu escena para hacerlos más fáciles de gestionar. Este es el caso de items como **Ambience**, **Trigger Area**, **Click Area**, etc.

En el modo avanzado, estos items tienen un **Visibility** component configurado como invisible. Este componente no afecta la visibilidad de los items en el Scene Editor, pero cualquier item configurado como invisible no es visto por los jugadores al ejecutar una preview.

## Ver también

* [Smart items - Basics](https://docs.decentraland.org/creator/content-creator-es/scene-editor/interactividad/smart-items)
* [States and conditions](https://docs.decentraland.org/creator/content-creator-es/scene-editor/interactividad/states-and-conditions)
* [Making any item smart](https://docs.decentraland.org/creator/content-creator-es/scene-editor/interactividad/make-any-item-smart)
* [Combine con code](https://docs.decentraland.org/creator/content-creator-es/scene-editor/ampliar-con-codigo/overview)
