Unity · RPG · Prototype

RPG Combat System

Prototipo de combate por turnos inspirado en Expedition 33: sistemas de RPG clásico explorados desde la programación técnica.

2026 1 Mes Indie Developer Solo
UnityC#RPGVFXTurn-based
scroll

Prototipo de juego de rol por turnos inspirado en Expedition 33 y otros referentes del género. El objetivo no era hacer un juego completo, sino entender en profundidad cómo se construyen los sistemas que hacen que este tipo de combate se sienta satisfactorio.

Más allá de la lógica de turnos, el proyecto sirvió para explorar áreas que normalmente quedan fuera del foco en proyectos de equipo: VFX, SFX, cinemáticas con Cinemachine y feedback visual que hace que cada acción tenga peso.

Durante el proceso de planificación y el posterior desarrollo, siempre se tuvo en cuenta la modularidad y escalabilidad de cada elemento introducido en el juego, con la intención de replicar la creación de sistemas que puede tener un estudio profesional.

Prácticamente TODO en este prototipo es editable y escalable, desde los diferentes ataques y habilidades hasta las cinemáticas de cada uno de ellos.

Imágenes y gameplay

Sistemas técnicos

Decisiones de arquitectura y los sistemas que dan vida al proyecto.

01

Turn Manager

Gestor de turnos basado en una cola de prioridad con soporte para efectos de estado (veneno, aturdimiento, buffs) que modifican el orden y las acciones disponibles en cada turno.

C#Priority QueueState Pattern
02

Sistema de habilidades

Arquitectura basada en ScriptableObjects donde cada habilidad define su coste, efectos, animaciones y VFX asociados. Permite añadir nuevas habilidades sin tocar código.

ScriptableObjectsCommand PatternC#
03

Feedback visual y sonoro

Cinemáticas de ataques y habilidades compuestas con Timeline, utilizando Cinemachine, VFX y SFX propios y de terceros.

TimelineVFXCinemachineAudio Mixer

Cómo se construyó

Las fases del proyecto: desde la idea hasta el resultado final.

01 — Referentes

Desmontar Expedition 33

Empecé jugando Expedition 33 con una libreta, anotando cada microdetalle del combate: cuándo vibra el mando, qué hace la cámara en cada ataque, cómo cambia la música. Ese análisis definió las prioridades del prototipo.

02 — Core loop

El loop sin presentación

Primero implementé toda la lógica de turnos con cubos de colores. Nada de arte, nada de efectos. Solo la mecánica desnuda para validar que funcionaba antes de añadir capas encima.

03 — Modularity

Hacerlo 'Code Free'

Mi idea principal era que cualquier elemento que ya existiese en el juego se pudiese crear sin abrir el editor de código. Por lo que cree herramientas dentro de Unity para lograrlo.

04 — Juice

Hacerlo sentir bien

Con la lógica estable, el foco pasó a VFX, SFX y cámara. Esa fase del proyecto es la que más tiempo lleva y la que más impacto tiene en cómo se percibe el combate.

Problemas y soluciones

Los obstáculos más interesantes del proyecto y cómo los resolví.

Arquitectura Problema

Los efectos de estado encadenados (un personaje envenado que aturde a otro en su turno de daño de veneno) creaban dependencias circulares difíciles de gestionar.

Solución

Separé la resolución de efectos en fases: primero se calculan todos los efectos del turno, luego se aplican en orden. Eso elimina las dependencias circulares y hace el sistema predecible.

Arquitectura Problema

Hacer cinemáticas generales para cada personaje de manera que se respetasen las posiciones del atacante y del objetivo y la distancia entre ellos.

Solución

Creé un sistema que utiliza dos placeholder, 'caster' y 'target'. Al realizar una acción, se leen los parametros de esta y se sitúan los placeholder en sus respectivos lugares, se calcula la distancia entre ellos y se normaliza, luego, mediante Signals se llaman a los eventos correspondientes (MakeDamage, Heal, ApplyBuff, etc).
Por ejemplo: se ejecuta una habilidad -> sale el proyectil inicial -> cuando la distancia recorrida del proyectil es un 90% de la total -> crea una explosión en 'target'.

Qué aprendí

El feedback visual y sonoro no es polish — es una parte central del diseño de combate. Un ataque que no se siente poderoso no es un problema de arte, es un problema de diseño.

Los ScriptableObjects son perfectos para datos de juego, pero hay que definir bien los límites de lo que hacen. Si empiezan a contener lógica, el sistema se complica rápido.

Para un juego de gran escala, crear sistemas que permitan la rápida creación y variabilidad de elementos es crucial para poder dar variedad rápidamente.