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

Intercambio de Sprites en Unity para Juegos de Puzzle

15/31
Recursos

¿Cómo implementar la selección y deselección de caramelos en un juego móvil?

En el desarrollo de un juego móvil, es crucial diseñar interacciones ágiles y eficientes. Aunque no probamos las funcionalidades directamente en el dispositivo móvil, preparamos y testeamos muchas características dentro del entorno de Unity. Vamos a profundizar en la programación de gameplay para gestionar cómo se seleccionan o deseleccionan los caramelos y cómo se realiza el intercambio entre ellos.

¿Cómo realizar un swap entre dos caramelos?

Cuando haces clic en un caramelo y luego en otro, el objetivo es intercambiar sus posiciones, eso sí, en esta etapa inicial, sin las restricciones de adyacencia. Para esto:

  1. Crear un método swapSprite: Este método se encarga de intercambiar las imágenes de los caramelos.

    public void swapSprite(Candy NewCandy) {
        if (GetComponent<SpriteRenderer>().sprite == NewCandy.GetComponent<SpriteRenderer>().sprite) {
            return;
        }
        Sprite oldCandy = NewCandy.GetComponent<SpriteRenderer>().sprite;
        NewCandy.GetComponent<SpriteRenderer>().sprite = GetComponent<SpriteRenderer>().sprite;
        GetComponent<SpriteRenderer>().sprite = oldCandy;
    }
    
  2. Uso de la técnica auxiliar: Como el swap tradicional de valores requiere de una variable temporal, hacemos uso de una copia auxiliar para asegurar el intercambio sin pérdida de información.

  3. Intercambio de identificadores: Además de las imágenes, es fundamental actualizar los identificadores únicos de cada caramelo para mantener la coherencia en el juego.

    int tempId = NewCandy.id;
    NewCandy.id = this.id;
    this.id = tempId;
    

¿Cuándo llamar al método de intercambio?

El método swapSprite debe ser invocado apropiadamente para que los caramelos cambien de imagen al hacer clic en ellos. Considera estos momentos:

  • Interacción del usuario: Se debe hacer dentro de eventos como mouseDown, evitando situaciones donde el jugueteo no permita ningún intercambio visible.
  • Validación previa: Antes de llamar al método, verifica que se hayan seleccionado dos caramelos diferentes para intercambiar.

¿Qué podemos mejorar en el método swapSprite?

La funcionalidad actual permite cambiar cualquier dos caramelos, incluso si están en posiciones separadas dentro de la pantalla. Aunque esto facilita las primeras pruebas, el objetivo es limitar el movimiento a caramelos adyacentes.

Para que el juego tenga lógica:

  • Limitar a adyacentes: En el futuro, restringiremos los movimientos a los caramelos que sean vecinos, es decir, con los que está al lado arriba, abajo, izquierda o derecha.

La programación de videojuegos requiere no solo creatividad sino también métodos detallados y ordenados, haciendo que la implementación y las pruebas de cada paso aseguren una experiencia de usuario satisfactoria.

Con esta nueva funcionalidad, puedes empezar a jugar e interactuar dinámicamente con los elementos del juego, construyendo una base sólida para futuros desarrollos y mejoras. ¡Sigue desarrollando tus habilidades, explora las capacidades de Unity, y permite que tu imaginación tome forma en cada línea de código!

Aportes 5

Preguntas 1

Ordenar por:

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

Sigan este codigo si quieren obtener un swap como el mio:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Candy : MonoBehaviour
{
    private static Color selectedColor = new Color(0.5f, 0.5f, 0.5f, 1.0f);
    private static Candy previousSelected = null;

    private SpriteRenderer spriteRenderer;
    private bool isSelected = false;

    public int Id;

    private Vector2[] adjacentDirections = new Vector2[]
    {
        Vector2.up,
        Vector2.down,
        Vector2.left,
        Vector2.right,
    };

    public Vector3 objective;

    GameObject newCandy;

    private void Awake()
    {
        spriteRenderer = GetComponent<SpriteRenderer>();
        objective = Vector3.zero;
    }

    private void OnMouseDown()
    {
        if (spriteRenderer.sprite == null || BoardManager.sharedInstance.isShifting)
        {
            return;
        }

        if (isSelected)
        {
            DeselectCandy();
        }
        else
        {
            if (previousSelected == null)
            {
                SelectCandy();
            }
            else
            {
                SwapSprite(previousSelected.gameObject);
                previousSelected.DeselectCandy();
                //SelectCandy();
            }
        }
    }

    private void Update()
    {
        if (objective != Vector3.zero)
        {
            this.transform.position = Vector3.Lerp(this.transform.position, objective, 5 * Time.deltaTime);
        }
    }

    private void SelectCandy()
    {
        isSelected = true;
        spriteRenderer.color = selectedColor;
        previousSelected = gameObject.GetComponent<Candy>();
    }

    private void DeselectCandy()
    {
        isSelected = false;
        spriteRenderer.color = Color.white;
        previousSelected = null;
    }

    public void SwapSprite(GameObject candy)
    {
        if (spriteRenderer.sprite == candy.GetComponent<SpriteRenderer>().sprite)
        {
            return;
        }

        this.objective = candy.transform.position;
        candy.GetComponent<Candy>().objective = this.transform.position;
    }
}

Este curso esta super genial, y más aún cuando ya haz tomado los 3 cursos anteriores de la Carrera, entiendes casi todo, excepto a veces por la lógica, pero es parte del proceso aprender a leer código y desarrollar la destreza del pensamiento lógico.

Cual es la diferencia entre newCandy.GetComponent<SpriteRenderer>.sprite y newCandy.spriteRenderer.sprite?

Genial

En vos confiamos 😄