La estructura de un juego para móvil

1

Desarrollo de un clon de Candy Crush con Unity para Android e iOS

2

Game Design Rápido para Prototipar Juegos en Unity

3

Repositorio del curso Unity para móviles

4

Creación de Juegos Móviles en Unity: Estructuración de Proyectos

Sprite Atlas y Generación de Caramelos

5

Integración de Assets en Unity: Fondo de Escenario y Sprite Mapping

6

Colocación y Configuración de Sprites en Unity

7

Programación de Scripts para Caramelos en Videojuegos con Unity

8

Configuración y Gestión del Tablero en Unity con C#

9

Relleno de Tablero 2D con GameObjects en Unity

10

Recorte y edición de sprites en Unity para videojuegos

11

Creación y Configuración de Tablero en Unity para Videojuegos

12

Cambio de Cuadrados por Caramelos Aleatorios en C#

Diseño de Game Play

13

Evitar Tripletes en Candy Crush con Bucle Do While en Unity

14

Interacción Táctil en Unity: Selección y Movimiento de Objetos

15

Intercambio de Sprites en Unity para Juegos de Puzzle

16

Configuración de Física en Unity para Movimiento de Caramelos

17

Detección y Eliminación de Coincidencias en Candy Crush

18

Destrucción de Caramelos y Optimización en Juegos Móviles

19

Caída en Cascada de Caramelos en Juegos Match-3

20

Relleno de huecos y generación de caramelos en Unity

21

Optimización de Algoritmo de Alineación en Videojuegos tipo Match-3

Retos finales

22

Diseño de Interfaz Gráfica en Unity para Videojuegos

23

Programación de Interfaz Gráfica en Unity: Sistema de Puntos y Movimientos

24

Implementación de Singleton en Gestor de Interfaz de Usuario

25

Creación de Pantalla de Game Over en Videojuegos

26

Diseño de Niveles y Puntuación en Videojuegos de Puzle

27

Implementación de Efectos de Sonido en Videojuegos con C#

28

Animación y Destrucción de Caramelos en Videojuegos

29

Diseño de Menú Principal para Videojuegos Móviles

Cierre del curso

30

Configuración y Exportación de Videojuegos a App Stores con Unity

31

Desarrollo de Juegos para Móviles con Unity y Android Studio

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Relleno de huecos y generación de caramelos en Unity

20/31
Recursos

¿Cómo rellenar los huecos en el tablero con nuevos caramelos?

Cuando movemos caramelos en el tablero de juego, estos van descendiendo y dejan huecos en la parte superior. Para mantener el tablero lleno y funcional, necesitamos rellenar esos huecos con nuevos caramelos generados aleatoriamente. Este procedimiento se encarga de mantener el dinamismo y la complejidad del juego.

¿Cómo generar nuevos caramelos sin coincidencias inmediatas?

Para evitar coincidencias (matches) automáticas en filas o columnas al colocar un nuevo caramelo, es esencial seguir ciertas restricciones. Al generar nuevos caramelos:

  • Declarar una lista de candidatos: Utilizamos todos los caramelos posibles del juego y los añadimos a una lista de candidatos (possible candies) para elegir.
  • Remover caramelos coincidentes: Eliminamos de la lista aquellos caramelos que crearían matches, considerando sus posibles vecinos:
    • Si hay un caramelo a la izquierda o a la derecha, eliminamos esos también de los candidatos.
    • Revisamos la fila inferior para evitar un match vertical inmediato.

Implementamos este procedimiento con un método que devuelve un caramelo aleatorio viable:

private Sprite GetNewCandy(int x, int y) {
    List<Sprite> possibleCandies = new List<Sprite>(originalPrefabs);

    if (x > 0) {
        possibleCandies.Remove(candies[x - 1, y].GetComponent<SpriteRenderer>().sprite);
    }
    if (x < xSize - 1) {
        possibleCandies.Remove(candies[x + 1, y].GetComponent<SpriteRenderer>().sprite);
    }
    if (y > 0) {
        possibleCandies.Remove(candies[x, y - 1].GetComponent<SpriteRenderer>().sprite);
    }
    
    return possibleCandies[Random.Range(0, possibleCandies.Count)];
}

¿Cómo integrar este método para mantener el tablero siempre lleno?

Una vez tenemos un método para obtener un nuevo caramelo, lo incorporamos al proceso de movimiento de caramelos determinando qué elementos se han de reemplazar. Cuando movemos un caramelo y se genera un hueco, en lugar de dejar la posición vacía o nula, invocamos a GetNewCandy para colocar un nuevo caramelo:

for (int i = y; i < ySize - 1; i++) {
    candies[x, i] = candies[x, i + 1];
}
candies[x, ySize - 1] = GetNewCandy(x, ySize - 1);

¿Cuál es el impacto visual y funcional de esta solución?

Con cada jugada, los jugadores verán cómo los espacios vacíos se completan rápidamente con nuevos caramelos, manteniendo activo el flujo del juego. Con este procedimiento no solo se mantiene la jugabilidad, sino que se añade un nuevo desafío: las alineaciones resultantes de las caídas pueden generar nuevas jugadas automáticamente.

¿Qué más podemos mejorar en el algoritmo de juego?

En futuras iteraciones, nuestro objetivo principal será no solo rellenar el tablero, sino también optimizar el reconocimiento de nuevas alineaciones creadas por los movimientos automáticos de los caramelos resultantes de las caídas. Queremos asegurarnos de que el algoritmo detecte y actúe incluso sobre las alineaciones nuevas creadas por las alineaciones anteriores, promoviendo interacciones infinitas y desafiantes.

¡Esperamos que sigas con determinación y deseo de explorar más este mundo de programación de juegos!

Aportes 6

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

No se si alguien más le pasaba, pero a mi cuando hacía 3 en línea en la primera fila, no me generaba los candies.
Coloque este if y funcionó

            if(renderes.Count == 1)
            {
                renderes[0].sprite = GetNewCandy(x, ySize - 1);
            }```

Es increible como le damos total contexto a la computadora de lo que esta pasando y como lo tiene que hacer

Al generar el nuevo caramelo también se debe asignar su correspondiente ID. Así que hice lo siguiente:

Aquí generaba el nuevo candy lo guardo en una variable y con esa variable llamo a mi función GetCandyId() que recibe un candy de tipo Sprite.

 renderes[j].sprite = renderes[j+1].sprite;
                Sprite newCandy = GetNewCandy(x,ySize-1);
                renderes[j+1].sprite = newCandy;

                candiesToFall[j].GetComponent<Candy>().id = renderes[j+1].GetComponent<Candy>().id;
                candiesToFall[j+1].GetComponent<Candy>().id = GetCandyId(newCandy);

Función GetCandyId()

 private int GetCandyId(Sprite candy){
        int id = 0;
        for (int i = 0; i < prefabs.Count; i++)
        {
            if(candy == prefabs[i]){
                id = i;
            }
        }
        return id;
    }       

EXELENTE

Genial