Qué es un prefab#
Un prefab (de prefabricated) es una plantilla de un GameObject guardada como asset en el proyecto. Diseñas un objeto una vez —con sus componentes, valores e hijos— y luego creas tantas copias como quieras. Y lo mejor: si editas el prefab, todas las copias se actualizan.
Un enemigo, una bala, una moneda, un botón repetido, una pieza de nivel... todo lo que aparezca más de una vez debería ser un prefab.
Cómo se crea#
Arrastra un GameObject desde la Hierarchy hasta una carpeta del Project. Se convierte en prefab (se vuelve azul en la Hierarchy). A partir de ahí, cada copia que arrastres de vuelta a la escena es una instancia de ese prefab.
Ten una carpeta Prefabs/ con subcarpetas (Enemigos, UI, Props…). Un proyecto sin prefabs organizados se vuelve inmanejable enseguida.
Instanciar por código#
Para crear prefabs en tiempo de ejecución (balas, oleadas de enemigos) usa Instantiate. Guarda la referencia al prefab en un campo del Inspector:
using UnityEngine;
public class Spawner : MonoBehaviour
{
[SerializeField] private GameObject enemigoPrefab;
public void Spawnear(Vector3 donde)
{
Instantiate(enemigoPrefab, donde, Quaternion.identity);
}
}Ver el detalle en Instantiate y Destroy.
Overrides: instancias que se salen del molde#
Una instancia puede sobrescribir valores del prefab (cambiar su color, su vida...). Esos cambios se marcan en negrita en el Inspector. Puedes:
- Apply: mandar el cambio al prefab (afecta a todas las instancias).
- Revert: descartar el cambio y volver al valor del prefab.
Si cambias un valor en una instancia de la escena, ese valor queda "desconectado" del prefab: aunque luego edites el prefab, esa instancia mantendrá su override. Es una fuente clásica de "a mí no me funciona": revisa si la instancia tiene overrides no deseados.
Prefab Variants y Nested Prefabs#
- Nested prefabs: un prefab puede contener otros prefabs (un "coche" con 4 prefabs "rueda" dentro). Editas la rueda una vez y se actualiza en todos los coches.
- Prefab Variant: un prefab que hereda de otro y cambia algunas cosas (como la herencia en programación). Un "EnemigoRápido" variante de "Enemigo" que solo cambia la velocidad. Si editas el "Enemigo" base, la variante hereda los cambios que no haya sobrescrito.
Errores frecuentes#
- Editar instancias en la escena en vez del prefab, y acumular overrides sin querer.
- Referenciar objetos de la escena desde un prefab (un prefab no puede guardar referencias a objetos concretos de una escena; asígnalas en runtime).
- Duplicar objetos con copiar/pegar en vez de usar prefabs (luego cambiar algo obliga a editarlos uno a uno).
Buenas prácticas#
- Todo lo que se repita, prefab.
- Usa variantes para familias de objetos (tipos de enemigo, tipos de botón).
- Mantén los prefabs "autónomos": que no dependan de objetos concretos de una escena.
Resumen#
Los prefabs son plantillas reutilizables: diseñas una vez, usas muchas, y editas en un sitio para actualizar en todos. Con overrides, variantes y anidamiento cubren desde una simple bala hasta piezas de nivel complejas. Son la base de un proyecto mantenible.