"All compiler errors have to be fixed before you can enter Play Mode"#
Si al pulsar Play ves este mensaje, tienes un error de compilación: tu C# no compila, así que Unity no puede ejecutar nada. En la Console (con el filtro de errores activado) verás el error concreto, con su código CSxxxx, el archivo y la línea. Corrígelo y podrás jugar.
Haz doble clic en el error de la Console: Unity abre el archivo en la línea exacta. La mitad del trabajo es llegar al sitio correcto.
Los errores más comunes#
CS0103 — "The name 'X' does not exist"#
Usas un nombre que C# no conoce. Causas típicas:
- Está mal escrito (mayúsculas incluidas:
transform≠Transform). - La variable está declarada en otro sitio (fuera de su ámbito).
- Olvidaste declararla.
// ❌ CS0103: 'velocidadd' no existe (typo)
transform.Translate(Vector3.up * velocidadd);
// ✅
transform.Translate(Vector3.up * velocidad);CS0246 — "The type or namespace 'X' could not be found"#
C# no encuentra un tipo. Casi siempre falta un using (el "import" del namespace):
// ❌ CS0246: no encuentra 'List'
List<int> numeros = new List<int>();
// ✅ añade arriba:
using System.Collections.Generic;Lo mismo con TextMeshProUGUI (using TMPro;), NavMeshAgent (using UnityEngine.AI;), etc. También sale si escribiste mal el nombre del tipo o el nombre del archivo no coincide con la clase.
CS0029 / CS0266 — "Cannot convert type 'A' to 'B'"#
Intentas meter un valor de un tipo en una variable de otro incompatible:
// ❌ CS0029: no puede convertir float en int automáticamente
int vida = 3.5f;
// ✅ decide qué quieres
float vida = 3.5f;
int vidaEntera = (int)3.5f; // conversión explícita (da 3)CS1061 — "'A' does not contain a definition for 'B'"#
Llamas a un método o propiedad que ese tipo no tiene. Causas: nombre mal escrito, el tipo no es el que crees, o falta un using que añade métodos de extensión.
// ❌ CS1061: Rigidbody no tiene 'velocidad'
rb.velocidad = Vector3.up;
// ✅ (y además en Unity 6 es linearVelocity)
rb.linearVelocity = Vector3.up;CS0117 — "'A' does not contain a definition for 'B'" (miembro estático)#
Como el anterior pero con miembros estáticos: Mathf.Clampp(...) (typo) o usar algo que no existe en esa clase.
Cómo atacarlos, en orden#
- 1. Lee el primer error de la lista (los siguientes suelen ser consecuencia del primero)
- 2. Doble clic para ir a la línea
- 3. Identifica el código
CSxxxxy traduce: ¿nombre que no existe (0103)?, ¿falta un using (0246)?, ¿tipos que no encajan (0029)?, ¿método que no existe (1061)? - 4. Corrige, guarda, y deja que Unity recompile
- 5. Repite con el siguiente error real
Un solo fallo (una llave } que falta, un using ausente) puede generar decenas de errores en cascada. No te agobies por el número: arregla el primero y muchos desaparecerán solos. Cuenta las llaves { } y los ; si aparecen errores raros y numerosos.
Errores frecuentes (que causan estos errores)#
- Mayúsculas/minúsculas: C# distingue
Updatedeupdate. - Falta un
using(la causa nº1 de CS0246). - El nombre del archivo no coincide con la clase (
MiScript.csdebe contenerclass MiScript). - Una llave
}, un paréntesis o un;que falta o sobra. - Usar un nombre de Unity 6 antiguo (
velocityen vez delinearVelocity).
Ponte a prueba#
Resumen#
Los errores CSxxxx impiden entrar en Play porque tu C# no compila. Los más comunes: CS0103 (nombre que no existe: typo o ámbito), CS0246 (tipo no encontrado: falta un using), CS0029 (tipos incompatibles), CS1061 (método/propiedad que no existe). Doble clic para ir a la línea, arregla el primero (muchos son cascada) y vigila mayúsculas, using, llaves y que el archivo coincida con la clase.