Sprites aleatorios de prefabs en Unity

Clase 12 de 31Curso de Desarrollo de Videojuegos para Móviles con Unity

Contenido del curso

Diseño de Game Play

Retos finales

Resumen

Genera un tablero visual atractivo en segundos: con C# en Unity, basta con tres cambios para que cada casilla muestre un caramelo aleatorio en lugar de un cuadrado. Aquí verás cómo usar lista de sprites, Random.Range, SpriteRenderer y un identificador único (ID) provisional para dejarlo todo listo antes de optimizar.

¿Cómo generar caramelos aleatorios con C# en Unity?

Para reemplazar el cuadrado por caramelos, la clave es intervenir justo antes de añadir el nuevo caramelo al array/colección. La idea: tomar un sprite de los prefabs de forma aleatoria, asignarlo al SpriteRenderer del objeto y establecer un ID temporal. El proceso es directo y evita cambios estructurales.

  • Usar instanciación del caramelo y, antes de agregarlo al array, configurar su gráfico.
  • Elegir uno aleatorio de la lista de sprites usando Random.Range con distribución uniforme por defecto.
  • Reemplazar la imagen del cuadrado por el sprite seleccionado.
  • Asignar un ID provisional hardcodeado para cada caramelo.

¿Qué líneas cambian para seleccionar un sprite de prefabs?

  • Selecciona un sprite al azar del array/lista configurada de sprites/prefabs.
// 1) Elegir un sprite aleatorio de la lista Sprite newSprite = sprites[UnityEngine.Random.Range(0, sprites.Count)]; // 2) Asignarlo al SpriteRenderer del nuevo caramelo newCandy.GetComponent<SpriteRenderer>().sprite = newSprite;
  • Notas clave: Random.Range(0, n) para enteros devuelve un valor entre 0 (incluido) y n (excluido). Si tienes 6 caramelos, los índices irán de 0 a 5.

¿Cómo asignar un identificador único provisional?

  • Configura un ID temporal para diferenciar caramelos. Evita usar 0 si está reservado en colecciones; utiliza -1 como valor “no válido”.
// 3) Asignar un ID provisional (hardcodeado) newCandy.GetComponent<Candy>().Id = -1;
  • Este DNI/ID se calculará automáticamente más adelante. De momento se deja hardcodeado para avanzar rápido.

¿Dónde insertar el código en el word manager?

El cambio debe colocarse entre el renombrado del nuevo caramelo y su inserción en la colección de caramelos. Así te aseguras de que, cuando se agregue al array, ya tenga su SpriteRenderer configurado y su ID establecido.

  • Insertar las 3 líneas tras la instanciación de newCandy.
  • Hacerlo antes de añadir el objeto al array/lista del tablero.
  • Mantener el resto del flujo sin cambios.

Ejemplo de ubicación en pseudocódigo:

var newCandy = Instantiate(currentCandy, position, rotation); // aquí: configurar gráfico e ID antes de añadirlo a la colección Sprite newSprite = sprites[UnityEngine.Random.Range(0, sprites.Count)]; newCandy.GetComponent<SpriteRenderer>().sprite = newSprite; newCandy.GetComponent<Candy>().Id = -1; candies[row, col] = newCandy; // ahora sí, se agrega a la colección

Conceptos trabajados aquí: instanciación, colección/array, SpriteRenderer, lista de sprites, Random.Range, ID único. Además, se menciona la distribución uniforme como base; más adelante se verán otras distribuciones de probabilidad.

¿Qué validar en el editor y qué problemas aleatorios surgen?

Antes de ejecutar, verifica el guardado del script en el editor. El icono de círculo indica cambios sin guardar; al usar Ctrl+S (Windows) o Command+S (Mac) desaparece y se muestra una equis. Luego presiona play para ver el tablero con caramelos.

  • Guardar siempre el script antes de compilar y dar a play.
  • Confirmar que aparecen caramelos y no cuadrados.
  • Notar la aleatoriedad de cada partida: el orden cambia en cada ejecución.

Durante la prueba se detectan efectos de la aleatoriedad inicial:

  • Aparición de tripletes o cadenas largas al empezar.
  • Ejemplo: varias sandías alineadas o una fila con seis caracolas consecutivas.
  • Estos casos se corregirán con lógica adicional que usará el ID y validaciones de vecinos (arriba, abajo, izquierda, derecha) para evitar coincidencias iniciales.

¿Quieres que profundicemos en cómo calcular el ID automáticamente y prevenir tripletes desde el inicio? Deja tu duda o comentario y lo abordamos en el siguiente paso.