
Semana grande. El mar ya no es un suelo con olas pintadas: ahora te puedes tirar a él. Además, el personaje se mueve con más suavidad y tengo una herramienta nueva para diseñar el nivel.
Se puede nadar
Hasta ahora el agua de Level 1 era, en la práctica, un suelo. Ahora es agua de verdad, y nadar funciona como en el Refunct original: simple y sin tutorial.
- En la superficie te mueves con WASD, te sumerges agachándote y sales saltando.
- Bajo el agua avanzas hacia donde miras, saltar te sube y agacharte te baja. Si no tocas nada, te quedas a esa profundidad.
- Si caes desde lo alto, el impulso te hunde un poco y el agua te frena. Una caída de 10 metros te deja unos 3 metros bajo la superficie, no 5 como en la primera versión, que se sentía demasiado profunda.
Hubo una decisión importante: solo puedes salir del agua saltando hacia un bloque. Si no hay ninguno al alcance, flotas. Así el agua no es un atajo para llegar a cualquier sitio, sino el hueco entre islas, y para volver tienes que nadar hasta un bloque que asome lo bastante (unos 70 cm como mucho).
También puedes tocar bloques nadando, así que un bloque medio sumergido cuenta igual que uno pisado. Y los botones ya solo funcionan cuando su bloque ha terminado de subir: no se puede pulsar un botón que todavía duerme bajo el agua.

Cómo se ve debajo
Meter la cabeza en el agua cambia la imagen por completo: niebla densa y oscura, un tinte azulado, un desenfoque suave y, si miras hacia arriba, la superficie como un techo claro con las siluetas de los bloques recortadas encima. Al salir, todo desaparece de golpe, como al sacar la cabeza del agua.


Moverse se siente mejor
Tres retoques pequeños que se notan mucho al jugar:
- Aterrizar pesa. Al caer desde cierta altura, la cámara se hunde un poco y vuelve como un muelle, como si flexionaras las piernas. Cuanto más alta la caída, más se hunde. La primera versión parecía ir en dos tiempos (primero aterrizas y luego se hunde), así que medí la caída fotograma a fotograma y ahora es un único movimiento.
- Trepar es más suave. El mantle, el gesto de encaramarse a un borde, tenía un tirón al empezar, otro al terminar y un pequeño salto al acabar. Ahora sube con una curva que frena al llegar arriba y te deja caminando, sin saltitos.
- Trepar en diagonal. Si llegabas a un borde en ángulo, el personaje se giraba de golpe para subir de frente. Ahora sube en la dirección en la que miras, hasta cierto límite.
Por el camino cayeron dos bugs: agachado podías trepar al instante a bloques altísimos, y si te agachabas justo antes de caer al agua te quedabas encogido para siempre.

También probé una plataforma de salto que te lanza mucho más alto si saltas encima. Arreglé un bug que te dejaba usar ese impulso más tarde, en cualquier otro sitio, pero de momento la he quitado del nivel.
Una ventana para los grupos
Diseñar el nivel consiste en gran parte en repartir bloques en grupos y decidir cuándo emerge cada uno. Hasta ahora lo hacía con una barra en la vista de escena y un par de herramientas sueltas. Ahora hay una ventana, Block Groups, que lo reúne todo: crear grupos, mover bloques entre ellos, guardar sus poses, previsualizar la subida y avisar de los errores. Se abre con la tecla Q o con un botón junto a Play.
En cuanto la estrené, me dijo algo que no sabía: en Level 1 hay tres grupos que ningún botón hace aparecer.

Bajo el capó
- Natación. Un estado nuevo,
Swimming, enRefunctCharacterController. El agua jugable es unBoxCollidertrigger en una capa propia (Water); las mallas de agua ya no tienen collider. El salto de salida comprueba que haya la cara superior de unBlockdelante y al alcance (apogeo del salto más la altura máxima de mantle). El frenado de las caídas es un parámetro nuevo,WaterDrag, que solo actúa por encima de la velocidad de nado. - Contrato de botones. Todo
Buttoncuelga de unBlocky solo responde cuando ese bloque ha subido. Si no lo encuentra, escribe un error en consola y queda inerte. Los botones son ahora un prefab. - Efectos bajo el agua. Un pase de pantalla completa (
UnderwaterRendererFeature), un Volume con su propio post-procesado y un detector en la cámara (UnderwaterEffects) que lo enciende al cruzar la superficie. - Hundimiento al aterrizar. Desplaza el
CameraFollowPointcon un muelle amortiguado, así que no afecta a la cápsula ni a la física. Arranca en el primer impacto estable, un paso de física antes deOnLanded, que era el origen del efecto en dos tiempos. - Mantle. La posición inicial se toma en el primer paso, no dentro de
OnMovementHit, donde aún era la de antes del barrido. Además, el destino sigue la dirección de la mirada, limitada porMantleMaxAngle, y la altura se mide donde toca. - Plataforma de salto. El controller ya no guarda el impulso al tocarla; lee cada frame si lo que pisa es un
JumpPad, y solo lo conserva durante el coyote time. - Ventana Block Groups. Sustituye a la barra de la Scene View,
GroupIDEditor,ValidateBlocksTooly la paleta de colores. Las herramientas de pose y previsualización salen del inspector deBlockGroup, y un validador revisa los contratos al entrar en Play. - Verificación sin tests. El proyecto no tiene tests, así que la natación se comprobó con scripts lanzados en el editor a través del MCP de Unity: teletransportar al personaje, inyectar inputs y medir alturas fotograma a fotograma.
- Menores. El cursor ya no crece a 4K, ajustes de post-procesado y de sombras, y un piloto de natación en el panel de depuración.
- Documentación. El juego tiene ahora un GDD dentro de la documentación, y las partes espaciales (el corte del agua, las curvas del mantle y del aterrizaje, la planta de
Level 1) están dibujadas con Excalidraw en vez de descritas.
Lo siguiente
- Dar a los grupos 4, 5 y 6 de
Level 1un botón que los haga emerger y su pose bajo el agua. - Empezar por la lista de la demo: menú, música y efectos de sonido, y una pantalla final.
- Configurar
GymyLevel 2para el nuevo sistema, o retirarlos, porqueLevel 1es ya la escena de referencia.
Nos vemos la semana que viene.
¿Te ha gustado? Recibe cada entrada nueva del devlog en tu correo.