Devlog #2 — Al agua

Bajo el agua en Level 1, mirando hacia arriba: la superficie como un techo claro con el sol y las siluetas de los bloques

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.

Saltar al agua desde un bloque, bucear entre bloques sumergidos y salir saltando a un bloque bajo

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.

Bloques sumergidos vistos desde dentro del agua, con niebla azul y desenfoque
A ras de agua: bloques que asoman sobre la superficie y otros sumergidos con un botón debajo 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.

Caída desde un bloque alto con el hundimiento de cámara al aterrizar, y un mantle sobre un borde

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.

La ventana Block Groups del editor de Unity con los grupos de Level 1

Bajo el capó

  • Natación. Un estado nuevo, Swimming, en RefunctCharacterController. El agua jugable es un BoxCollider trigger en una capa propia (Water); las mallas de agua ya no tienen collider. El salto de salida comprueba que haya la cara superior de un Block delante 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 Button cuelga de un Block y 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 CameraFollowPoint con 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 de OnLanded, 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 por MantleMaxAngle, 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, ValidateBlocksTool y la paleta de colores. Las herramientas de pose y previsualización salen del inspector de BlockGroup, 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 1 un 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 Gym y Level 2 para el nuevo sistema, o retirarlos, porque Level 1 es ya la escena de referencia.

Nos vemos la semana que viene.

¿Te ha gustado? Recibe cada entrada nueva del devlog en tu correo.

By:


Deja un comentario

Descubre más desde Ambient devlog

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo