Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Jogos Digitais / Desenvolvimento com Motores de Jogos II / Aula
Para adaptar o nosso InstanciarPrefabs.cs para que a área de geração seja retangular, precisamos inicialmente trocar a variável float distancia_maxima por duas outras:
Assim poderemos configurar essas duas variáveis separadamente. Para isso realize os seguintes passos:
A declaração de suas variáveis deve ficar como na Figura 5.
Agora vamos modificar a nossa função Awake para usar a largura e o comprimento no lugar de distancia_maxima. Não é algo muito difícil, pois o código está bem organizado. Repare que distancia_maxima é atualmente utilizada para a definição da posição da instância do prefab a ser criado (ver Figura 6).
Repare na Figura 6 que a variável distancia_maxima está destacada pelo Monodevelop. Isso ocorre pelo fato de que ela não existe mais, já que a removemos.
Trocaremos as duas ocorrências de distancia_maxima por (largura/2) na primeira linha em que ela aprece. Por que dividir largura por 2? Isso se dá pelo fato de a posição X variar do centro da área + para um lado e - para o outro, ou seja, para cada um desses lados precisamos variar a metade da largura. A mesma coisa para a variável comprimento e o eixo Y. A Figura 7 mostra em azul a área de geração retangular que estamos querendo criar, assim como a representação das variáveis largura e comprimento em vermelho e a metade do valor dessas variáveis de cada lado do centro em verde.
Para utilizar a variável largura modifique a linha:
posicao_da_instancia.x = Random.Range ((centro.x - distancia_maxima), (centro.x + distancia_maxima));
Para que fique assim:
posicao_da_instancia.x = Random.Range ((centro.x - largura/2), (centro.x + largura/2));
Para utilizar a variável comprimento, modifique a linha:
posicao_da_instancia.z = Random.Range ((centro.z - distancia_maxima), (centro.z + distancia_maxima));
Para que fique assim:
posicao_da_instancia.z = Random.Range ((centro.z - comprimento/2), (centro.z + comprimento/2));
E aí, tudo bem até aqui? É basicamente essa a única mudança no script para que ele instancie prefabs em uma área retangular. Lembre-se que qualquer dificuldade ou questionamentos podem ser esclarecidos nos encontros presenciais ou através da criação de tópicos no Moodle para discutir sobre o assunto.
Versão 5.3 - Todos os Direitos reservados