Odossea banner

Odossea

Unity 2D C# Soft Body Physics Joint Systems

Overview

Odossea es un juego cooperativo local para dos jugadores desarrollado en Unity 2D durante la 9ª Gran CITM GameJam. El proyecto se construyó alrededor de un sistema de físicas soft-body personalizado que permite una mecánica central donde cada jugador puede transferir parte de su propia masa al compañero, haciéndolo crecer mientras él mismo se encoge. Esta interacción genera puzles y desafíos cooperativos basados en el intercambio dinámico de masa.

5 Team members
7 days Development time
2026 Year
Unity Engine

Mi rol

Gameplay & Physics Programmer

Responsable del desarrollo del sistema de físicas soft-body y de la implementación de la mecánica principal de transferencia de masa, colaborando en el diseño de la experiencia cooperativa del juego.

Trailer

0:00 / 0:00

Qué programé

Soft body physics demo

Soft-Body Physics Controller

El jugador está compuesto por cinco rigidbodies unidos mediante RelativeJoint2D y DistanceJoint2D, formando una estructura soft-body capaz de deformarse sin perder estabilidad. El movimiento y el salto se aplican sobre el cuerpo central, dejando que la red de joints distribuya las fuerzas al resto de nodos. Ajusté iterativamente las restricciones y parámetros de los joints para conseguir una deformación que transmita un buen game feel.

Mass transfer mechanic

Mass Transfer & Dynamic Soft-Body Scaling

La mecánica permite transferir masa entre jugadores, haciendo que uno crezca mientras el otro se encoge en tiempo real. El principal reto fue mantener estable la estructura soft-body durante estos cambios de escala, ya que el jugador está compuesto por una red de joints que debía adaptarse sin deformarse ni romperse. Para solucionarlo, recalculé las distancias y offsets de los joints en función del ratio de escala, manteniendo la coherencia física mientras la escala se interpolaba suavemente en FixedUpdate, asegurando transiciones estables entre tamaños.

Shoot and recoil mechanic

Physics-Based Shooting & Recoil System

El disparo aplica un impulso al proyectil y una fuerza opuesta a todos los bones del jugador, generando un sistema de retroceso físico que puede utilizarse también como mecánica de movimiento para impulsarse lateralmente o ganar altura. Para evitar colisiones en el primer frame, una coroutine desactiva temporalmente el contacto entre el proyectil y el jugador inmediatamente después del disparo.

Environment interactions

Dynamic Physics-Based Environment

El entorno está compuesto por puentes formados por bones conectados mediante HingeJoint2D y BoxCollider2D, lo que permite que el jugador los cruce mientras reaccionan dinámicamente al peso aplicado. Además, un NPC tipo bouncer aplica un impulso vertical al colisionar con el jugador, distribuyendo la fuerza a través de todos los bones del cuerpo para generar una respuesta física coherente.

Death disperse animation

Death & Respawn System

Al morir, DisperseCubes() genera tantos cubos como niveles de tamaño tenía el jugador, aplicando fuerzas y ángulos aleatorios para representar la destrucción de forma física en lugar de usar una animación. El respawn se realiza en la última posición registrada del compañero, y una coroutine gestiona la reactivación secuencial de bones y joints para reconstruir la estructura de forma estable.

Premios

Premio Mejor Tecnología

9ª Gran CITM GameJam · Patrocinado por SocialPoint

El sistema de soft-body fue reconocido como la propuesta técnica más destacada de la jam. El enfoque se centró en mantener estable una red de joints en tiempo real durante cambios de escala, logrando que el resultado se percibiera de forma natural dentro del gameplay.

Premio Odossea