Entendendo Prefabs e Instanciação

Instanciar e destruir objetos é considerado muito importante durante o jogo. Instanciar significa simplesmente trazer à existência. Os itens aparecem ou “surgem” no jogo, os inimigos morrem, os elementos da GUI desaparecem e as cenas são carregadas o tempo todo no jogo. Saber como se livrar adequadamente de objetos desnecessários e como trazê-los para dentro torna-se ainda mais essencial.

Vamos primeiro entender o que prefabsestá. Prefabs são considerados importantes para entender como a instanciação funciona no Unity.

Prefabs são como blueprintsde um GameObject. Prefabs são, de certa forma, umcopyde um GameObject que pode ser duplicado e colocado em uma cena, mesmo que não existisse quando a cena estava sendo feita; em outras palavras, pré-fabricados podem ser usados ​​paradynamically generate GameObjects.

Para criar um pré-fabricado, você simplesmente precisa arrastar o GameObject desejado de sua hierarquia de cena para o projeto Assets.

Agora, para instanciar um GameObject, chamamos o Instantiate()método em nosso script. Este método, definido emMonoBehaviour, recebe um GameObject como parâmetro, para saber qual GameObject criar / duplicar. Ele também tem várias substituições para alterar a transformação do objeto recém-instanciado, bem como parentalidade.

Vamos tentar instanciar um novo hexagon sempre que o Space tecla é pressionada.

Crie um novo script chamado Instantiatore abri-lo. NoUpdate método, digite o código fornecido abaixo.

Aqui, estamos usando o GetKeyDown método do Inputclasse para verificar se o jogador pressionou um botão específico durante o último frame. Como queremos que continue verificando, colocamosUpdate, que funciona 60 vezes por segundo. O método GetKeyDown retornatrue se a chave especificada pelo KeyCode enum (que lista todas as teclas possíveis em um teclado padrão) é pressionado nesse quadro.

public class Instantiator : MonoBehaviour {
   public GameObject Hexagon;
   // Update is called once per frame
   void Update () {
      if (Input.GetKeyDown(KeyCode.Space)) {
         Instantiate(Hexagon);
      }
   }
}

A declaração pública GameObject na parte superior cria um slot semelhante ao que criamos para o Rigidbody2D em nossas lições anteriores. Este slot aceita apenasprefabs (no tempo do editor) e gameObjects (em tempo de execução), no entanto.

Salve o script e deixe-o compilar. Uma vez feito isso, crie um novo,empty GameObject acessando o menu do botão direito do mouse na hierarquia de objetos e selecionando Create Empty.

Nomeie este objeto como algo reconhecível, como Instatiator Objecte anexar nosso script recém-criado a ele. No slot que aparece para o GameObject, arraste o prefab que criamos.

Se executarmos o jogo agora, pressionar a barra de espaço criará um novo objeto Hexágono idêntico ao que usamos para criar o pré-fabricado. Você pode ver cada hexágono sendo criado na hierarquia de objetos. A razão pela qual você não pode vê-los aparecer no jogo é porque, por enquanto, eles estão todos sendo criadosexactly um sobre o outro.

Em nossa próxima lição, entenderemos o conceito de destruição de objetos.