Como usar sinais de linha do tempo

Desde o lançamento do Timeline em 2017, sabemos que você estava esperando pacientemente por uma maneira de enviar eventos. Bem, não espere mais! A partir do Unity 2019.1, um novo recurso chamado Sinais ajuda você a enviar eventos. Vamos nos aprofundar e ver do que se trata esse novo recurso.
Veja como os Sinais aparecem na janela Linha do Tempo:

Criamos o Signals para estabelecer um canal de comunicação entre a Timeline e sistemas externos. Mas o que isso significa? Por que decidimos por essa abordagem?
Digamos que você esteja usando a Linha do Tempo para criar uma cena. Quando a cena termina, você quer que uma nova cena seja carregada e quer habilitar um sistema de física. Existem algumas maneiras de implementar esse cenário:
Quando sua cutscene terminar, use scripts personalizados para fazer sua instância da Linha do Tempo interagir diretamente com um gerenciador de cena e seu sistema de física.
Quando sua cena terminar, crie marcadores e sinais para enviar um sinal de ''Cena concluída'' e faça com que os sistemas interessados reajam ao sinal.
A equipe da Timeline optou pela segunda abordagem porque ela mantém o emissor independente do receptor. Mantê-los independentes acrescenta muita flexibilidade, potência e reutilização. Para entender melhor, vamos ver como as diferentes peças funcionam juntas.
Para usar sinais para se comunicar com sistemas externos, você precisa de três peças: um Ativo de Sinal, um Emissor de Sinal e um Receptor de Sinal.

- Emissor de sinal: Um Emissor de Sinal contém uma referência a um Ativo de Sinal. Na Linha do Tempo, um Emissor de Sinal é representado visualmente por um marcador. Você pode colocar um marcador em uma trilha ou na área Marcadores, abaixo da régua da Linha do tempo.

- Receptor de sinal: Um Receptor de Sinal é um componente com uma lista de reações. Cada reação está vinculada a um Ativo de Sinal.
- Ativo de sinal: Um Ativo de Sinal é a associação entre um Emissor de Sinal e um Receptor de Sinal. Você pode reutilizar o mesmo recurso de sinal em muitas instâncias da linha do tempo.
Aqui está um jogo simples onde você derrota um zumbi coelho pressionando as setas do teclado que correspondem às imagens direcionais mostradas na tela:
A imagem direcional muda aleatoriamente a cada batida musical. Se você não pressionar a tecla de seta para a direita antes que a imagem mude, você perde. Se você pressionar um certo número de teclas de seta, você ganha.
No jogo, a instância GameTimeline inclui a jogabilidade. Ele usa sinais para exibir novas imagens direcionais com cada batida musical, como mostrado na instância finalizada do GameTimeline abaixo:

Para demonstrar como criar e configurar sinais, vamos começar com um projeto em que nenhum dos Sinais foi criado. Se você quiser acompanhar, pode baixar o projeto aqui.
Primeiro, para visualizar a área Marcadores onde você adiciona Sinais, clique no ícone Marcador ao lado dos modos de Edição de Clipe. A área Marcadores aparece abaixo da régua da Linha do tempo:

Para adicionar um Emissor de Sinal, clique com o botão direito na área Marcadores e selecione Adicionar Emissor de Sinal.

Um Emissor de Sinal aparece na área de Marcadores:

O Emissor de Sinal que você acabou de adicionar é selecionado e a janela Inspetor mostra suas propriedades. A janela Inspetor também fornece botões para criar outras partes de um sinal:

Para vincular o Emissor de Sinal a um Receptor de Sinal, você precisa adicionar um novo Ativo de Sinal. Na janela Inspetor, clique em Criar sinal…. Nomeie o recurso de sinal como "ShowKey" porque ele será usado para vincular um emissor a um receptor para alterar a imagem direcional. Clique em Salvar e o recurso de sinal será adicionado ao projeto.
Você também quer que o Emissor de Sinal seja associado a um Receptor de Sinal, então clique em Adicionar Receptor de Sinal. Sua janela do Inspetor agora deve ficar assim:

Antes de continuar, vamos parar e descrever o que está acontecendo. Quando você clica no botão Adicionar Receptor de Sinal, duas coisas acontecem: um novo componente Receptor de Sinal é adicionado ao GameObject vinculado e uma nova reação é adicionada e vinculada ao Recurso de Sinal que você acabou de criar. Você pode ver que eles estão vinculados porque "ShowKey" aparece como o Sinal de Emissão e "ShowKey" é adicionado à lista de reações:

A janela Inspetor mostra duas coisas: as propriedades do Emissor de Sinal e as reações definidas pelo componente Receptor de Sinal:

Embora o componente Receptor de Sinal esteja vinculado ao GameObject que está associado à instância da Linha do Tempo, você pode editar o Receptor de Sinal na janela Inspetor. A reação é invocada quando o Receptor de Sinal recebe o sinal.
O último passo é especificar o que a reação faz. Neste exemplo, há um componente chamado Manager com um método ShowRandomKey . Este método exibe uma nova tecla de seta aleatória. Para que a reação chame o método ShowRandomKey , selecione esse método para o Evento Unity, conforme mostrado abaixo:

E é isso! Depois de adicionar o Emissor de Sinal e definir seu Receptor de Sinal e a reação, você agora tem um exemplo de uma instância de Linha do Tempo que se comunica com a cena.
Quando a Linha do Tempo atinge o Emissor de Sinal, o sinal ShowKey é emitido. O Signal Receiver, que está escutando o sinal ShowKey, chama o método ShowRandomKey .
Mas você não precisa parar por aí. Vários emissores de sinal podem emitir o mesmo sinal. Por exemplo, a seguinte instância de Linha de Tempo tem o mesmo Emissor de Sinal copiado e movido para momentos diferentes; há um emissor para cada batida musical:
Você também pode arrastar um ativo de sinal diretamente da janela Projeto para a janela Linha do tempo. Um Emissor de Sinal é criado automaticamente com a propriedade Emitir Sinal já definida.
Para ver como ficou o projeto finalizado, com todos os sinais, baixe-o aqui.
Para configurar seu primeiro sinal, você precisa:
Clique com o botão direito do mouse em uma área de marcador ou em uma trilha que suporte sinais e escolha Adicionar emissor de sinal...
Na janela Inspetor, clique em Criar ativo de sinal, escolha um nome de arquivo e pressione Enter.
Ainda no Inspetor, clique no botão Criar Reação... e defina a reação associada ao sinal que você acabou de criar.
- Posso ter vários receptores em um único GameObject? Sim, todos os Receptores de Sinal em um GameObject recebem os sinais enviados para esse GameObject.
- Um ativo de sinal pode ser reutilizado entre várias instâncias da Linha do Tempo? Sim, um Ativo de Sinal pode ser usado em mais de uma instância de Linha do Tempo.
- Um ativo de sinal pode ser estendido e personalizado? Sim, o Signal Asset, o Signal Emitter e o Signal Receiver podem ser estendidos. Mas esse é um assunto para outro dia; haverá outra postagem no blog sobre personalização.
- Há garantia de que os sinais serão emitidos? Sim. Os sinais não serão pulados; eles serão emitidos no próximo quadro, independentemente do FPS do jogo.
- O que acontece se um ativo duplicado da linha do tempo contiver emissores de sinal? Os emissores de sinais mantêm sua referência aos seus Ativos de Sinal. Os ativos de sinal não são duplicados.
---
Confira o conteúdo de aprendizagem para iniciantes e avançados sobre como usar o Timeline na plataforma Unity Learn Premium .