Instanciar e destruir personagens ou objetos é muito comum em qualquer jogo. Instanciar significa trazer o objeto à existência. Objetos aparecem, surgem ou são gerados em um jogo, inimigos morrem, elementos da GUI desaparecem e cenas são carregadas o tempo todo no jogo.
Os pré-fabricados são muito úteis quando você deseja instanciar GameObjects complicados ou uma coleção de GameObjects em tempo de execução. Em comparação com a criação de GameObjects do zero usando código, instanciar pré-fabricados usando código é melhor e tem muitas vantagens.
Vamos entender o que são pré-fabricados; já que os pré-fabricados são considerados importantes para entender como funciona a instanciação no Unity.
Pré-fabricados são como projetos de um GameObject. Então podemos dizer que Prefabs são uma cópia de 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 para gerar GameObjects dinamicamente.
Vamos criar uma casa pré-fabricada; para isso, você precisa arrastar o GameObject desejado da sua hierarquia de cena para os ativos do projeto.
Agora, para instanciar um GameObject, chamamos o método Instantiate() em nosso script. Este método está disponível no MonoBehaviour, leva um GameObject como parâmetro, para saber qual GameObject criar ou duplicar. Ele também possui diferentes substituições para alterar a transformação do objeto recém-instanciado, bem como o pai.
Agora crie um novo script chamado Instantiator.cs e copie o código a seguir nele.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Instantiator : MonoBehaviour { public GameObject Diamond; // Update is called once per frame void Update() { if (Input.GetKeyDown(KeyCode.Space)) { Instantiate(Diamond); } } }
No programa acima, utilizamos o método GetKeyDown da classe Input para verificar se o jogador pressionou um botão específico durante o último quadro. O método GetKeyDown() retorna verdadeiro se a tecla especificada pelo enum KeyCode (que é usado para listar todas as teclas possíveis em um teclado padrão) for pressionada nesse quadro.
Salve o roteiro. E agora, crie um GameObject vazio clicando com o botão direito na cena na guia Hierarquia.
Anexe esse arquivo de script (Instantiator.cs) ao componente do GameObject recém-criado na guia Inspetor.
Agora, na variável Diamond, arraste aquele pré-fabricado que criamos.
Ao executar o jogo agora, pressionar a barra de espaço criará um novo objeto Diamante idêntico ao que usamos para criar a pré-fabricada. Você pode ver que cada diamante é criado na hierarquia de objetos. A razão pela qual você não consegue vê-los aparecer no jogo é que, por enquanto, todos eles estão sendo criados exatamente um sobre o outro. Mas você pode verificar isso na guia Hierarquia. Cada vez que você pressiona uma barra de espaço, ela aparecerá na aba como um Diamante (clone).