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

Instâncias de Prefabs em Scripts

Já criamos nossos Prefabs e também suas instâncias usando o editor do Unity, posicionando-os nos locais desejados. Entretanto, no Unity é possível criar Prefabs através de scripts durante a execução do jogo. Isso é muito útil quando queremos criar GameObject instâncias de um Prefab em locais aleatórios, por exemplo, ou quando a sua criação depende do acontecimento de algum evento no jogo, como a criação de um novo projétil quando um jogador realiza um disparo, a criação de fragmentos de vidro quando o jogador quebra um espelho, etc. São várias as aplicações.

No nosso jogo criamos instâncias dos Prefabs arrastando-os para a cena, escolhendo uma posição. Não alteramos a sua rotação, deixando-a como 0,0,0 no Transform, que é seu valor padrão, mas também poderíamos ter mudado esse valor depois de arrastar o Prefab.

A criação de Prefabs por scripts é realizada com o método Instantiate e ele pode ser chamado de algumas formas distintas, com parâmetros diferentes. Essas formas são:

  • public static Object Instantiate(Object original);
  • public static Object Instantiate(Object original, Transform parent);
  • public static Object Instantiate(Object original, Transform parent, bool instantiateInWorldSpace);
  • public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
  • public static Object Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent).

Os parâmetros significam:

original Um objeto existente que você deseja fazer a cópia (O Prefab).
position Posição da nova instância.
rotation Rotação da nova instância.
parent O GameObject “pai” que a nova instância será criada como filha.
instantiateInWorldSpace Se quando associado ao pai a posição original relativa à cena será mantida.
Tabela 1 - Parâmetros do Instantiate.

O método Instantiate retorna por padrão uma variável genérica do tipo Object, porém ela é uma referência para a instância recém-criada por ele. Caso você deseje manipular essa instância criada é muito comum armazená-la em uma variável do tipo GameObject (que é diferente de Object), e um modo de fazer isso é realizando uma conversão de tipos em C# adicionando “as GameObject” no final da chamada do método. Exemplo:


Versão 5.3 - Todos os Direitos reservados