Prefabs
Objetos reutilizables: crear, instanciar, aplicar y usarlos desde Lua.
Un prefab es un objeto con sus hijos y componentes guardado como asset
(.crprefab) para reutilizarlo: enemigos, farolas, puertas, monedas... Cada copia en una escena es una
instancia enlazada a su prefab: si cambias el prefab, cambian todas.
Crear un prefab
- Arrastra un objeto de la Jerarquía al panel Proyecto (al fondo o a una carpeta).
- O clic derecho en la Jerarquía > Prefab > Crear prefab: se guarda en
Assets/Prefabs.
El objeto pasa a ser la primera instancia del prefab y se ve en azul en la Jerarquía.
Poner copias en la escena
Arrastra el .crprefab a la Escena (cae en el suelo bajo el ratón), a la Jerarquía (como hijo del objeto
donde lo sueltes) o haz doble clic en él.
Aplicar, revertir y cambios propios
Al elegir una instancia, el Inspector muestra la barra del prefab:
| Botón | Qué hace |
|---|---|
Aplicar | Guarda esta instancia como la nueva versión del prefab y actualiza todas las demás. |
Revertir | Olvida los cambios propios: queda igual que el prefab. |
... > Desempaquetar | Quita el enlace: quedan objetos normales. |
... > Seleccionar todas | Selecciona todas las instancias de ese prefab en la escena. |
Lo que cambias en una instancia (un valor, un componente añadido o quitado, un hijo borrado) queda como cambio propio y se respeta cuando el prefab se actualiza. La posición, el giro y el nombre de la raíz son siempre de cada instancia. Pasa el ratón por "N cambios propios" para ver la lista.
.crprefab, sus instancias siguen funcionando y salen en rojo en la Jerarquía.
Desde Lua
Crea instancias en el juego por la ruta del prefab dentro de Assets:
local Generador = { properties = { cada = 2.0 } }
function Generador:Start()
self.t = 0
end
function Generador:Update(dt)
self.t = self.t + dt
if self.t >= self.cada then
self.t = 0
-- ruta dentro de Assets, con o sin .crprefab; posicion y giro (grados) opcionales
local enemigo = Scene.instantiate("Prefabs/Enemigo", self.entity.position, Vec3(0, 180, 0))
if enemigo == nil then Debug.log("No existe Prefabs/Enemigo") end
end
end
return Generador
¿Algo no queda claro o falta algo? Pregunta en el Discord.