A presente aula irá abordar duas funcionalidades complementares – Cenas e Prefabs.
Para deixar a coisa mais dinâmica, a aula será em cima da criação de um cenário 2D. Por tanto ao criar o projeto dessa aula, vamos escolher a opção 2D na tela dos projetos.
Cenas
Para facilitar o desenvolvimento de um jogo, o Unity permite separar o jogo em cenas (mesmo porque qualquer jogo é separado de alguma forma em cenas, seja cena do menu, ou do game over).
Ao criar um projeto, automaticamente o Unity gera uma cena, contudo, as cenas nunca são salvas automaticamente. Para criar, abrir e salvar cenas, há as opções na aba File (New Scene, Open Scene, Save Scene, Save Scene as...), que fica na parte superior esquerda da interface do Unity.
Cada cena roda independentemente das outras, e, por esse motivo, qualquer objeto de uma Cena X não aparecerá na Cena Y. Para isso, o usuário deve alterar a Cena Y e criar o objeto nela.
Prefabs
Imagine que queremos montar vários cenários de plataforma com caminhos diferentes. Precisaríamos editar cada cenário e montar as plataformas, do zero, uma a uma, ajustando os componentes e seus atributos. Seria um trabalho braçal muito grande e lento.
Os prefabs servem justamente para amenizar essa trabalheira toda. Um prefab funciona como um backup de um objeto, ou seja, o usuário monta o objeto na cena, guarda esse objeto em alguma pasta da aba Project, e, quando precisar usar o objeto de novo, é só fazer uma cópia dele para a cena.
Nesse exemplo, o prefab montado evita gastar tempo montando as plataformas do zero em todo novo cenário, sobrando apenas o trabalho de posicionar as plataformas na cena.
Demonstração
Passo 1:
Precisamos ter uma imagem (png, jpg, bitmap, por exemplo) que servirá como plataforma, aqui usaremos uma sprite de um quadrado com bordas. A imagem deve ser salva dentro da pasta Assets (ou alguma pasta dentro dela) do projeto do Unity (geralmente pelo caminho C:\Users\Public\Documents\<Nome do projeto>\Assets\).
Passo 2:
É importante arrumar as propriedades da imagem. Ao clicar na imagem, no lado direito (lembrando, propriedades sempre a direita, no Inspector), aparece a aba com as informações da imagem.
Por definição, o Unity costuma entender imagem como uma imagem comum, e não uma sprite (que é o objeto 2D, uma vez que ele participa da interação no jogo). Portanto, no campo Texture Type, é preciso colocar Sprite (2D e UI).
Existe um outro campo notável – Sprite mode, que é usado para saber se a imagem possui mais de um Sprite ou não. No caso, existe apenas uma imagem, logo, a opção deve ficar como Single.
E por fim, na parte de baixo, apertar o Apply.
Passo 3:
Agora que o Unity já entende a imagem como Sprite, ela pode ser arrastada para o Scene, onde ela vira um objeto 2D.
Vale observar que da mesma maneira que objetos 3D possuem um Mesh Renderer, um objeto 2D possui um Sprite Renderer.
Passo 4:
Com o quadrado na cena, para gerar o prefab é só arrastar o objeto (pela aba Hierarchy no lado esquerdo) para dentro da pasta Assets, em Project. Se der certo, a cor do nome na lista muda para azul, e o prefab dentro da pasta terá o nome com a extensão .prefab (como na figura a seguir).
Prefab com vários objetos
É possível fazer o mesmo usando mais de um objeto, sendo eles iguais ou diferentes.
A lógica é semelhante, contudo para isso é necessário tratar o prefab como um objeto só. Para fazer isso se usa um objeto vazio (Create Empty).
O objeto vazio servirá apenas como uma caixa vazia em que se coloca objetos dentro, facilitando a mudança de posição, rotação e escala, ou ainda compartilhar com eles algum outro componente.
Dessa forma, basta arrastar o quadrado para dentro do objeto vazio (com o nome de GameObject, por padrão) no Hierarchy. Isso faz o quadrado virar filho do objeto vazio.
Depois de arrastar o prefab do quadrado três vezes para dentro do objeto vazio, é conveniente arrumar a posição dos quadrados. É importante reparar que é possível manipular esses objetos independentes de serem filhos ou não.
Tirando os quadrados um de cima do outro (mudando de posição na cena), e fazendo o mesmo processo de arrastar o objeto para dentro do Project, se chega no resultado da imagem abaixo, a imagem original do quadrado, o prefab do quadrado e o prefab de três quadrados juntos.
Por fim, quando precisamos replicar o mesmo quadrado diversas vezes, é só uma questão de arrastar o prefab para a cena quantas vezes for necessário, e posicionar todos esses prefabs clonados em seus devidos lugares.