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.