<html lang='es' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'></html> ScriptableObjects - Parte 5 - Helix Jump - Videojuegos con Unity

ScriptableObjects - Parte 5 - Helix Jump

 Creando un juego estilo Helix Jump en Unity

¡Bienvenidos de nuevo al blog! Tras aprender los fundamentos de los ScriptableObjects en nuestras entregas anteriores, hoy aplicaremos estos patrones de diseño para desarrollar las bases de un juego arcade estilo Helix Jump. Verás cómo centralizar la configuración de los niveles y las estadísticas globales facilita la creación de múltiples etapas sin tocar código.

Lo que aprenderás en este tutorial:
  • Cómo configurar los parámetros de un nivel (número de pisos, colores, velocidad de giro) usando un ScriptableObject.
  • Cómo controlar la rotación de la torre mediante deslizamiento (touch/mouse swipe).
  • Cómo mantener una arquitectura limpia separando los datos visuales de la lógica de juego.

 

1. Paso 1: Configuración del Nivel (HelixLevelConfig.cs)

En un juego tipo Helix, cada nivel puede tener diferentes características: altura de la torre, colores de las plataformas o dificultad. En lugar de quemar estos datos en un script de escena, crearemos un ScriptableObject para configurarlos individualmente.


using UnityEngine;

[CreateAssetMenu(fileName = "LevelConfig", menuName = "ScriptableObjects/Helix/LevelConfig")]
public class HelixLevelConfig : ScriptableObject
{
    [Header("Parámetros de la Torre")]
    public int totalPlatforms = 15;
    public float distanceBetweenPlatforms = 2f;
    
    [Header("Dificultad y Velocidad")]
    public float rotationSpeed = 200f;
    [Range(1, 5)] public int gapSizeMultiplier = 2;

    [Header("Diseño y Paleta")]
    public Color towerColor = Color.cyan;
    public Color safePlatformColor = Color.green;
    public Color dangerPlatformColor = Color.red;
}

2. Paso 2: Controlador de la Torre (HelixTowerRotator.cs)

El núcleo de la jugabilidad en Helix es rotar la torre deslizando el dedo o el ratón por la pantalla. Crearemos un script sencillo que lea la velocidad de rotación desde nuestro archivo de configuración global o nivel:


using UnityEngine;

public class HelixTowerRotator : MonoBehaviour
{
    [SerializeField] private HelixLevelConfig currentLevelConfig;
    private float rotationSpeed;

    private void Start()
    {
        if (currentLevelConfig != null)
        {
            rotationSpeed = currentLevelConfig.rotationSpeed;
        }
        else
        {
            rotationSpeed = 200f; // Valor por defecto si no hay SO asignado
        }
    }

    private void Update()
    {
        // Detectar arrastre del ratón o toque en móvil
        if (Input.GetMouseButton(0))
        {
            float mouseDeltaX = Input.GetAxis("Mouse X");
            transform.Rotate(Vector3.up, -mouseDeltaX * rotationSpeed * Time.deltaTime);
        }
    }
}

3. Paso 3: Generación Dinámica de la Torre

Para construir la torre automáticamente basándonos en los datos del ScriptableObject, crearemos un generador simple. Crea un script llamado HelixTowerGenerator.cs y asígnalo a un GameObject vacío en la escena:


using UnityEngine;

public class HelixTowerGenerator : MonoBehaviour
{
    [SerializeField] private HelixLevelConfig levelConfig;
    [SerializeField] private GameObject platformPrefab; // Prefab de un piso cilíndrico con hueco

    private void Start()
    {
        GenerateTower();
    }

    private void GenerateTower()
    {
        if (levelConfig == null || platformPrefab == null)
        {
            Debug.LogWarning("Falta asignar el LevelConfig o el Prefab de la plataforma.");
            return;
        }

        float spawnY = 0f;

        for (int i = 0; i < levelConfig.totalPlatforms; i++)
        {
            Vector3 spawnPosition = new Vector3(0, spawnY, 0);
            GameObject platform = Instantiate(platformPrefab, spawnPosition, Quaternion.identity, transform);
            
            // Opcional: Aquí puedes cambiar colores o escalas según levelConfig
            spawnY -= levelConfig.distanceBetweenPlatforms;
        }
    }
}

4. Configuración en el Editor de Unity

  1. Haz clic derecho en tu proyecto: Create > ScriptableObjects > Helix > LevelConfig y nómbralo Level_01.
  2. Personaliza los valores en el Inspector (ajusta los colores, la velocidad de rotación a 250 y el número de plataformas a 20).
  3. Crea un GameObject vacío en tu escena principal, asígnale el script HelixTowerRotator y el HelixTowerGenerator.
  4. Arrastra tu archivo Level_01 a la ranura Current Level Config de ambos scripts.
  5. ¡Dale al Play y arrastra el ratón de izquierda a derecha para ver cómo gira tu torre proceduralmente!

5. Conclusión

Al utilizar un ScriptableObject para definir las propiedades del nivel, si en el futuro quieres crear el Nivel 2 con mayor velocidad y menos plataformas, solo tienes que duplicar el archivo Level_01 en tus Assets, cambiar sus valores y asignarlo al generador sin modificar una sola línea de código.


¿Te gustaría que en la siguiente parte añadamos la física de la pelota rebotando y la destrucción de plataformas por colores? ¡Déjalo en los comentarios!

No hay comentarios

Imágenes del tema: merrymoonmary. Con la tecnología de Blogger.