# Smart Items - Avançado

A maioria dos smart items tem um módulo básico em que você pode configurar apenas as definições mais comuns de forma simples, mas você pode rolar para baixo após a **Advanced** para personalizar quase tudo sobre o comportamento do item.

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

O seguinte item tem um componente Transform e um módulo básico que expõe apenas os campos básicos para configurar um button. Mas, se você rolar para baixo após a **Advanced** marcador, encontrará todas as definições disponíveis.

![](/files/b5fb35e1d541e9255c75984e19deaa3b1fa75073)

{% hint style="info" %}
**📔 Nota**: A maioria das definições no módulo básico também está disponível nos components mais abaixo. As alterações feitas no módulo básico são refletidas nos components mais abaixo e vice-versa, exceto em alguns casos em que as definições básicas são uma abstração de várias definições mais abaixo. Nesses casos, alterar as definições avançadas para valores que não são suportados pelo módulo básico fará com que o campo no módulo básico seja marcado como indefinido.
{% endhint %}

## Configuração avançada

As propriedades são agrupadas em [**components**](/creator/content-creator-pt/scenes-sdk7/arquitetura/entities-components.md). Diferentes smart items podem ter components diferentes, dependendo da sua funcionalidade.

O comportamento da maioria dos items é controlado por:

* [**Actions**](#actions): O componente Actions define coisas que o item pode fazer. Por exemplo, reproduzir um sound, reproduzir uma animation, mover-se para cima ou tornar-se invisível.
* [**Triggers**](#triggers): O componente Triggers atribui quais eventos fazem essas actions acontecerem. Por exemplo, quando o player clica no item, quando o player entra numa área ou quando a scene carrega pela primeira vez.

Por exemplo, num smart item de porta, o **Actions** componente inclui actions "Open" e "Close". O **Triggers** componente nesse item inclui um **On Click** trigger que ativa a action "Open" quando a porta é clicada pelo player.

Os triggers de um smart item podem ativar actions em qualquer smart item da scene, não apenas nesse mesmo smart item. Por exemplo, um smart item de button pode ter um **Triggers** componente que ativa a action "move up" definida no **Actions** componente de uma floating platform.

Os triggers também podem acontecer condicionalmente. Por exemplo, smart items de porta incluem dois **On Click** triggers no seu componente Triggers: um abre a porta se essa porta estiver fechada, o outro fecha a porta se ela estiver aberta. Para mais detalhes, veja [States and conditional logic](/creator/content-creator-pt/scene-editor/interatividade/states-and-conditions.md).

## Interações entre items

Para fazer os items interagirem entre si:

* Um item precisa de ter pelo menos uma action definida num [Actions](#actions) componente.
* O outro item precisa de um trigger no [Triggers](#triggers) componente que aponta para essa action.

Por exemplo, para fazer um button abrir uma porta:

1. Adicione qualquer smart item de button, abra o seu **Triggers** componente. Ele tem um evento trigger padrão que reproduz um sound e uma animation para o próprio button.
2. Clique no **+** sinal junto a **Assigned Actions**, para adicionar uma terceira action nesse mesmo evento trigger.
3. Selecione o smart item da porta no primeiro dropdown.
4. No segundo dropdown, selecione a action "Open".

![](/files/d7e8916aa548994b3e412edba7e795fd097c6a24)

{% hint style="info" %}
**💡 Dica**: Em vez disso, pode criar um novo evento Trigger que trate apenas da action da porta. Ambos os eventos trigger são chamados sempre que o button é clicado.

<img src="/files/619e3cdfdc8a158acca700522a8f9b85cceda275" alt="" data-size="original">
{% endhint %}

Qualquer item pode ativar qualquer action de qualquer outro item, desde que a action esteja definida. Veja [Triggers](#triggers) para mais formas pelas quais uma action pode ser ativada.

Pode usar [states and conditional logic](/creator/content-creator-pt/scene-editor/interatividade/states-and-conditions.md) para ativar uma action apenas se uma condição for satisfeita. A condição pode até verificar o state de um terceiro smart item. Por exemplo, um button só abre a porta se o smart item personalizado "power generator" tiver o seu state definido como "On".

## Actions

O **Actions** O componente lista actions que o item pode executar. Cada smart item inclui um conjunto de actions predefinidas. Pode personalizar actions existentes ou adicionar novas. Os seguintes tipos de actions estão disponíveis:

* **Play Animation**: Reproduz uma animation no modelo 3D do item. Veja [Sobre reproduzir animations](#about-playing-animations)
* **Stop Animation**: Para todas as animations a serem reproduzidas pelo modelo 3D do item.
* **Play Sound**: Reproduz um sound a partir de um ficheiro, na localização do item. Veja [Sobre reproduzir sounds](#about-playing-sounds)
* **Stop Sound**: Para todos os sounds a serem reproduzidos pelo item.
* **Start Tween**: Faz uma alteração gradual na posição, rotação ou escala ao longo de um determinado período. Veja [Mover, rodar ou escalar](#moving-rotating-or-scaling).
* **Set Visibility**: Torna o item visível ou invisível.
* **Attach To Player**: Define o item como filho do avatar do player. Por exemplo, para o segurar na mão ou acima da cabeça.
* **Detach From Player**: Desanexa o item do avatar do player.
* **Open Link**: Abre um link para um website externo.

{% hint style="info" %}
**📔 Nota**: Esta action só pode acontecer como resultado de clicar num item. Não pode ser ativada ao entrar numa trigger area.
{% endhint %}

* **Move Player**: Altera a posição do player para um conjunto de coordenadas locais dentro da scene. Só é possível mover o player dentro da mesma scene.
* **Teleport Player**: Teleporta um player para as coordenadas de outra scene em Decentraland. Os players aparecerão no spawn-point da scene de destino.
* **Move Player**: Altera a posição do player para outra posição dentro da mesma scene, usando coordenadas relativas à origem da scene.
* **Play Emote**: Faz o avatar do player executar uma das animações de avatar predefinidas (por ex.: acenar ou bater palmas).
* **Play Custom Emote**: Faz o avatar do player executar uma animação personalizada, a partir de um ficheiro carregado para a scene.
* **Show Text**: Exibe texto no UI do ecrã, para ser ocultado após alguns segundos. Ideal para hints, linhas de diálogo, notificações, etc.
* **Hide Text**: Oculta qualquer texto de UI que possa estar a ser exibido atualmente.
* **Start Delay**: Atrasa outra action do mesmo item por tantos segundos quantos precisar.
* **Stop Delay**: Cancela quaisquer actions atrasadas no item.
* **Start Loop**: Repete uma action do mesmo item de forma recorrente num intervalo definido.
* **Stop Loop**: Cancela quaisquer actions em loop no item.
* **Play Video Stream**: Reproduz um video como material numa forma primitiva.
* **Stop Video Stream**: Para quaisquer videos atualmente reproduzidos.
* **Play Audio Stream**: Reproduz um audio stream.
* **Stop Audio Stream**: Para quaisquer audio streams atualmente em reprodução.
* **Open link**: Abre um link num separador do browser. Os players são questionados se confiam no domínio antes de o fazerem.
* **Clone**: Duplica um item na posição designada.
* **Remove**: Elimina um item da scene.
* **Show Image**: Exibe uma imagem no UI, potencialmente por um período limitado. Também pode incluir legenda.
* **Hide Image**: Oculta qualquer imagem atualmente exibida no UI através da action Show Image.
* **Damage**: Reduz a saúde de qualquer healthbar que esteja por perto. A *Layer* propriedade pode determinar se age apenas sobre healthbars do player ou sobre outros items.
* **Move player here**: Altera a posição do player para a posição deste item.
* **Place on Player**: Altera a posição do item para a posição do player.
* **Rotate as Player**: Altera a rotação do item para a rotação do player.
* **Place on Camera**: Altera a posição do item para a posição da camera.
* **Rotate as Camera**: Altera a rotação do item para a rotação da camera.
* **Set Position**: Altera a posição do item para uma específica. Pode ser absoluta ou relativa à sua posição atual.
* **Set Rotation**: Altera a rotação do item para uma específica. Pode ser absoluta ou relativa à sua rotação atual.
* **Set Scale**: Altera a escala do item para uma específica. Pode ser absoluta ou relativa à sua escala atual.
* **Follow Player**: Começa a mover-se e a virar-se na direção da posição do player. Ignora quaisquer obstáculos no caminho. Pode definir a velocidade e fazer com que se mova apenas em certos eixos. Min Distance determina quão perto chegará do player.
* **Stop Following Player**: Para a action Follow Player.
* **Random Action**: Uma das actions listadas aqui será reproduzida aleatoriamente, com probabilidade igual, sempre que a action aleatória for chamada. Pode listar quaisquer actions que pertençam ao item.
* **Batch Actions**: Todas as actions listadas aqui serão reproduzidas simultaneamente sempre que a action batch for chamada. Pode listar quaisquer actions que pertençam ao item.
* **Heal Player**: Restaura a saúde da health bar do player.

Veja [states and conditional logic](/creator/content-creator-pt/scene-editor/interatividade/states-and-conditions.md) para saber mais sobre outras actions relacionadas com condições lógicas.

O **Actions** O componente define actions possíveis, mas estas não fazem nada na scene a menos que sejam ativadas. As actions são ativadas por um [trigger](#triggers), seja do mesmo smart item ou de um diferente.

Para adicionar uma nova action a um item, clique no **Add New Action** botão na parte inferior do componente Action. Depois dê um nome à action, selecione um tipo e preencha quaisquer campos adicionais específicos desse tipo de action.

![](/files/c21c3e1f7151ce132c46873c8acef0e89ac46cde)

### Triggers

O **Triggers** O componente define eventos trigger; estes ativam actions quando um determinado evento acontece. Existem os seguintes tipos de eventos trigger:

* **On Click**: Quando o player clica no item. Veja [Sobre triggers de clique](#about-click-triggers)
* **Player Enters Area**: Quando o player entra numa área. Veja [Sobre trigger areas](#about-trigger-areas)
* **Player Leaves Area**: Quando o player sai de uma área. Veja [Sobre trigger areas](#about-trigger-areas)
* **On Spawn**: Quando a scene inicia ou o item é spawned na scene. Veja [Trigger on spawn](#trigger-on-spawn)

Veja [states and conditional logic](/creator/content-creator-pt/scene-editor/interatividade/states-and-conditions.md) para saber mais sobre outros triggers relacionados com condições lógicas.

Para adicionar um novo trigger, clique em **Add New Trigger Event** na parte inferior do componente Trigger. Depois selecione o tipo de trigger, a entidade que pretende ativar e uma action dessa entidade.

![](/files/2b652f5c1391124f48007ff7a68ae97e4b6bda3f)

{% hint style="info" %}
**📔 Nota**: Uma action precisa de ser definida no [Actions](#actions) componente da entidade antes de a poder ativar. Os triggers só podem afetar entidades que tenham um componente Actions.
{% endhint %}

## Sobre reproduzir animations

Use uma action do tipo **Play Animation** para executar uma animation no modelo 3D do smart item. A animation precisa já de existir como parte do ficheiro do modelo 3D. O **Select Animation** dropdown apresenta uma lista de todas as animations disponíveis no modelo 3D.

O **O campo Play Mode** permite selecionar se uma animation deve ser reproduzida apenas uma vez ou se deve continuar em loop.

![](/files/89dcc46417f3b154ce18259b19d626e3fd3c2f45)

Assim que a action é criada, pode ativá-la através do [Triggers](#triggers) componente desse mesmo item ou de qualquer outro item.

Use a **Stop Animation** action para parar todas as animations do item, tanto em loop como sem loop.

{% hint style="info" %}
**💡 Dica**: Para verificar facilmente o conteúdo de um modelo 3D, para ver que animations inclui e como se parecem, uma boa ferramenta é o [Babylon Sandbox](https://sandbox.babylonjs.com/). Basta arrastar o ficheiro do modelo 3D para a janela. Deve aparecer na parte inferior um dropdown com uma lista das suas animations.
{% endhint %}

Para saber mais sobre animations e como pode criar as suas próprias como parte de um modelo 3D, veja [Animations](https://github.com/decentraland/docs/blob/main/creator/scene-editor/3d-modeling/animations.md).

## Sobre reproduzir sounds

Use uma action do tipo **Play Sound** para reproduzir um ficheiro de sound. Pode reproduzir qualquer ficheiro de sound desde que esteja importado para o projeto da scene. O sound é ouvido de forma posicional, a partir da localização do item, o que significa que soa mais alto se o player estiver mais perto.

{% hint style="info" %}
**💡 Dica**: Em vez de escrever o path do ficheiro de sound, pode arrastá-lo para o **Path** campo a partir do menu de navegação de ficheiros na parte inferior do Scene Editor.
{% endhint %}

Use a **O campo Play Mode** campo para escolher se o sound é reproduzido uma vez ou em loop contínuo.

![](/files/60ddda509fd3d5b9ee90d5c1a5efa67ef9a07924)

Assim que a action é criada, pode ativá-la através do [Triggers](#triggers) componente desse mesmo item ou de qualquer outro item.

Use a **Stop Sound** action para parar todos os sounds do item, tanto em loop como sem loop. Isto também para sounds do **AudioSource** componente.

Para fazer com que um item reproduza sempre um sound em loop, por exemplo para ambiência ou música, é mais fácil usar o **AudioSource** componente, em vez de usar Actions e Triggers. Este componente só requer que forneça um path para um ficheiro e que assinale as caixas **Start Playing** e **Loop**.

![](/files/72fb67e590a40a074dcd3e8f7915f10910d59628)

{% hint style="info" %}
**📔 Nota**: Um smart item só pode reproduzir um sound de cada vez. Chamar um segundo sound interromperá quaisquer outros sounds que estejam atualmente a soar. Isto também se aplica aos sounds do **AudioSource** componente AudioSource. Se precisar de dois sounds para soar em conjunto, considere adicionar uma entidade invisível no mesmo local para conter uma **Play Sound** action.
{% endhint %}

Veja [sounds](/creator/content-creator-pt/scenes-sdk7/essenciais-de-conteudo-3d/sounds.md) para saber mais sobre reproduzir sounds em Decentraland.

## Mover, rodar ou escalar

Use uma **Start Tween** action para alterar a **posição**, **escala**, ou **rotação**, do item ao longo de um período de tempo. Todas as actions **Start Tween** começam no estado original do item e mudam para um estado final ao longo de um período de tempo.

Tweens em posição podem ser relativos ou absolutos. Um tween absoluto em posição move o item para uma posição fixa em relação à scene. O item mover-se-á de onde quer que esteja para essa posição. Se já estiver lá, não parecerá mover-se. Um tween relativo em posição move o item uma certa distância a partir de onde está agora, por exemplo um tween para uma posição relativa de `1, 0, 0` move o item 1 metro para a frente, na direção para a qual está atualmente virado. Se executar a action tween uma segunda vez, o item mover-se-á mais um metro para a frente.

Tweens em rotação também podem ser relativos ou absolutos. Uma rotação relativa é adicionada à rotação atual do item. Um tween absoluto em rotação fará com que o item fique virado para uma direção específica, relativa à scene.

Use a **Duration** campo para definir quanto tempo todo o movimento deve demorar, em segundos. Note que o slider vai até 100 segundos, mas também pode escrever manualmente um número maior se precisar.

![](/files/db7d27ef05aa90859ea2603b17c3a00218e9bee7)

Assim que a action é criada, pode ativá-la através do [Triggers](#triggers) componente desse mesmo item ou de qualquer outro item.

Tweens podem seguir diferentes **Curve Types** que afetam a taxa de alteração ao longo do tempo. Uma curva **linear** (predefinição) significa que a velocidade da alteração é constante do início ao fim. Há muitas opções para escolher, que desenham curvas de formas diferentes dependendo de o início e/ou o fim começarem devagar, e de quanto. Uma curva **easeinexpo** começa devagar e termina rápido, aumentando a velocidade exponencialmente; pelo contrário, uma curva **easeoutexpo** começa rápido e termina devagar.

![](/files/f97fdb4ef1384b9ca710f6228dfc17b763698f79)

{% hint style="info" %}
**💡 Dica**: Experimente diferentes curvas de movimento. As diferenças são muitas vezes subtis, mas interpretamos subconscientemente informação a partir de como as coisas se movem, como peso, fricção ou até personalidade.
{% endhint %}

Use **On Tween End** eventos trigger no **Triggers** componente para ativar uma action após um tween terminar. Use [states and conditional logic](/creator/content-creator-pt/scene-editor/interatividade/states-and-conditions.md) para descrever um caminho em loop para uma floating platform, de modo que se mova constantemente entre dois locais.

Quando um item executa um tween, isto afeta tudo no item. Por exemplo, se alterar a escala, altera a escala do seu modelo 3D visível e também da geometria collider invisível, o tamanho do texto, etc. Se o item tiver quaisquer filhos (aninhados na entity tree à esquerda), essas child entities também são afetadas pelo tween.

{% hint style="info" %}
**📔 Nota**: Cada entity só pode executar um tween de cada vez. Por exemplo, não pode fazer com que um item se mova lateralmente e também rode ao mesmo tempo. Como solução alternativa, pode usar entidades parented. Por exemplo, pode ter uma entidade invisível parent que se move lateralmente, com um filho visível que roda.
{% endhint %}

## Sobre triggers de clique

Para ativar uma action ao clicar num item, crie um **On Click** trigger. A action será ativada sempre que o player clicar na entity.

![](/files/42fa8bf6904babc6e79e962d85dead347adea316)

Veja [Torne qualquer item smart](/creator/content-creator-pt/scene-editor/interatividade/make-any-item-smart.md#interactivity) para mais detalhes.

{% hint style="info" %}
**📔 Nota**: Ao usar modelos 3D personalizados, o modelo deve ter uma geometria collider invisível para poder ser clicável. Veja [colliders](/creator/content-creator-pt/scenes-sdk7/essenciais-de-conteudo-3d/colliders.md#pointer-blocking).

Como alternativa, pode configurar o **GLTF** componente do item, de modo que a sua **Visible Layer** de collision esteja definida como **Pointer**.

Outra alternativa é adicionar um **Click Area** smart item, para desenhar um cubo que se sobreponha ao item que pretende clicar. O smart item Click Area é um [item invisível](#invisible-items).
{% endhint %}

## Trigger on spawn

Triggers do tipo **On Spawn** ativam uma action quando a scene é carregada. Em vez de esperar que o player interaja com um item, a action é executada imediatamente.

Por exemplo, use isto para fazer uma platform mover-se continuamente. Use um **On Spawn** trigger para ativar uma action tween. Depois use **On State Change** triggers para mantê-la a mover-se entre duas ou mais posições.

![](/files/fdd89e83f8a2c7551ec471a5b9a6bef1fe2e503f)

## Multiplayer

Todos os smart items são multiplayer por predefinição. Veja [Smart Items - Basics](/creator/content-creator-pt/scene-editor/interatividade/smart-items.md) para mais detalhes.

Pode alterar ou ajustar este comportamento multiplayer para sincronizar apenas certos components do item.

No **Multiplayer** componente do item, assinale as caixas dos components que pretende partilhar.

Por exemplo, uma door partilha o seu `Animator` para que todos vejam as animations de abertura, o seu `AudioSource` para que todos oiçam o seu sound, e o seu `State` para que todos saibam se está atualmente aberta ou fechada. A door não partilha o seu `Visibility` componente, porque a door geralmente está sempre visível. Se incluir actions para ativar e desativar a sua visibilidade, talvez também queira marcar este componente, para que as alterações sejam sincronizadas entre todos os players.

## Itens invisíveis

Alguns items não devem ser vistos pelo player, mas ficam visíveis enquanto edita a sua scene para serem mais fáceis de gerir. É o caso de items como **Ambience**, **Trigger Area**, **Click Area**, etc.

No modo avançado, estes items têm um **Visibility** componente definido como invisível. Este componente não afeta a visibilidade dos items no Scene Editor, mas qualquer item definido como invisível não é visto pelos players ao executar uma preview.

## Veja também

* [Smart items - Basics](/creator/content-creator-pt/scene-editor/interatividade/smart-items.md)
* [States and conditions](/creator/content-creator-pt/scene-editor/interatividade/states-and-conditions.md)
* [Tornando qualquer item smart](/creator/content-creator-pt/scene-editor/interatividade/make-any-item-smart.md)
* [Combine com código](/creator/content-creator-pt/scene-editor/expandir-com-codigo/overview.md)


---

# Agent Instructions: Querying This Documentation

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

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.decentraland.org/creator/content-creator-pt/scene-editor/interatividade/smart-items-advanced.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
