Cursos / Jogos Digitais / Desenvolvimento com Motores de Jogos I / Aula
Falando do método Spawn, note que ele está totalmente sob uma condição – o objeto estar ativo. Essa é a condição que quebrará o ciclo de chamadas próprias do método Spawn. Em seguida, caso o objeto esteja ativo, criaremos um novo GameObject, chamado missile, que é um GameObject.Instantiate de nossa variável missilePrefab como um GameObject. O que vemos na linha 20 é exatamente isso! Instanciamos uma nova cópia do Prefab, convertendo-a para um GameObject (pois sabemos que ela será um, com certeza) e salvando-a na nova variável criada.
Perceba que não é necessário criar uma nova variável para armazenar o objeto criado! Fazemos isso para que, em seguida, possamos alterar suas propriedades. Alteramos sua posição para a spawningPos que havíamos definido e, em seguida, alteramos o seu pai para o próprio objeto criado. Isso facilitará o gerenciamento de todos esses objetos filhos, como havíamos comentado anteriormente.
Por fim, acessamos o script do gameObject e alteramos o valor da variável speed para que seja igual à variável speed que criamos nesse script. Isso também pode ser útil caso queira variar o valor de velocidade entre objetos criados, utilizando, por exemplo, o método Random.Range, usado na última linha. Esse método serve justamente para escolher um valor aleatório dentro da escala definida entre os seus dois parâmetros, inclusive contando-os.
O último método em nosso script é justamente aquele que havíamos citado anteriormente, utilizado pelo míssil para avisar que o Player foi destruído. Esse método é responsável por parar a bazuca e avisar também a todos os mísseis já criados que eles podem parar. Podemos fazer isso utilizando o serviço de mensagens do Unity.
É possível, em diversas situações, trocar mensagens entre componentes os quais possuem alguma relação hierárquica. Para fazer isso, utilizamos os métodos de mensagem do Unity como SendMessage, SendMessageUpwards e BroadcastMessage. O primeiro envia uma mensagem a todos os componentes de um mesmo objeto. O segundo envia a mensagem para cima, ou seja, para o seu pai. Já o último, o BroadcastMessage, passa a mensagem a todos os filhos de um objeto.
Como estamos criando todos os mísseis como filhos da bazuca, ao utilizar o método de mensagens BroadcastMessage, podemos atingir todos os mísseis já criados. Esse método recebe um parâmetro que é justamente o nome do método a ser chamado em cada um desses recebedores. No caso, chamaremos o método StopMissile, o qual vimos na Listagem 1, sendo o responsável por desativar um míssil para que não haja mais interação dele com o ambiente.
Adicionado esse script ao nosso objeto Bazooka, na cena, precisamos apenas adicionar o Prefab Missile, criado anteriormente, como Prefab da variável pública a qual criamos no script. Como já vimos, basta arrastar o Prefab até o campo, no editor, para que façamos essa definição.
Com tudo feito, podemos apertar o Play e ver a nossa bazuca atirando diversos mísseis (lembre-se de comentar as linhas do IF da Listagem 1, uma vez que ainda não alteramos o Player para tomar dano, adicionando os métodos lá utilizados). O resultado pode ser visto na Figura 5.
Com isso, concluímos nossa parte de criação dinâmica de elementos em nossa fase. Perceba que o processo é bem simples, como dissemos antes! Criamos um Prefab, criamos um Spawner, adicionamos ao Spawner um script que referencie o Prefab e então, em tempo de execução, seja capaz de o instanciar pelo método GameObject.Instantiate. Assim, novos objetos aparecem a partir daquele Prefab, da maneira que for configurado no Spawner! Massa \o/
Versão 5.3 - Todos os Direitos reservados