Resumen rápido
- →Una variable es una caja con nombre que guarda un dato:
int vidas = 3; - →Un if ejecuta código solo si se cumple una condición. Para comparar se usa
==, no=. - →Una función agrupa código con un nombre para llamarlo cuando quieras, y puede recibir y devolver datos.
- →Un array guarda muchos datos del mismo tipo; un for los recorre. Los índices arrancan en 0.
Para hacer juegos en Unity no necesitás saber todo C#: con cinco conceptos ya podés programar movimiento, vidas, enemigos y puntajes. Este resumen sale del módulo de programación del curso Unity De Cero a Pro de Codearte, que arranca exactamente desde acá antes de tocar cualquier juego. Si todavía no elegiste motor, mirá Unity vs Godot.
Tu primer script
En la ventana Project, clic derecho, Create, C# Script (C# se lee "C sharp"). Abrilo y escribí esto:
using UnityEngine;
public class Prueba : MonoBehaviour
{
void Start()
{
print("Hola mundo");
}
}- Todo lo que está dentro de las llaves de
Startse ejecuta una vez, cuando arranca el juego. print(oDebug.Log) muestra el texto en la ventana Console. Es tu mejor herramienta para ver qué está pasando.- Cada instrucción termina con
;, como el punto de una oración. - Para que corra, arrastrá el script a un objeto de la escena y dale Play. Un script que no está en ningún objeto no hace nada.
- El código se lee de arriba hacia abajo, línea por línea.
Variables
Una variable es una caja con nombre que guarda algo. Se declara con tipo, nombre y valor:
int manzanas = 10; // números enteros
float velocidad = 5.5f; // números con coma
string nombre = "Pepito"; // texto
bool estaVivo = true; // verdadero o falso| Tipo | Guarda | Ejemplo en un juego |
|---|---|---|
| int | Enteros, positivos o negativos | Vidas, monedas, nivel actual |
| float | Números con coma | Velocidad, tiempo, porcentaje de vida |
| string | Texto, entre comillas | Nombre del jugador, diálogos |
| bool | true o false | ¿Está en el piso? ¿Tiene la llave? |
La coma es un punto, y el float lleva f
En programación los decimales se escriben con punto: 5.5, no 5,5. Y en C#, un número con punto sin nada más es un double, así que para guardarlo en un float hay que agregarle una f: 5.5f. Si te la olvidás, Unity marca error.
Cambiar el valor
int puntos = 0;
puntos = puntos + 10; // ahora vale 10
puntos += 10; // lo mismo, más corto: 20
puntos++; // suma 1: 21
puntos--; // resta 1: 20
puntos *= 2; // multiplica: 40El = en programación no es "igual" como en matemática: significa guardá lo de la derecha en la caja de la izquierda. Ojo con dividir enteros: 2 / 3 da 0, porque entre ints se descartan los decimales. Ese bug aparece en la barra de vida.
If y else: tomar decisiones
Casi todo en un juego es una pregunta: si la vida llega a cero, perdés; si tenés la llave, se abre la puerta.
int vida = 3;
if (vida > 0)
{
print("Sigo vivo");
}
else
{
print("Game Over");
}| Operador | Pregunta | Ejemplo |
|---|---|---|
| == | ¿Es igual? | vida == 0 |
| != | ¿Es distinto? | nombre != "" |
| > y < | ¿Mayor? ¿Menor? | puntos > record |
| >= y <= | ¿Mayor o igual? ¿Menor o igual? | vida <= 0 |
| && | Las dos cosas | tieneLlave && cercaDeLaPuerta |
| || | Alguna de las dos | vida <= 0 || tiempo <= 0 |
| ! | Lo contrario | !estaEnElPiso |
if (vida = 0). Un solo = asigna; para comparar son dos: if (vida == 0).Podés encadenar más casos con else if: if (vida > 2) ... else if (vida > 0) ... else .... Se evalúan en orden y entra solo en el primero que se cumpla.
Funciones
Una función es un bloque de código con nombre que se ejecuta cuando lo llamás. Start es una función que Unity llama sola; print es otra. Las tuyas las tenés que llamar vos.
void Start()
{
RecibirDanio(1);
int total = Sumar(5, 3); // total vale 8
}
// void: no devuelve nada. Recibe un int.
void RecibirDanio(int cantidad)
{
vida -= cantidad;
print("Me quedan " + vida + " vidas");
}
// int: devuelve un número con return.
int Sumar(int a, int b)
{
return a + b;
}- Lo que va antes del nombre es lo que devuelve:
voidsi no devuelve nada,int,float,bool, etc. si devuelve algo conreturn. - Lo que va entre paréntesis son los parámetros: los datos que recibe. Al llamarla le pasás los valores.
- Si una función nunca se llama, nunca se ejecuta.
- Si repetís el mismo código en dos lugares, probablemente debería ser una función.
Arrays: muchos datos en una variable
¿Y si tenés diez enemigos, o un inventario? No vas a crear enemigo1, enemigo2... Para eso está el array: una colección de datos del mismo tipo.
string[] jugadores = new string[3];
jugadores[0] = "Ana";
jugadores[1] = "Leo";
jugadores[2] = "Sol";
// o crearlo ya con los valores, en una línea:
string[] enemigos = { "Slime", "Zombie", "Fantasma" };
print(jugadores[1]); // Leo
print(jugadores.Length); // 3En Unity se usan muchísimo con variables públicas o con SerializeField: declarás public Transform[] spawnPoints; y arrastrás los objetos en el Inspector. Así funciona el spawner de prefabs e Instantiate. Si necesitás agregar y sacar elementos mientras se juega, el siguiente paso es List<T>.
El ciclo for: repetir
Un for repite un bloque de código una cantidad de veces. Tiene tres partes separadas por ;: dónde arranca, hasta cuándo sigue y cuánto avanza.
// arranca en 0; sigue mientras i < 10; suma 1 cada vuelta
for (int i = 0; i < 10; i++)
{
print("Vuelta " + i); // de 0 a 9
}
// recorrer un array entero
for (int i = 0; i < jugadores.Length; i++)
{
print(jugadores[i]);
}
// lo mismo, más corto, si no necesitás el índice
foreach (string jugador in jugadores)
{
print(jugador);
}i < jugadores.Length, con menor estricto. Con <= el for intenta leer jugadores[3], que no existe, y Unity tira IndexOutOfRangeException.| Error | Qué pasó |
|---|---|
| Falta ; o falta } | Cada línea termina en ; y cada llave que abre, cierra |
| No se puede convertir double a float | Falta la f: 5.5f |
| El if siempre entra o da error | Usaste = en vez de == |
| IndexOutOfRangeException | Pediste un índice que no existe: el último es Length - 1 |
| El script no hace nada | No está agregado a ningún objeto de la escena |
| Mi función no se ejecuta | Nunca la llamaste |
Con esto ya podés hacer tu primer script con movimiento: cómo mover un objeto en Unity. Y cuando quieras ordenar tus variables, seguí con public, private y SerializeField.
Preguntas frecuentes
¿Qué lenguaje se usa en Unity?
C# (se pronuncia "C sharp"). Es el único lenguaje oficial para programar scripts en Unity.
¿Necesito saber programar antes de aprender Unity?
No. Con variables, if, funciones, arrays y for ya podés hacer juegos completos, y se aprenden en pocos días practicando dentro de Unity.
¿Cuál es la diferencia entre int y float?
int guarda números enteros (3, -10, 200) y float guarda números con decimales (5.5f). En C#, los float llevan una f al final.
¿Qué diferencia hay entre = y ==?
= asigna un valor a una variable. == compara dos valores y devuelve true o false. En un if siempre se usa ==.
¿Por qué los arrays empiezan en 0?
Es la convención de C# y de casi todos los lenguajes: el primer elemento es el índice 0 y el último es Length - 1.
Guías relacionadas
Aprendé a programar haciendo juegos
Unity De Cero a Pro arranca desde variables, if y for, sin experiencia previa, y termina con un plataformero 2D y un top down shooter 3D publicados.
Ver el curso De Cero a Pro¿Quieres crear tus propios juegos?
Aprende a programar videojuegos desde cero con nuestros cursos en Unity. Más de 3,000 estudiantes ya empezaron su camino.
Ver cursos gratuitos


