quinta-feira, 11 de dezembro de 2014

Usando Timelines em Blueprints

Timeline é um tipo de Ação Latente que possibilita a criação de simples animações baseadas em tempo dentro do próprio Blueprints. Para podermos compreender o uso de Timelines, vamos criar um exemplo de Blueprint que consiste em uma Plataforma que fica se movendo entre duas posições, permitindo assim o acesso do jogador a diferentes áreas do Nível. A imagem abaixo mostra como ficará a Plataforma que se move entre duas áreas.


Crie um novo Blueprint baseado em Actor, adicione um StaticMesh Componente e coloque o nome "Platform". Escolha como StaticMesh o "Floor_400x400". No material do StaticMesh eu escolhi o "M_Wood_Floor_Walnut_Polished". A minha plataforma ficou com esta aparência:


No EventGraph, clique com o botão direito e escolha a opção "Add Timeline":


Uma Timeline possui vários pinos de entrada e alguns pinos de saída:


Coloque o nome "Timeline_Platform" para esta Timeline e dê um duplo-clique para abrir o editor de Timeline:

Clique para aumentar

Esta é a timeline que eu criei para este exemplo. Para definir esta timeline, primeiro clique no botão a esquerda com o símbolo "f+" e rótulo "Add Float Track". Dê o nome de "Position" e coloque o valor 6 no campo "Length" (duração). Esta timeline irá modificar o valor de uma variável do tipo float durante 6 segundos. 

Agora precisamos adicionar os pontos chaves da animação (keyframes). Clique com o botão direito no centro da timeline e escolha a opção "Add Key" ou pressione Shift e o botão esquerdo do mouse:


Após adicionar uma "key" podemos movê-la na timeline usando o botão esquerdo do mouse e podemos definir diretamente o tempo e o valor desta "key":


A transição entre as Keys de uma timeline é chamada de "Interpolação". Para definir o tipo de Interpolação clique com o botão direito em uma key. Neste exemplo vamos usar uma interpolação Linear:


Para esta Timeline vamos precisar de 4 keys com os seguintes valores:

Time Value
0.0 0.0
1.0 0.0
5.0 1.0
6.0 1.0


É muito comum em Timelines utilizar um valor float que varia entre 0.0 e 1.0. Pense nisso como o equivalente a 0% e 100%. Logo mais no EventGraph veremos como este valor será utilizado.

Isto conclui as modificações no editor de Timeline. A plataforma faz uma pausa quando chega nos dois extremos para que o jogador possa entrar ou sair da plataforma.

De volta ao EventGraph, vamos precisar de duas variáveis do tipo "Float" com os nomes "X_Initial" e "X_Final". Estas variáveis devem ser "Editáveis". Seus valores devem ser informados no Nível e representam a posição inicial e final da Plataforma no Eixo X. Para manter o exemplo simples, esta plataforma se movimenta apenas no Eixo X.

A imagem abaixo mostra as variáveis usadas pelo Blueprint:


Posicione o Blueprint da plataforma na posição inicial no nível e anote o valor de X da variável Location do Blueprint. Depois coloque na posição final e anote o valor de X. Coloque esses valores nas variáveis "X_Initial" e "X_Final". O meu exemplo possui estes valores:


A última parte que falta para concluirmos este Blueprint é o EventGraph. Precisamos de ações para alterar a posição do Blueprint de acordo com os valores da Timeline. O EventGraph ficou assim:

Clique para aumentar

Para facilitar a compreensão deste EventGraph vamos analisar cada elemento separadamente:

  • Função Lerp: Esta função recebe três parâmetros de entrada (A, B e Alpha). O parâmetro "Alpha" deve ser um valor do tipo float entre 0.0 e 1.0. Neste exemplo este parâmetro recebe o valor da variável "Position" que é modificada pela Timeline. O resultado desta função é uma interpolação entre os parâmetros A e B que possuem os valores das variáveis "X_Initial" e "X_Final". Por exemplo, se "Alpha" for 0.5 então o resultado será o valor que está no meio entre as variáveis "X_Initial" e "X_Final".
  • Break Vector / Make Vector: São utilizados para separar as variáveis X, Y, Z de um vetor e para montar um vetor baseado nestas variáveis. Elas são usadas neste exemplo por que estamos modificando apenas o valor de X da posição da plataforma.
  • Set Actor Location: Define a nova posição de um Ator.
  • Flip Flop: Possui duas linhas de execução como saída (A e B). Cada vez que é ativado ele irá alternar a saída entre A e B. Neste exemplo o Flip Flop é utilizado para alternar a execução da Timeline entre o sentido normal e o reverso. 
  • Timeline_Platform: A cada quadro do jogo a Timeline executa o "Update" que em nosso exemplo atualiza a posição da plataforma. Quando a Timeline conclui o tempo de 6 segundos ela executa o "Finished" que está ligado ao Flip Flop fazendo com que a Timeline seja executada no sentido reverso. Ou seja, esta timeline nunca irá parar sua execução durante o jogo.