# Exemplos de Scripting

Se é novo em scripting, **altamente recomendamos** ler os guias seguintes primeiro:

* [Guia para Iniciantes: Essenciais de Typescript](https://needle.gitbook.io/needle-engine/documentation/lang/pt/getting-started-1/typescript-essentials)
* [Guia para Iniciantes: Needle Engine para Developers Unity](https://needle.gitbook.io/needle-engine/documentation/lang/pt/getting-started-1/for-unity-developers)
* [Tutorial em vídeo: Como escrever componentes personalizados](https://youtu.be/uf5UK0bLHlY?si=82U_2L4n2V7XL7RJ)

Abaixo encontrará alguns scripts básicos como referência rápida.

Também oferecemos muitas cenas de exemplo e projetos completos que pode descarregar e usar como ponto de partida:

* [Visitar Website de Exemplos](https://engine.needle.tools/samples?utm_source=needle_docs\&utm_content=scripting_examples)
* [Descarregar Pacote de Exemplos](https://engine.needle.tools/downloads/unity/samples)
* [Coleção Stackblitz do Needle Engine](https://stackblitz.com/@marwie/collections/needle-engine)
* [API do Needle Engine](https://engine.needle.tools/api)

## Componente básico

@[code ts twoslash](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/basic-component.ts)

ver [scripting](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/scripting/README.md#lifecycle-methods) para todos os eventos de componente

## Referenciar um Objeto do Unity

@[code ts twoslash](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/component-object-reference.ts)

## Referenciar e carregar um asset do Unity (Prefab ou SceneAsset)

@[code ts twoslash](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/component-prefab.ts)

## Referenciar e carregar cenas do Unity

::: tip\
Encontre um [exemplo funcional nos nossos samples](https://engine.needle.tools/samples/multi-scenes-\(dynamic-loading\)) para descarregar e experimentar\
:::

@[code ts twoslash](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/component-scene.ts)

## Receber Cliques em Objetos

Adicione este script a qualquer objeto na sua cena que deseja que seja clicável. Certifique-se de ter também um componente `ObjectRaycaster` na hierarquia pai desse objeto.

test

@[code ts twoslash](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/component-click.ts)

## Cliques em Objetos em Rede

Adicione este script a qualquer objeto na sua cena que deseja que seja clicável. Certifique-se de ter também um componente `ObjectRaycaster` na hierarquia pai desse objeto.\
O componente enviará o clique recebido para todos os clientes conectados e levantará um evento ao qual pode reagir na sua aplicação. Se estiver a usar Unity ou Blender, pode simplesmente atribuir funções para chamar ao evento `onClick` para, por exemplo, reproduzir uma animação ou ocultar objetos.

@[code ts twoslash](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/component-click-networking.ts)

### Reproduzir Animação ao Clique

@[code ts twoslash](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/component-animation-onclick.ts)

## Referenciar um Animation Clip

Isto pode ser útil se deseja executar a sua lógica de animação personalizada.\
Pode também exportar um array de clips.\
@[code ts twoslash](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/component-animationclip.ts)

## Criar e invocar um UnityEvent

@[code ts twoslash](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/component-unityevent.ts)\
::: tip\
Os eventos EventList são também invocados ao nível do componente. Isto significa que também pode subscrever o evento declarado acima usando `myComponent.addEventListener("my-event", evt => {...})` também.\
Esta é uma funcionalidade experimental. Por favor, forneça feedback no nosso [fórum](https://forum.needle.tools/?utm_source=needle_docs\&utm_content=content)\
:::

### Declarar um tipo de evento personalizado

Isto é útil quando deseja expor um evento ao Unity ou Blender com alguns argumentos personalizados (como uma string)\
@[code ts twoslash](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/component-customevent.ts)

*Exemplo de uso:*![20221128-210735\_Unity-needle](https://user-images.githubusercontent.com/2693840/204370950-4c89b877-90d7-4e6f-8266-3352e6da16f4.png)

## Usar objetos aninhados e serialização

Pode aninhar objetos e os seus dados. Com decoradores `@serializable(SomeType)` que correspondam corretamente, os dados serão serializados e desserializados nos tipos corretos automaticamente.

No seu componente typescript:\
@[code ts twoslash](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/component-nested-serialization.ts)

Em C# em qualquer script:\
@[code](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/component-nested-serialization-cs.cs)

::: tip\
Sem os decoradores de tipo corretos, ainda obterá os dados, mas apenas como um objeto simples. Isto é útil quando está a portar componentes, uma vez que terá acesso a todos os dados e poderá adicionar tipos conforme necessário.\
:::

## Usar Web APIs

::: tip\
Tenha em mente que ainda tem acesso a todas as web apis e pacotes [npm](https://npmjs.org)!\
Essa é a beleza do Needle Engine, se nos permitem dizê-lo aqui 😊\
:::

### Exibir localização atual

@[code ts twoslash](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/component-location.ts)

### Exibir hora atual usando uma Coroutine

@[code ts twoslash](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/component-time.ts)

### Alterar propriedade de shader personalizada

Assumindo que tem um shader personalizado com um nome de propriedade `_Speed` que é um valor float, é assim que o alteraria a partir de um script.\
Pode encontrar um [exemplo live para descarregar nos nossos samples](https://engine.needle.tools/samples/shaders/)

### Alternar atributo src

Ver [exemplo live](https://stackblitz.com/edit/needle-engine-cycle-src?file=index.html) no StackBlitz

### Adicionar novos efeitos de postprocessing

Certifique-se de instalar [`npm i postprocessing`](https://github.com/pmndrs/postprocessing) no seu projeto web. Então pode adicionar novos efeitos derivando de `PostProcessingEffect`.

Para usar o efeito, adicione-o ao mesmo objeto que o seu componente `Volume`.

Aqui está um exemplo que envolve o [efei de postprocessing Outline](https://pmndrs.github.io/postprocessing/public/demo/#outline). Pode expor variáveis e configurações como de costume, pois qualquer efeito é também apenas um componente na sua cena three.js.

@[code](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/custom-post-effect.ts)

### Comportamento de ParticleSystem personalizado

@[code ts twoslash](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/custom-particle-system-behaviour.ts)

### Componente de Áudio 2D personalizado

Este é um exemplo de como poderia criar o seu próprio componente de áudio.\
Para a maioria dos casos de uso, no entanto, pode usar o componente AudioSource principal e não precisa de escrever código.

@[code ts twoslash](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/component-2d-audio.ts)

### Ficheiros externos arbitrários

Use o tipo FileReference para carregar ficheiros externos (por exemplo, um ficheiro json)\
@[code ts twoslash](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/pt/@code/component-filereference.ts)

Página traduzida automaticamente usando IA
