quarta-feira, 22 de outubro de 2014

Arrays e For loops em Blueprints

O uso de Arrays permite o agrupamento de variáveis do mesmo tipo. A criação de um Array em Blueprints é muito simples. Crie uma nova variável e escolha o tipo desejado. Ao lado do tipo da variável existe um ícone que deve ser clicado para transformar a variável em um Array, conforme a imagem abaixo:


Para compreender o uso de um Array vamos implementar um Blueprint simples que ligará e desligará um conjunto de Lâmpadas (Point Lights) quando o jogador encostar no Blueprint.

Crie um novo Blueprint e crie uma nova variável chamada "Lamps". Esta variável deve ser um Array do tipo "Point Light". Selecione a opção "Editable" para podermos definir no Editor de Níveis quais serão os "PointLights" que serão manipulados por este Blueprint. A variável "Lamps" ficará assim:


No modo de Componente do Blueprint, é necessário adicionar o componente "Box" para que o Blueprint possa identificar colisão com o jogador.


Após adicionar o "Box"  é preciso desmarcar a propriedade "Hidden in Game" para que ele apareça durante o jogo. Vamos manter assim para facilitar o teste.


As Ações deste Blueprint serão executadas quando ocorrer o Evento "Actor Begin Overlap". A Ação "ForEachLoop" executa a Ação "Toggle Visibility" para cada um dos elementos do Array "Lamps":

Clique para aumentar

A Ação "ForEachLoop" recebe como parâmetro de entrada um Array e executa o conjunto de Ações que estejam associados ao pino de saída "Loop Body" para cada elemento do Array que pode ser obtido no pino de saída "Array Element". Por exemplo, se o Array possuir 4 elementos, as Ações do "Loop Body" serão executadas 4 vezes. Após isso o fluxo de execução é direcionado para o pino de saída "Completed".

Para testar este Blueprint, é preciso adicionar alguns "Point Lights" no Nível: 


Coloque vários "Point Lights" próximos uns dos outros. Adicione o novo Blueprint ao Nível em um local próximo aos "Point Lights". Na aba "Details" do Blueprint veja a variável "Lamps". 

É possível adicionar elementos ao Array clicando no ícone com o símbolo "+". Para cada elemento adicionado há um ComboBox que lista os "Point Lights" que fazem parte do Nível. A imagem abaixo mostra o meu exemplo com 4 Point Lights selecionados.


Observe que o índice de um Array começa em zero. Então um Array com 4 elementos ocupam as posições 0, 1, 2 e 3 do Array.  Os Point Lights que fazem parte deste Array serão ligados e desligados pela Ação do Blueprint. Para testar, basta executar o jogo no editor e encostar no Blueprint usando um Actor para ativar o evento "Actor Begin Overlap".

Um Array e o For Each Loop podem ser usados juntos com a ação "Get All Actors of Class" para manipularmos todos os Atores de uma determinada Classe/Blueprint. Imagine que o nosso Blueprint manipulasse todos os Point Lights de um Nível, neste caso não seria preciso indicar manualmente os Point Lights. O Script abaixo mostra como alternar a visibilidade de todos os Point Lights de um Nível:

Clique para aumentar

A ação "Get All Actors of Class" retorna um Array do tipo "Actors" contendo referências para os Atores que são da classe que foi selecionada na opção "Actor Class". Este Array pode ser usado na Ação "For Each Loop" para percorrer todos os elementos no Array. É necessário fazer o "Cast" de cada elemento de Array para podermos acessar as Ações da classe "Point Light".

Vamos fazer outro exemplo para ilustrar o uso de outro tipo de "For Loop". Neste exemplo queremos desenhar o número de vidas do jogador como ícones na tela, a imagem abaixo mostra o jogador com 3 vidas.


Para fazer este exemplo é necessário criar um Blueprint baseado na classe HUD e importar uma imagem que será usada para representar as vidas na tela.

Usaremos um "For Loop" para desenhar as imagens na tela. A quantidade de vezes que a imagem será desenhada equivale ao número de vidas do jogador representado pela variável inteira "Lives":

Clique para aumentar


Próximo: Usando Level Blueprints
Anterior: Switchs e Enumerações em Blueprints
Sumário