Unity 3D: Como instanciar GameObjects

Utilizando um método padrão da Unity conseguimos criar GameObject em tempo de execução.

Existem diversas formas de se criar jogos e seus GameObjects, em uma dessas formas nós precisamos criar GameObject com um determinado comportamento em tempo de execução. Esse tipo de recurso é utilizado em um disparo em um jogo de Tank, flechas ou até mesmo criar componentes do cenário.

Para instanciar um GameObject, precisamos de algumas informações, como: Quem será criado? Onde será criado? Qual a rotação de criação?

Devemos ter essas respostas antes de pensar em script ou qualquer outra coisa. Para o nosso exemplo, vamos instanciar um GameObject Sphere,  será criado na posição e rotação de um Empty GameObject.

Seguindo as orientações acima, vamos criar um C# script chamado de InstantiateObject com o código abaixo.

using UnityEngine;

public class InstantiateObject : MonoBehaviour
{

	public GameObject spawn;

	public Transform target;

	void Update()
	{
		if (!Input.GetKeyDown(KeyCode.E))
			return;

		Instantiate(spawn, target.position, target.rotation);
	}
}

No script acima temos duas variáveis públicas, que são:

  • Spawn - GameObject que será instanciado;
  • Target - Transform na qual vamos extrair a posição e rotação.

Note que ao pressionar a tecla E, o GameObject é criado.

O método responsável por criar esses GameObject para nós, é o Instantiate, ele recebe quatro parâmetros que vamos ver a seguir, veja que omitimos o último.

  • GameObject/Prefab a ser criado;
  • Posição;
  • E rotação a ser criado;
  • Caso queira que seja instanciado dentro de algum outro GameObject, passe sua referência aqui.