En este Tutorial de Unity conoceremos lo “Condicionales” “if”, “if/else” y “switch”, además aprenderemos a trabajar con ellos realizando algunos ejercicios.
Tutorial de Unity Nivel: Principiante.
6.1 Condicionales.
Los “Condicionales” son instrucciones que, a partir del cumplimiento de una condición, nos permiten ejecutar una sección de código.
Los Condicionales que usaremos son “if”, “if/else” y “switch”
Condicional “if”
El Condicional “if” “evalúa una condición”, “si” esta condición resulta ser “verdadera” (“true”), el código contenido en este condicional se ejecutará, de resultar “falsa” (“false”) el código contenido no se ejecuta y el proceso continua a las siguientes instrucciones que existan.
La estructura básica del condicional “if” es:
if (condición a evaluar) {
// Si la “condición a evaluar” resulta “verdadera” (“true”),
// el Código escrito en esta sección se ejecutará
}
La “condición a evaluar” es una Operación compuesta de Variables, Constantes y Operadores (símbolos que representan una acción a ejecutar) que da como resultado un valor lógico “verdadero” (“true”) o uno “falso” (“false”) y puede tener las siguientes estructuras:
- Comparación de dos Variables con valores numéricos (enteros o con punto decimal):
- Evaluar si el primer valor es “mayor” que el segundo valor: variable1 > variable2
- Evaluar si el primer valor es “menor” que el segundo valor: variable1 < variable2
- Evaluar si el primer valor es “igual” al segundo valor: variable1 == variable2
- Evaluar si el primer valor es “distinto” al segundo valor: variable1 != variable2
- Evaluar si el primer valor es “mayor o igual” que el segundo valor: variable1 >= variable2
- Evaluar si el primer valor es “menor o igual” que el segundo valor: variable1 <= variable2
- Comparación de dos Variables tipo “string”:
- Evaluar si el primer valor es “igual” al segundo valor: variableString1 == variableString2
- Evaluar si el primer valor es “distinto” al segundo valor: variableString1 != variableString2
- Lectura del valor actual de una Variable tipo “bool” (si es “true” o “false”)
- Obtención del resultado de una operación lógica (con Variables tipo “bool”):
- Evaluar una operación “AND” (si todos los valores son “true” el resultado será “true”, de lo contrario el resultado será “false”): variableBool1 && variableBool2
- Evaluar una operación “OR” (si uno o todos los valores son “true” el resultado será “true”, si todos son “false”, el resultado será “false”): variableBool1 || variableBool2
- Evaluar una operación “NOT” (si el valor es “true” el resultado será “false”, si el valor es “false” el resultado será “true”): !variableBool1
- Evaluar una combinación de operaciones lógicas: variableBool1 && variableBool2 || !valorBool3
- Combinación de operaciones lógicas y comparación de valores numéricos: variable1 > variable2 && variable3 == variable4 (obtendríamos “true” si se cumplen dos condiciones, que el primer valor sea mayor al segundo y que el tercer valor sea igual al cuarto).
Si quieres conocer más sobre los Operadores que se pueden utilizar dentro de una condición a evaluar, puedes visitar https://docs.microsoft.com/es-mx/dotnet/csharp/language-reference/operators/#conditional-operator .
Condicional “if/else”
El Condicional “if/else” “evalúa una condición”, “si” esta condición resulta ser “verdadera” (“true”), el código contenido en “if” se ejecutará, de resultar “falsa” (“false”) el código contenido en “else” se ejecutará. Después, el proceso continua a la siguientes instrucciones que existan.
La estructura básica del condicional “if/else” es:
if (condición a evaluar) {
// Si la “condición a evaluar” resulta “verdadera” (“true”),
// el Código escrito en esta sección se ejecutará
} else {
// Si la “condición a evaluar” resulta “falsa” (“false”),
// el Código escrito en esta sección se ejecutará
}
Sólo se ejecuta el código en “if” o el código en “else”, por ningún caso se ejecutan ambos.
“else” debe ir siempre después de “if”, nunca debe ir antes o estar solo.
Otra estructura usada comúnmente es:
if (primera condición a evaluar) {
// Si la “primera condición a evaluar” resulta “verdadera” (“true”),
// el Código escrito en esta sección se ejecutará
} else if (segunda condición a evaluar) {
// Si la “primera condición a evaluar” resulta “false” (“false”),
// y la “segunda condición a evaluar” resulta “verdadera” (“true”),
// el Código escrito en esta sección se ejecutará
}
Condicional “switch”
El Condicional “switch” nos permite ejecutar un código, dependiendo del “valor” que tenga una Variable. Después, el proceso continua a la siguientes instrucciones que existan.
La estructura básica del condicional “switch” es:
switch (variable){
case valor1:
//si el valor de “variable” es igual a “valor1”
//el código en esta sección se ejecutará
break;
case valor2:
//si el valor de “variable” es igual a “valor2”
//el código en esta sección se ejecutará
break;
case valorN:
//si el valor de “variable” es igual a “valorN”
//el código en esta sección se ejecutará
break;
default:
//si el valor de “variable” es distinto a los anteriores
//el código en esta sección se ejecutará
break;
}
Las Variables más usadas dentro de “switch” pueden ser del tipo numéricas (“int”, “float”, etc.) o alfanuméricas (por ejemplo, tipo “string”).
Si quieres conocer más acerca de los “Condicionales” puedes visitar https://docs.microsoft.com/es-mx/dotnet/csharp/language-reference/keywords/selection-statements .
6.2 Condicionales en Unity.
Ahora, vamos a aprender a utilizar en Unity los “Condicionales” antes mencionados. Para ello, es necesario crear un nuevo Script llamado “ConditionalsExamples”, después hay que añadir este Script como un nuevo Componente del objeto “GameObject” en nuestra escena de trabajo y eliminar cualquier otro Componente tipo “Script” que contenga.
Dentro de nuestro Script “ConditionalsExamples”, vamos a dar de alta las siguientes variables:
public int primerValor; public int segundoValor;
Y modificamos nuestro método “Start” para que quede de la siguiente manera:
void Start () { /*Evaluamos si el valor de la variable "primerValor" es "mayor" al valor de la variable "segundoValor". De ser "verdadero" imprimimos un mensaje indicándolo, de lo contrario, seguimos con el demás código*/ if(primerValor > segundoValor){ Debug.Log(primerValor + " es mayor que " + segundoValor); } /*Evaluamos si el valor de la variable "primerValor" es "menor" al valor de la variable "segundoValor". De ser "verdadero" imprimimos un mensaje indicándolo, de lo contrario, seguimos con el demás código*/ if(primerValor < segundoValor){ Debug.Log(primerValor + " es menor que " + segundoValor); } /*Evaluamos si el valor de la variable "primerValor" es "igual" al valor de la variable "segundoValor". De ser "verdadero" imprimimos un mensaje indicándolo, de lo contrario, seguimos con el demás código*/ if(primerValor == segundoValor){ Debug.Log("Los valores son iguales"); } }
Nota: Dentro del Condicional “if”, en la “condición a evaluar” no se usa “;” (punto y coma). En la sección del “código a ejecutar” si se usa punto y coma.
Lo que hace nuestro código básicamente es, “a partir de dos valores que introducimos manualmente, los compara y nos indica si el primer valor es mayor o menor que el segundo valor, o nos indica si los valores introducidos son iguales”.
Guardamos nuestro código y cambiamos a Unity.
Una vez en el ambiente de Unity, seleccionamos el objeto “GameObject” y miramos la venta “Inspector”, en el componente “Conditionals Examples” ingresamos lo siguiente:
- “44” en “Primer Valor”
- “77” en “Segundo Valor”
Al ejecutar nuestro código, la “Consola” de Unity nos muestra:
Podemos ver que la comparación se realizó correctamente, ya que “44” es menor que “77”.
Ahora es tu turno de intentarlo con los valores que se te ocurran para obtener los otros dos mensajes restantes (el de “mayor que” y el de “son iguales”).
Como siguiente paso, vamos a modificar las variables que dimos de alta:
public float primerValor; float segundoValor;
Y modificamos nuestro método “Start”:
void Start () { // Realizamos la operación “Módulo” con el valor de nuestra primera variable y se la asignamos a la segunda. segundoValor = primerValor % 2; //Verificamos si el resultado es igual a “Cero”, lo que significa que nuestro valor introducido es un número “Par”. De lo contrario, el número es “Impar” if (segundoValor == 0) { Debug.Log(primerValor + " es un Número Par"); } else { Debug.Log(primerValor + " es un Número Impar"); } }
En este ejemplo, usamos los condicionales “if/else” para determinar si un número es “Par” o “Impar” (a partir del resultado de una operación “Módulo”).
Guardamos nuestro código y cambiamos a Unity.
Para probar nuestro código, escribimos el valor “47” en “Primer Valor”:
Después ejecutamos nuestra escena y vemos lo que muestra la “Consola” de Unity:
Nuestro código funciona correctamente, ya que “47” es un “Número Impar”.
Ahora es tu turno de intentarlo con los valores que se te ocurran para obtener el mensaje restante (el de “Número Par”).
Para probar el Condicional “switch”, vamos a escribir un código, que a partir del nombre de un color que nosotros ingresemos (el color de una gema), nos indique el tipo de poder que le corresponde.
Sustituimos las variables que dimos de alta, por la siguiente:
public string colorGema;
Después, hay que modificar nuestro método “Start”:
void Start () { switch(colorGema){ case "amarillo": Debug.Log("Tienes Poder de Electricidad"); break; case "azul": Debug.Log("Tienes Poder de Agua"); break; case "rojo": Debug.Log("Tienes Poder de Fuego"); break; case "verde": Debug.Log("Tienes Poder de Tierra"); break; default: Debug.Log("No hay Poder asignado para ese Color"); break; } }
En este código, dependiendo del valor tipo “string” que se le asigne a nuestra variable “colorGema” (el nombre de un color en letras minúsculas), si este valor se encuentra como una de las opciones (“case”) dentro del condicional “switch”, nos desplegará un mensaje único en la “Consola” de Unity (para cualquier otro valor distinto, se ejecutará la sección “default”).
Nota: Al ejecutar nuestro código, se deben escribir lo valores "tal cual" se dieron de alta dentro del condicional "switch" (el nombre del color de las gemas), de otra forma, no serán reconocidos y se ejecutará la sección “default”.
Guardamos nuestro código y cambiamos a Unity.
Para probar nuestro código, escribimos “rojo” en el campo “Color Gema”:
Después ejecutamos nuestra escena y vemos lo que muestra la “Consola” de Unity:
Nuestro código funciona correctamente, ya que para una Gema Color “rojo”, tenemos acceso al “Poder de Fuego”.
Ahora es tu turno de intentarlo con otros valores y obtener los mensajes restantes.
Finalmente, vamos a realizar un ejercicio donde usemos Operaciones “Lógicas” y el Condicional “if/else”.
Supongamos que, desarrollamos un juego donde para ganar y pasar al siguiente nivel hay que “recoger una Llave de Bronce” (si no la recogemos, perdemos y debemos repetir el nivel). Como un extra, podemos “recolectar una Llave de Plata y una Llave de Oro”. Si al final del juego contamos con las tres llaves (Bronce, Plata y Oro), además de pasar al siguiente nivel, podremos “Jugar un Nivel Especial”. Si tenemos la Llave de Bronce y solo una de las otras dos (Plata u Oro), podremos “Abrir un Cofre Especial”.
Para lograr lo antes descrito, hay que sustituir las variables que dimos de alta, por las siguientes:
public bool tienesLlaveOro; //Si se recolecta esta llave, su valor será “true”, de lo contrario “false” public bool tienesLlavePlata; // Si se recolecta esta llave, su valor será “true”, de lo contrario “false” public bool tienesLlaveBronce; // Si se recolecta esta llave, su valor será “true”, de lo contrario “false”
Después, hay que modificar nuestro método “Start”:
void Start () { //En este primer Condicional, evaluamos si el Jugador recolectó la Llave de Bronce if (tienesLlaveBronce) { //Si recogió la Llave de Bronce, le indicamos al jugador que puede continuar al siguiente nivel. Debug.Log("Puedes Jugar el Siguiente Nivel"); //También evaluamos si recogió las otras dos llaves if (tienesLlaveOro && tienesLlavePlata) { //Si recolectó la Llave de Oro y la Llave de Plata, le indicamos al jugador que tiene acceso a un Nivel Especial Debug.Log("Puedes Jugar el Nivel Especial"); //De lo contrario, evaluamos si al menos tiene una de las dos llaves (Oro o Plata) } else if (tienesLlaveOro || tienesLlavePlata) { //Si tiene una de las dos Llaves (Oro o Plata), le indicamos al Jugador que puede abrir un Cofre Especial Debug.Log("Puedes Abrir un Cofre Especial"); } } else { /*Este “else” pertenece al primer Condicional, si no se recogió la Llave de Bronce, no se evalúa si se recogieron las otras llaves, y se procede a solicitarle al jugador que repita el Nivel */ Debug.Log("Debes Repetir el Nivel"); } }
Guardamos nuestro código y cambiamos a Unity.
Para probar nuestro código, “seleccionamos” que Llaves se han Recogido:
Después ejecutamos nuestra escena y vemos lo que muestra la “Consola” de Unity:
Nuestro código funciona correctamente, ya que, si “Recolectamos las Tres Llaves”, tenemos acceso al “Siguiente Nivel” y también al “Nivel Especial”.
Ahora es tu turno de intentarlo con otra combinación de selecciones y obtener los mensajes restantes.
Ejercicios.
Para reforzar lo aprendido, es necesario practicarlo, por ello intenta realizar los siguientes ejercicios:
- Usa el Script “ConditionalsExamples” que creaste en este tutorial.
- A partir de una Variable tipo numérica que represente “nuestro marcador”, y una Constante tipo numérica que represente “el valor a superar para poder jugar el siguiente nivel”, escribe un código que evalúe estos dos valores y nos despliegue un mensaje indicándonos si “Pasamos al Siguiente Nivel” o “Debemos Intentarlo Nuevamente”.
- Escribe un código, donde al ingresar el nombre del día de la semana (lunes, martes, miércoles, etc.), nos indique “el regalo que vamos a recibir por jugar en ese día” (a cada día le debe corresponder un regalo distinto).
Este Tutorial de Unity sobre los “Condicionales” (“if”, “if/else” y “switch”) y su aplicación termina aquí. Acompáñanos en el siguiente tutorial donde aprenderemos más sobre el lenguaje de programación “C Sharp” (C#) en Unity.
Recuerda que, si quieres conocer más a fondo sobre el lenguaje de programación “C#” puedes visitar https://docs.microsoft.com/es-mx/dotnet/csharp/ ó bien, no dudes en contactarnos para cualquier duda o asesoría haciendo clic "Aquí"