Prefabs e Instantiate
Parte de la sección Fundamentos de scripting en Unity del Journey de Unity de Coddy. Lección 62 de 85.
Un prefab es un GameObject guardado como plantilla: arrastra un objeto desde la ventana Hierarchy hasta la ventana Project y Unity lo guarda con todos sus componentes y valores del Inspector. El prefab en sí no está en la escena. Un script obtiene uno mediante un campo, como cualquier otra referencia: declara public GameObject parcelPrefab; y arrastra el prefab a ese campo en el Inspector.
Instantiate(prefab, position, rotation) crea una copia del prefab en la escena y la devuelve. Este dron de reparto deja caer un paquete en su propia posición cada vez que se pulsa la barra espaciadora. Quaternion.identity significa que no hay rotación:
public GameObject parcelPrefab;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Instantiate(parcelPrefab, transform.position, Quaternion.identity);
}
}Cada pulsación añade un objeto más a la ventana Hierarchy, llamado Parcel(Clone). El prefab permanece tal como estaba, así que cada copia parte de los mismos valores. GetKeyDown es importante aquí: con GetKey, mantener pulsada la barra espaciadora durante medio segundo dejaría caer unos 30 paquetes, uno por fotograma.
Desafío
IntermedioHaz que cada clic genere una moneda encima del jugador.
- Añade el campo
public GameObject coinPrefab;. La escena lo rellena con el prefab Coin. - En
Update(), cuando se activeInput.GetMouseButtonDown(0), llama aInstantiate(coinPrefab, transform.position + new Vector3(0, 2, 0), Quaternion.identity);.
Pulsa «Jugar», muévete y haz clic: cada vez aparecerá una moneda encima del jugador. Después, pulsa «Comprobar».
Pruébalo tú mismo
using UnityEngine;
public class CoinDropper : MonoBehaviour
{
public float speed = 4f;
// coinPrefab: un campo público de tipo GameObject, al que se asigna el 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);
}
// Click: genera una moneda 2 unidades por encima del jugador
}
}
Todas las lecciones de Fundamentos de scripting en Unity
1Conceptos básicos de C# en Unity
Hola, UnityVariablesLos decimales necesitan una fTexto en la consolaVariables que recuerdanIf y ElseComparar númerosRepaso: Recolector de monedas7Bucles y métodos
Repetir con forBucles dentro de buclesEscribir un métodoMétodos que respondenArraysRepaso: escalera10Encontrar cosas
Buscar por nombreEtiquetasBuscar por tipoLas referencias vencen a FindEl null de UnityRepaso: moneda más cercana13Proyecto: Esquiva los bloques
El corredorBloques desde el cielo2Haz que se mueva
Coloca el cuboMuévelo en cada fotogramaGira cada segundoDirige con las teclasRepaso: conduce el cubo5Vectores
Sumar vectoresDireccionesEspacio local y mundialVelocidad diagonalDistancia entre objetosVector3 es una estructuraRepaso: piloto de dron8GameObjects y componentes
Referencias en el InspectorObtener un componenteComponentes faltantesAñadir un componenteRequireComponentMostrar y ocultarRepaso: interruptor de luz11Prefabs y generación de objetos
Prefabs e InstantiateGenerar objetos con un temporizadorGenerar objetos en una cuadrículaListas de objetosDeshacer el más recienteDestruirGeneración aleatoria de objetosRepaso: fuegos artificiales3El Inspector
Campos del InspectorSerializeFieldFloats y MathfAtributos del InspectorRepaso: Ascensor6Transformaciones y jerarquía
Padres e hijosIza la banderaEscalaMira las cosasMuévete hacia un puntoRepaso: Luna en órbita9Proyecto: Atrapa la estrella
El cazadorUna estrella fugaz12El ciclo de vida de un script
Awake y StartUpdate y LateUpdateOnEnable y OnDisableEl orden del ciclo de vidaRepaso: registrador del ciclo de vidaPractica por tu cuenta: Playground de Unity