Prefabs e Instantiate
Parte da seção Fundamentos de Scripting no Unity do Journey de Unity da Coddy. Lição 62 de 85.
Um prefab é um GameObject salvo como modelo: arraste um objeto da Hierarchy para a janela Project, e o Unity o armazena com todos os seus componentes e valores do Inspector. O prefab em si não está na cena. Um script obtém um por meio de um campo, como qualquer outra referência: declare public GameObject parcelPrefab; e arraste o prefab para esse campo no Inspector.
Instantiate(prefab, position, rotation) cria uma cópia do prefab na cena e a retorna. Este drone de entregas solta um pacote na própria posição sempre que a tecla Space é pressionada. Quaternion.identity significa nenhuma rotação:
public GameObject parcelPrefab;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Instantiate(parcelPrefab, transform.position, Quaternion.identity);
}
}Cada pressionamento adiciona mais um objeto à Hierarchy, chamado Parcel(Clone). O prefab permanece como estava, então cada cópia começa com os mesmos valores. GetKeyDown é importante aqui: com GetKey, manter Space pressionada por meio segundo soltaria cerca de 30 pacotes, um por quadro.
Desafio
MédioFaça cada clique gerar uma moeda acima do jogador.
- Adicione o campo
public GameObject coinPrefab;. A cena o preenche com o prefab Coin. - Em
Update(), quando ocorrerInput.GetMouseButtonDown(0), chameInstantiate(coinPrefab, transform.position + new Vector3(0, 2, 0), Quaternion.identity);.
Pressione “Jogar”, mova-se e clique: uma moeda aparecerá acima do jogador a cada vez. Depois, pressione “Verificar”.
Experimente você mesmo
using UnityEngine;
public class CoinDropper : MonoBehaviour
{
public float speed = 4f;
// coinPrefab: um campo público do tipo GameObject, preenchido com o prefab Coin
void Update()
{
if (Input.GetKey(KeyCode.RightArrow))
{
transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
}
// Clique: cria uma moeda 2 unidades acima do jogador
}
}
Todas as lições de Fundamentos de Scripting no Unity
1Fundamentos de C# no Unity
Olá, UnityVariáveisDecimais precisam de um fTexto no ConsoleVariáveis que guardam valoresIf e ElseComparar númerosRevisão: Coletor de Moedas7Laços e Métodos
Repita com forLaços dentro de laçosEscreva um métodoMétodos que respondemArraysRevisão: Escada10Encontrando coisas
Buscar pelo nomeTagsBuscar por tipoReferências são melhores que FindO null do UnityRevisão: moeda mais próxima13Projeto: Desvie dos Blocos
O CorredorBlocos do Céu2Faça-o se mover
Posicione o cuboMova a cada quadroGire a cada segundoDirija com as teclasRecapitulando: dirija o cubo5Vetores
Somando vetoresDireçõesEspaço local e globalVelocidade diagonalDistância entre objetosVector3 é uma structRevisão: piloto de drone8GameObjects e Componentes
Referências no InspectorObter um componenteComponentes ausentesAdicionar um componenteRequireComponentMostrar e ocultarRevisão: Interruptor de luz11Prefabs e geração de objetos
Prefabs e InstantiateGerar objetos com um temporizadorGerar objetos em uma gradeListas de objetosRemover o mais recenteDestruirGeração aleatória de objetosRevisão: fogos de artifício6Transformações e hierarquia
Pais e filhosIçar a bandeiraEscalaOlhar para as coisasMover-se em direção a um pontoRevisão: Lua em órbita9Projeto: Pegue a Estrela
O PegadorUma Estrela CadentePratique por conta própria: Playground de Unity