El síntoma#
En el Inspector, un componente aparece como "Missing (Mono Script)" o sale un aviso amarillo: "The associated script can not be loaded. Please fix any compile errors and assign a valid script." El objeto tiene "un script" pero Unity no sabe cuál.
Las causas (de la más común a la menos)#
1. Hay errores de compilación#
Si cualquier script del proyecto no compila, Unity no puede cargar ninguno, y todos los componentes de script aparecen rotos temporalmente. Mira la Console: si hay errores rojos, arréglalos y el aviso desaparecerá. Ver errores de compilación.
Antes de tocar nada, comprueba si hay errores de compilación. Muy a menudo el "script perdido" no está perdido: es que otro archivo no compila y Unity no ha podido cargar la clase. Arregla los rojos primero.
2. El nombre del archivo no coincide con la clase#
Para un MonoBehaviour, el nombre del archivo debe ser idéntico al de la clase:
// Este código DEBE estar en un archivo llamado ControladorJugador.cs
public class ControladorJugador : MonoBehaviour { }Si renombraste la clase pero no el archivo (o al revés), Unity no puede asociarlos. Haz que coincidan exactamente (mayúsculas incluidas).
3. Se movió, renombró o borró el archivo desde fuera de Unity#
Unity guarda un identificador único de cada archivo en su .meta. Si mueves, renombras o borras un .cs (o su .meta) desde el explorador de archivos en vez de desde Unity, se rompe el vínculo entre el componente y el script, y aparece "Missing". Haz estas operaciones siempre dentro de la ventana Project de Unity, que mantiene los .meta sincronizados. Ver Git para Unity.
4. Faltó subir el .meta (en Git)#
Si trabajas en equipo y alguien no subió el .meta del script, a los demás les llega el script sin su identificador y las referencias se rompen. Sube siempre los .meta (ver Git para Unity).
Cómo recuperar las referencias#
Si el script existe pero el componente quedó como "Missing", tras arreglar la causa:
- Con errores de compilación: arréglalos; los componentes suelen recuperarse solos.
- Con nombre: haz coincidir archivo y clase; vuelve a Unity y espera a que recompile.
- Si el componente sigue en "Missing" pero el script ya existe: en el campo Script del componente (arriba, en amarillo), arrastra el
.cscorrecto. Recupera las referencias de sus campos si se perdieron. - Herramienta útil: GameObject → (menú) → Remove Missing Scripts o buscar componentes perdidos en la escena para limpiarlos.
Prevenirlo#
- Mantén archivo = clase desde el primer momento.
- Mueve y renombra scripts dentro de Unity.
- Sube los
.metaal control de versiones. - Vigila la Console: no dejes errores de compilación "para luego".
Errores frecuentes#
- Creer que el script se perdió cuando en realidad hay un error de compilación en otro archivo.
- Renombrar la clase y olvidar renombrar el archivo (o viceversa).
- Mover scripts desde el explorador de archivos y romper los
.meta. - No subir los
.metaen Git.
Resumen#
El aviso "associated script can not be loaded" / "Missing (Mono Script)" significa que Unity no puede vincular el componente con su clase. Causas, en orden: errores de compilación (mira la Console primero), el nombre del archivo no coincide con la clase, se movió/renombró el script fuera de Unity (rompiendo el .meta), o faltó subir el .meta en Git. Arregla la causa, y si hace falta arrastra el .cs correcto al campo Script del componente.