Cursos / Jogos Digitais / Desenvolvimento com Motores de Jogos I / Aula

arrow_back Aula 14 - Criação de Elementos em Tempo de Execução, Dano e Elementos Coletáveis

1. Criação Dinâmica de Objetos

1.2 Criando o Spawner (ou Gerador de Objetos)

Agora que já temos o Prefab do elemento a ser criado dinamicamente, podemos criar aquele o qual será responsável por gerar os objetos e os lançar na cena, conhecido como Spawner, que significa algo como “gerador de objetos”. Para iniciar o processo, criaremos um novo Sprite para representar a bazuca. Mais uma vez, faremos apenas com um elemento vazio de placeholder. Crie um novo sprite quadrado, na pasta Sprites, utilizando o comando Assets -> Create -> Sprites -> Square.

Da mesma maneira que fizemos com os outros objetos, vamos adicionar um GameObject vazio para armazenar as bazucas contidas em nossa fase. Para isso, utilize o menu GameObject -> Create Empty e então renomeie o objeto para Bazookas. Não esqueça de alterar sua posição e rotação para (0,0,0) com a escala (1,1,1).

Feito isso, adicione o novo sprite criado como filho desse novo objeto, formando, assim, a nossa primeira bazuca. Altere a sua Order in Layer para 1. Para posicionar os elementos como vimos na Figura 4, precisamos alterar a posição da bazuca para (-131.5, -4.5, 0) com a escala (3,3,0). Já o Prefab Box que aproveitaremos da cena como estava moveremos para (-98.5, -4.5, 0). Com isso, chegaremos à configuração vista na Figura 4. Agora falta apenas configurarmos a bazuca para funcionar!

Comecemos então pelos seus componentes. A bazuca precisará de um Box Collider 2D para o Player colidir com ela normalmente, uma vez que ela vai ser um componente do cenário como qualquer outro. As configurações padrões do colisor são o bastante para o que queremos. Outro detalhe que precisamos lembrar é de alterar a camada a qual ela pertence para Ground, assim o personagem poderá subir nela adequadamente.

Feito isso, o próximo passo é a criação do script da bazuca. Vejamos o script completo na Listagem 2 para então discutirmos o que foi feito.

Listagem 2 - Código do script Shooter Script, adicionado ao objeto Bazooka.
Fonte: Elaborada pelo autor.

A primeira linha do código já é o motivo de toda a seção anterior ter existido! Antes de tudo, precisamos em nosso Spawner justamente de uma referência ao objeto que criaremos ao longo da execução do jogo. Como todo objeto herda de GameObject, podemos criar uma variável do tipo GameObject, garantindo que o Prefab poderá ser utilizado nessa variável. Vamos nomeá-la de missilePrefab para facilitar o entendimento.

Em seguida criamos as variáveis de configuração do Prefab em si – speed e spawningPos. A variável speed indicará a velocidade de movimentação do míssil horizontalmente e a spawningPos indicará a localização que o míssil será criado.

A última variável que criamos é a active, ela será responsável por interromper o ciclo de criação caso a cena deixe de estar ativa. Essa variável começará com o valor TRUE e só terá o valor alterado para FALSE caso chegue a mensagem de Stop() que criamos lá em nossos mísseis, lembra?

Em seguida, no método Start, atribuímos o valor da posição de criação do objeto. Essa posição é igual à posição do criador + a escala em X dele, para X, -4.5f para Y e também igual ao criador para Z. Isso indica que o objeto deverá ser criado numa altura fixa, mas em uma posição em X igual à do objeto que está criando o míssil, mais um offset. Adicionamos esse offset para que o objeto não seja criado em cima do seu criador, colidindo imediatamente e encerrando o seu ciclo de vida.

Após configurar a posição, chamamos o método Spawn pela primeira vez, ainda no método Start(). Com isso, iniciamos o nosso ciclo de criação de objetos, uma vez que o método Spawn, ao fim do seu ciclo, é chamado novamente, com um atraso definido aleatoriamente, entre 1 e 1.5f, através do método Random.Range.

Versão 5.3 - Todos os Direitos reservados