[Multiplayer] [Devlog] Space Jump (shooter 2d)

B

Buenas...

Hace tiempo que quería hacer un multiplayer web que pesara entre 2 o 3 mbs y que funcionase en cualquier dispositivo sin problemas de compatibilidad.

Ahora inicio proyecto de cero que llamaré...

La trama

Shooter espacial 2D donde manejamos una nave con armamento.

Múltiples sistemas solares con diferentes tipos de mecánicas similares a "tower defense".

Un editor para crear los sistemas y que cada user pueda añadir su propio sistema al mapa.

Dos modos de juego, uno con navegación libre por el espacio para cazar a otros usuarios y otro donde cumplir misiones a alguno de los sistemas solares para destruirlos y recoger material.

Tecnología

La idea es desarrollar una mecánica de movimiento que ayude a simplificar el multiplayer.

La nave tendrá la inercia justa para compensar parte de la latencia de la red... y simplificar o anular el predictivo.

Física autoritativa en el servidor con node + ws + matter.js

El motor utilizado para el cliente es Unity3D 2019 con ECS Tiny.

La salida es un canvas 2D compatible con todos los dispositivos que he probado.

Estado actual

Ya hay un servidor 24/7 operativo.

Actualmente todos los objetos con movimiento (escenario incluido) están sincronizados.

Foco de desarrollo

Artefactos hostiles para incluir en los mapas y potenciadores para el player.
Preparar controles para pantallas táctiles.

OTROS

Mientras tanto en la GDC... Unity aprovecha este desarrollo para mostrar las posibilidades de su tecnología "instant games".


Se puede probar AQUI

* el rendimiento mejora con CHROME

1
B

Sobre la tecnología empleada para el cliente... ECS Tiny de Unity, aún en preview.

Por qué? Porque permite builds html5 de menos de 200kbs, es altamente modular y sigue la filosofía ECS que aporta gran rendimiento.

¿Que qué es? enlace aquí

Road map aquí

Docu aquí

B

reservado

B

reservado

skoei

reservado

Alvurion

reservado

B

Una captura de unas de las pruebas usando el ratón para controlar el movimiento.

B

Otra captura usando el teclado para navegación + el ratón para apuntar y disparar.

B

Radar para navegación y seguimiento del player con la cámara.

Marea bastante la cámara, probaré a suavizar el giro de la cámara usando algo de retardo respecto al giro del player para ver como queda.

Lo más probable es que acabe eliminando el giro de la cámara ya que además de marear dificulta la orientación del disparo.

1 respuesta
Kalgator

#9 haz que la camara rote mas lento que la nave hasta llegar a mirar al frente

y yo haría que la nave solo disparase al frente, podrías hacer que eso azul fuese un escudo para intentar parar las balas del enemigo y eso si funcionase donde el raton apuntase, le añadiría una ventaja el saber bloquear mientras encaras la nave para disparar al enemigo

1 1 respuesta
B

#10 lo he actualizado sin rotación, por ahora lo dejo así.

Más adelante idearé varios tipos de nave con diferentes mecánicas de control, incluido movimientos de cámara.

La cámara con rotación creo que podría ir bien con naves que tengan disparo con "auto lock on target".

1
Jastro

Tengo que darle un tiento en casa.

Pero, seguro que estara de puta madre como siempre :). ¿Qiue tal la experienca con tiny mode? ¿Te ha costado adaptarte?

1 respuesta
B

#12 el salto es importante y necesita un cambio de chip.

Con ECS podrías seguir trabajando de manera similar a como se hace con el Unity clásico pero para eso necesitas crear una serie de helpers... una vez los tienes no habría demasiada diferencia.

En mi caso, las posibilidades que me ofrece el ECS me han decantado a no volver a tocar el clásico. ECS sigue una filosofía similar a la que ya usaba antes de colocar a Unity como mi engine principal.


¿Me ha costado adaptarme?

La gran dificultad es que el ECS no está listo para producción, y el ECS Tiny tampoco (por cierto, ambos son/serán independientes). Están en preview, aún no se han lanzado, la documentación es/era muy escasa (ha mejorado bastante).

Está previsto que ECS Tiny, en breve, semanas quizás, migre a C# (actualmente usa TypeScript) y obligará a migrar todo lo hecho.

No recomiendo el salto a ECS (sea Tiny o no) hasta que no se lance oficialmente y pasen al menos unos meses para que se vaya asentando.


Dejo captura del proyecto...


Hoy cambio el foco, añadir torretas enemigas y sistema de login...

1
B

Prueba de torretas (física y lógica 100% server side)

Se activan por proximidad y seleccionan al player más cercano.

B

Añadido sistema de registro, logueo y sesión almacenada en el servidor.

1
B

Añadidas capas con scroll parallax.

B

Para el parallax he probado a usar elementos UI modificando el RectTransform (sin mover sprites).

Más adelante probaré a descartar elementos UI (moviendo sprites) para ver si hay diferencias de rendimiento.


Vídeo

B

Cambio el foco de desarrollo:

  • Artefactos hostiles para incluir en los mapas y potenciadores para el player.
  • Preparar controles para pantallas táctiles.
1
B

Actualización: he migrado la salida de Canvas a WebGL por problemas con transparencias en Firefox.

Ha mejorado notablemente el rendimiento... pero desconozco si se ha reducido demasiado el abanico de compatibilidad con dispositivos móviles.

B

Captura/prueba de sincronización (server 60 ticks/s Italia, clientes 20 ticks/s interpolados España)

Clientes: Móvil 60fps wifi vs PC 120fps wifi

2
B

Nueva lógica en el servidor con anclajes a las estaciones.

B

Dejo parado temporalmente esto en espera de que Unity termine de migrar Tiny a C#

1 1 respuesta
Jastro

#22 y eso? has encontrado algun obstaculo que te impide avanzar?

1 1 respuesta
B

#23 el obstáculo es el cambio a C#. Cuando suceda tendré que rehacer todo a C#.

Tiny solo soportará TypeScript a modo de plugins (similar a lo que hacen con .jslib en WebGL).

Ahora estoy en un punto donde necesito hacer limpieza, refactorizar para poder seguir avanzando. Así que he valorado esperar al cambio a C#.

Unity dice que lo lanzarán durante la primera parte del segundo trimestre.

1 respuesta
Jastro

#24 Cojonudo, me alegra que tarden tanto en integrar el tiny, tiene pinta de ser la polla .D

1 1 respuesta
B

#25 en unas semanas el cambio a C# en la preview. Pero el lanzamiento oficial se espera para fin de año.

PD: Realmente no detengo el proyecto al completo, solo la parte del cliente (Tiny). El lado del servidor seguiré trabajándolo. La física tiene más curro del que me esperaba.

B

Actualización:

  • Reformados los formularios. Ahora logueo, registro y sesión se crean vía WebSockets.
  • Añadido auto fullscreen.
3
kesada7

Ahora no se me ven las letras rojas en ninguna orientación

1 respuesta
B

#28 justo estaba con una reforma preparando un log interno para que el server almacene la data de la línea roja.

¿Qué resolución tiene?

1 respuesta
kesada7

#29 es un redmi note 5 1080x2160

1