Prefabs e instanciar
Parte de la sección Fundamentos de scripting en Unity del Journey de Unity de Coddy. Lección 48 de 67.
Un prefab es un GameObject guardado como plantilla: arrastra un objeto de la ventana Hierarchy a 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 Space. 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, con el nombre Parcel(Clone). El prefab permanece tal como estaba, así que cada copia parte de los mismos valores. Aquí es importante usar GetKeyDown: con GetKey, mantener pulsada la tecla Space durante medio segundo dejaría caer unos 30 paquetes, uno por fotograma.
Desafío
IntermedioLas flechas ya mueven al jugador. Haz que cada clic genere una moneda encima:
- Añade un campo público de tipo
GameObjectllamadocoinPrefab. La escena lo asigna al prefab Coin en cuanto exista el campo. - Cuando se haga clic con el botón izquierdo del ratón, genera una copia de la moneda 2 unidades por encima del jugador, sin rotación.
Pulsa Play, muévete y haz clic unas cuantas veces; después, pulsa Check.
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 le 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);
}
// Clic: crea una moneda 2 unidades por encima del jugador
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos de scripting en Unity
1Tu primer script
Hola, UnityColoca el cuboMuévete en cada fotogramaGira cada segundoDirige con las teclasRepaso: conduce el cubo4Vectores
Sumar vectoresDireccionesEspacio local y globalVelocidad diagonalDistancia entre objetosVector3 es una estructuraRepaso: piloto de dron7Proyecto: Atrapa la estrella
El atrapadorUna estrella fugaz10El ciclo de vida de los scripts
Awake y StartUpdate y LateUpdateOnEnable y OnDisableEl orden del ciclo de vidaRepaso: registrador del ciclo de vida2El Inspector
Campos del InspectorSerializeFieldNúmeros decimales y MathfAtributos del InspectorRepaso: Ascensor5Transformaciones y jerarquía
Padres e hijosEscalaMirar objetosMoverse hacia un puntoRepaso: Luna en órbita8Encontrar cosas
Buscar por nombreEtiquetasBuscar por tipoLas referencias superan a FindEl valor nulo de UnityRepaso: la moneda más cercana11Proyecto: Esquiva los bloques
El corredorBloques que caen6GameObjects y componentes
Referencias en el InspectorObtener un componenteComponentes faltantesAñadir un componenteRequireComponentMostrar y ocultarRepaso: interruptor de luz9Prefabs y generación
Prefabs e instanciarGenerar con un temporizadorGenerar en una cuadrículaListas de objetosDestruirGeneración aleatoriaRepaso: fuegos artificiales