Plataforma de juegos controlados desde el móvil. Los dispositivos móviles actúan como mandos físicos (mediante sensores de movimiento, botones y micrófono) conectados vía WebSocket a juegos Unity.
[Móvil J1] ──┐ ┌── Unity (WiiGames)
├── ws://host:3002 ─── java-server ─┤
[Móvil J2] ──┘ (o node-server :3000) └── (envía eventos de vuelta)
| Componente | Rol |
|---|---|
java-server/ |
Servidor principal (Javalin, Java 21, puerto 3002). Router WebSocket con cliente web embebido. |
node-server/ |
Servidor alternativo (Node.js, puerto 3000). Mismo protocolo. |
WiiGames/ |
Juego principal — Unity 2D multijugador (plataformas, personaje Berie, monedas, destructibles). |
tilt-maze/ |
Juego heredado — Unity 3D laberinto de bola controlado por inclinación. |
merge-game/ |
Juego adicional. |
mobile-app/ |
App Android nativa (Kotlin + Compose + Hilt). Mando con sensores, botones, micrófono y vibración. |
mobile-web/ |
Cliente web standalone (HTML + CSS + JS). Mismo protocolo que la app. |
cd java-server
mvn package -DskipTests
java -jar target/java-server-1.0.jar
# Servidor en http://0.0.0.0:3002Abrir WiiGames/ en Unity Hub con Unity 6 LTS. Verificar que el campo Server Url en el Inspector de WebScoketClient.cs apunta a:
ws://<IP-DEL-PC>:3002
Presionar Play.
App Android (mobile-app/ o WiiCell Remote.apk):
- Introducir IP del PC y puerto
3002 - Tocar Conectar → Activar sensores
Cliente web (cualquier navegador en la misma red):
http://<IP-DEL-PC>:3002
TFG-GameServerClient/
├── java-server/ # Servidor principal (Javalin, Java 21)
│ ├── src/main/java/ # server/Main.java, model/ClientStore.java
│ ├── src/main/resources/ # index.html (cliente web embebido)
│ └── pom.xml # Dependencias + shade plugin (fat JAR)
├── node-server/ # Servidor alternativo (Node.js, ES Modules)
│ └── server.js # HTTP + WebSocket, puerto 3000
├── WiiGames/ # Juego principal Unity 2D
│ ├── Assets/Scripts/ # WebScoketClient, GameEventManager, PlayerMovements...
│ └── ...
├── tilt-maze/ # Juego heredado Unity 3D (Tilt Maze)
├── merge-game/ # Juego adicional
├── mobile-app/ # App Android nativa (Kotlin + Compose)
│ └── app/src/main/java/com/tfg/motioncontroller/
├── mobile-web/ # Cliente web standalone
│ ├── index.html
│ ├── style.css
│ └── script.js
├── docs/ # Documentación del proyecto
├── WiiCell Remote.apk # APK precompilada de la app Android
├── run_server.bat # Script de inicio para java-server (Windows)
└── README.md
| Componente | Requisito mínimo |
|---|---|
| Java JDK | 21 (LTS) |
| Maven | 3.9+ |
| Unity | 6 LTS |
| Android | 8.0+ (API 26) — para la app nativa |
| Navegador | Chrome 90+ / Safari 15+ — para el cliente web |
| Red | WiFi local compartida entre PC y móvil |
Todos los clientes (app Android, web) y el servidor comparten el mismo protocolo JSON:
Móvil → Servidor: {"type":"join"}
Servidor → Móvil: {"type":"assignRole","playerId":1}
Móvil → Servidor → Unity:
{
"type": "input", "gamma": 0.45, "beta": -0.12,
"dpadX": 0, "dpadY": 0,
"btnA": false, "btnB": false, "isYelling": false
}
Unity → Servidor → Móvil:
{"type":"collision","playerId":1,"objectName":"Enemy"}
{"type":"pickup","playerId":1,"item":"coin"}
{"type":"death","playerId":1}
Ver documentación completa en docs/- Arquitectura.md.
App nativa con Material Design 3. Instalable directamente desde WiiCell Remote.apk.
- Sensores nativos (
TYPE_GAME_ROTATION_VECTOR) con calibración automática - Modo Touchpad (área ovalada arrastrable) y Modo Botones (WASD)
- Detección de soplado por micrófono
- Vibración haptic con amplitudes variables (Android 8+)
- Contador de pickups flotante con estilo dorado
- Configuración de sensibilidad (Bajo/Medio/Alto/Custom)
- Tema oscuro/claro persistente
SPA modular (HTML + CSS + JS). No requiere instalación; abre la URL del servidor en el navegador.
- Mismas funcionalidades que la app nativa
- Funciona en Android Chrome y Safari (iOS requiere HTTPS para sensores)
- Responsive para landscape y portrait
- Iconos Material Symbols (MD3)
Si no tienes JDK 21 disponible, puedes usar el servidor Node.js con el mismo protocolo:
cd node-server
pnpm install
pnpm start # http://0.0.0.0:3000En Unity cambiar Server Url a ws://<IP>:3000.
El juego original de laberinto 3D (Spring Boot + TCP + HTTPS). Ya no es el proyecto activo. Su documentación de configuración se conserva en docs/ para referencia histórica. Para ejecutarlo, consultar docs/Server README.md.
| Documento | Contenido |
|---|---|
docs/- Arquitectura.md |
Protocolo WebSocket, contratos JSON, estado del servidor, integración Unity |
docs/- Configuracion.md |
Guía paso a paso para levantar todos los componentes |
docs/- Pruebas.md |
Casos de prueba, matriz de compatibilidad, métricas |
docs/Mobile App README.md |
Documentación completa de la app Android |
docs/Mobile Web README.md |
Documentación del cliente web |
docs/Arquitectura Juegos.md |
Documentación detallada de los scripts Unity (WiiGames) |
docs/Server README.md |
Servidor Spring Boot heredado (tilt-maze, solo referencia) |
docs/changes/ |
Registro de cambios por fecha |