Menu
CoddyTech

Prefabs e Instantiate

Parte da seção Noções básicas de scripting no Unity do Journey de Unity da Coddy. Lição 48 de 67.

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 entrega solta um pacote na própria posição cada vez que a tecla Espaço é 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 a tecla Espaço pressionada por meio segundo soltaria cerca de 30 pacotes, um por quadro.

challenge icon

Desafio

Médio

As setas já movem o jogador. Faça cada clique gerar uma moeda acima dele:

  • Adicione um campo público GameObject chamado coinPrefab. A cena atribui o prefab Coin a ele assim que o campo existir.
  • Quando o botão esquerdo do mouse for clicado, gere uma cópia da moeda 2 unidades acima do jogador, sem rotação.

Pressione Jogar, mova-se e clique algumas vezes, depois 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: crie uma moeda 2 unidades acima do jogador
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Noções básicas de scripting no Unity