🎮 UnityDocs

Control de flujo en C#: condicionales y bucles

Cómo tomar decisiones (if, else, switch) y repetir acciones (for, foreach, while) en C#. La lógica con la que tu juego reacciona y procesa cosas, con los operadores de comparación y lógicos.

📄 ArtículoPrincipiante✅ RevisadoUnity 6.0 LTSActualizado 2026-07-15
DificultadConceptual Código Matemáticas
Tiempo📖 Lectura 7 min · ⌨️ Práctica 20 min

Tomar decisiones: if / else#

El if ejecuta un bloque solo si se cumple una condición. Es la base de toda la lógica de un juego.

C#
if (vidas <= 0)
{
    Debug.Log("Game Over");
}
else if (vidas == 1)
{
    Debug.Log("¡Última vida!");
}
else
{
    Debug.Log("Te quedan " + vidas + " vidas");
}

Operadores de comparación y lógicos#

Las condiciones se construyen con operadores que devuelven true o false:

OperadorSignificaEjemplo
==Igual avida == 0
!=Distinto denombre != "Ana"
> <Mayor / menorpuntos > 100
>= <=Mayor o igual / menor o igualvida <= 20
&&Y (ambas ciertas)enSuelo && !cansado
`\\`O (al menos una)`tocaLava \\tocaPincho`
!No (niega)!estaVivo
= no es lo mismo que ==

= asigna un valor (vida = 100). == compara dos valores (vida == 100). Confundirlos es el error de principiante más clásico: if (vida = 0) no compara, intenta asignar y da error.

Elegir entre muchos casos: switch#

Cuando comparas un mismo valor contra muchas opciones, switch es más limpio que una cadena de if:

C#
switch (dificultad)
{
    case "facil":   enemigos = 3;  break;
    case "normal":  enemigos = 6;  break;
    case "dificil": enemigos = 12; break;
    default:        enemigos = 6;  break;   // si no coincide ninguno
}
switch expression (C# moderno)

C# permite una forma más compacta cuando solo asignas un valor:

C#
int enemigos = dificultad switch
{
    "facil"   => 3,
    "dificil" => 12,
    _         => 6      // el _ es el "resto"
};

Repetir: bucles#

Un bucle repite instrucciones. Elige según el caso:

for — cuando sabes cuántas veces#

C#
// i va de 0 a 4 (cinco veces)
for (int i = 0; i < 5; i++)
{
    Debug.Log("Enemigo número " + i);
}

foreach — recorrer una colección#

C#
foreach (string arma in inventario)
{
    Debug.Log("Tienes: " + arma);
}

while — mientras se cumpla algo#

C#
while (energia > 0)
{
    energia -= 10;   // algo DEBE cambiar la condición
}
El bucle infinito congela Unity

Si la condición de un while nunca se vuelve falsa, el juego se cuelga (y con él el editor). Asegúrate siempre de que algo dentro del bucle acerca la condición a su fin (aquí, energia -= 10).

break y continue#

  • break: sale del bucle inmediatamente.
  • continue: salta al siguiente ciclo sin terminar el actual.
C#
foreach (Enemigo e in enemigos)
{
    if (e.EstaMuerto) continue;   // ignóralo y pasa al siguiente
    if (e.EsJefe) { Debug.Log("¡Jefe encontrado!"); break; }  // para de buscar
}

Errores frecuentes#

  • Confundir = (asignar) con == (comparar).
  • Olvidar que foreach no debe modificar la colección que recorre (añadir/quitar dentro da error).
  • Bucles while sin condición de salida (cuelgan el editor).
  • Anidar demasiados if: a menudo se puede simplificar con switch o extrayendo métodos.

Ponte a prueba#

📝 Pon a prueba lo aprendido

Resumen#

if/else y switch toman decisiones; for, foreach y while repiten. Construye condiciones con operadores de comparación (==, <) y lógicos (&&, ||, !), no confundas = con ==, y garantiza siempre que los bucles tienen fin. Con esto ya puedes escribir la lógica de un juego. Siguiente paso: clases y objetos.

Fuentes y para profundizar