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

arrow_back Aula 06 - Jogo Polygonal Rescue - Parte 4 - Prefabs e Mudanças de Fases

Testando a Criação de Instâncias de Prefabs por Scripts em uma Nova Cena

O método Awake() fará as seguintes ações:

  1. Crie uma variável Vector3 chamada centro que terá a posição do GameObject ao qual o script está associado (InstanciarPrefabs).
  2. Executará um laço for com uma variável i de 0 até a quantidade escolhida.
  3. Para cada iteração do laço um dos Prefabs da lista prebabs_base será escolhido (aleatoriamente) e armazenado na variável prefab_escolhido.
  4. Ainda dentro do laço deve ser criado um novo Vector3 chamado posicao_da_instancia que terá o valor X igual a um valor aleatório entre (centro.x - distancia_maxima) e (centro.x + distancia_maxima). O valor de Y de posicao_da_instancia será o mesmo do centro, já que não queremos variar a posição das instâncias verticalmente. O valor Z é igual a um valor aleatório entre (centro.z - distancia_maxima) e (centro.z + distancia_maxima).
  5. No laço ainda usamos o Instantiate para criar o prefab_escolhido na posicao_da_instancia e sem nenhuma rotação. No Unity, para indicar que não queremos nenhuma rotação, usamos o comando Quaternion.identity (veremos mais sobre Quaternions e rotações em outras aulas).
  6. Finalize o laço for.

O código que instancia os prefabs no Awake() deve ficar conforme a Figura 19.

Salve o script, volte ao Unity e faça as seguintes mudanças para que seja mais fácil a visualização do resultado:

  • Selecione o piso, reset sua posição e modifique sua escala para 25, 1, 25. Isso fará com que todas as instâncias fiquem sobre ele.
  • Selecione a Main Camera e modifique a propriedade Position para 15, 15, -15 e a Rotation para 45, -45, 0. Assim ela deverá ficar de uma forma que o Camera Preview mostre todo o piso.
  • Reposicione o GameObject InstanciarPrefab para a Position 0, 1.5, 0 para que fique no centro e um pouco acima do piso.
  • Caso tenha criado essa cena com os objetos diferentes do recomendado, durante o texto realize os ajustes necessários para o seu caso. O importante é que a câmera mostre todo o piso no Preview.

Atenção!

Se você prestou atenção usamos o método Random.Range() para criar valores aleatórios entre um valor mínimo e máximo. O Random.Range(int min, int max) retorna um número float entre o parâmetro min (incluindo ele) e o parâmetro max (excluindo ele), ou seja, esse valor pode ser igual a min por coincidência, mas sempre será menor que max. O uso do Random associado ao Instantiate é muito útil quando queremos criar experiências distintas todas as vezes que um jogador visita uma cena do nosso jogo.

Se você realizou esses ajustes, sua cena deve estar como na Figura 20.

Versão 5.3 - Todos os Direitos reservados