Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

[Duda] Decisión de networking

Iniciado por Cristian Ros, Abril 03, 2017, 02:37:52 PM

Tema anterior - Siguiente tema
Buenas, abro este post porque llevo un rato leyendo y no me acaba de quedar claro que sistema utilizar de todos los que veo, porque por lo visto todos tienen pros y contras. Me refiero a UNet, uLink y Photon. Quiero hacer que al pulsar un botón directamente encuentre una partida con otra persona sin tener que pasar por un botón de "Create Server" por así decirlo.
 


UNet parece básico y no he encontrado información o recursos que suplan mis necesidades, por otro lado es gratis.


uLink se ha usado en juegos como Rust y aunque parece que se puede programar bastante bien y consta de herramientas para crear servidores autoritativos, este en específico no tengo ni idea de si es gratis o de pago, y tengo entendido que los desarrolladores de Rust recibieron ataques DDoS, lo cual no me deja muy claro si es algo normal o no me conviene.


Photon, he leído bastante y parece que tiene una implementación sencilla en Unity, su contra en este caso sería que no dispongo de capital alguno y solo puedo hacer al plan gratuito que hostea 100 personas simultaneas, o 50 partidas a la vez en mi juego, creo que el plan gratuito está bien porque la duración de la partida no debería ser mayor a 5 minutos(esto lo estoy decidiendo aún) pero no tengo nada claro si llegará un momento en el que colapse.


La duda es ¿qué sistema utilizo para programar el apartado de networking de mi juego y que me permita hacer lo que digo al final del primer párrafo?.

¡Gracias de antemano!

 

Segun el juego que quieras hacer... explicate un poco y te podremos orientar, yo uso particularmente UNet, y comercialmente Photon que es el mas rapido en lo que a comunicacion con cliente se refiere, pero todo depende para que juego quieres hacerlo.

····>Desarrollando un videojuegos online-arcade para Android.


····>Programador en:C,C#,VB.net,PHP,HTML5,SQL,JS,Ruby.


····>Trabajando en: Desarrollo de paginas web y bushistudios.


                    ๑۩۞۩๑_(▀▄)KINGTRASE()_๑۩۞۩๑ 



Cita de: kingtrase date=1491224660Segun el juego que quieras hacer... explicate un poco y te podremos orientar, yo uso particularmente UNet, y comercialmente Photon que es el mas rapido en lo que a comunicacion con cliente se refiere, pero todo depende para que juego quieres hacerlo.
   


Es un juego 2D en una visión de tipo top-view sobre batallas de peonzas al más puro estilo "beyblade", en principio tengo intención de hacer dos clases de multiplayer, unas carreras tipo super mario run y batallas para 2 jugadores, y además de poder iniciar partida dándole a un botón de buscar partida y no crear servidor y encontrar servidor.

No se si conoces bien como funcionan los multiplayer, pero no se crea un servidor para cada partida, lo que se hace es un unico servidor, todos los clientes se conectan a ese servidor y el servidor va creando "Salas" tambien llamadas "Rooms" y emparejando a los clientes, para lo que quieres hacer el que mejor lo administra es photon, aunque UNet tambien te puede servir, uLink esta orientado mas a algo mmo.

····>Desarrollando un videojuegos online-arcade para Android.


····>Programador en:C,C#,VB.net,PHP,HTML5,SQL,JS,Ruby.


····>Trabajando en: Desarrollo de paginas web y bushistudios.


                    ๑۩۞۩๑_(▀▄)KINGTRASE()_๑۩۞۩๑ 



Es que he estado buscando documentación de como hacer eso pero no encontraba nada, así que me decidí a preguntar...

Creo entender lo que me has dicho y voy a intentar buscar documentación ahora en google, y creo que me decanto por UNet por ser gratuito y no tener limite de conexiones(que no la tiene, ¿no?), aunque aún debo discutirlo con mi compañero.
 
Espero que la documentación no sea muy compleja porque en verdad da un poco de miedo entrar a programar un multiplayer xD

@Cristian Ros La verdad que Unet es algo mas complejo de los demas, pero hay buenos tutoriales por la web, de todas formas para lo que quieres te sigo recomendando photon, si por casualidad necesitas comprar su licencia para poder acoger a mas gente significa que te va bien y no es un problema pagar un poco de €€ :)
 
Suerte!

····>Desarrollando un videojuegos online-arcade para Android.


····>Programador en:C,C#,VB.net,PHP,HTML5,SQL,JS,Ruby.


····>Trabajando en: Desarrollo de paginas web y bushistudios.


                    ๑۩۞۩๑_(▀▄)KINGTRASE()_๑۩۞۩๑ 



@kingtrase Justo ahora iba a preguntar si lo que había que usar era el Matchmaker de Unet, pero si me recomiendas photon me informaré más, a mi ya me parecía que tenía buena pinta, solo que me da cierto miedo no tener dinero para pagar un plan mayor, la verdad..
 
Gracias :D

La verdad que no se bien como usar Unet, creo que si es MatchMaker, yo es que siempre he usado Photon xD

····>Desarrollando un videojuegos online-arcade para Android.


····>Programador en:C,C#,VB.net,PHP,HTML5,SQL,JS,Ruby.


····>Trabajando en: Desarrollo de paginas web y bushistudios.


                    ๑۩۞۩๑_(▀▄)KINGTRASE()_๑۩۞۩๑ 



@kingtrase ¿Este es el plan Free de Photon en Unity? https://www.assetstore.unity3d.com/en/#!/content/1786" ipsnoembed="true" rel="external nofollow">https://www.assetstore.unity3d.com/en/#!/content/1786
 
Si es ese, ¿son solo 20 conexiones simultaneas? Parecen muy pocas, ¿no?

He visto que el código parece más sencillo de llevar y tal pero me ha dejado un poco descolocado esto, creí que eran 100 conexiones simultaneas..

ya, la verdad que no es gran cosa, echale un ojo a este: http://developers.forgepowered.com/
 
 

····>Desarrollando un videojuegos online-arcade para Android.


····>Programador en:C,C#,VB.net,PHP,HTML5,SQL,JS,Ruby.


····>Trabajando en: Desarrollo de paginas web y bushistudios.


                    ๑۩۞۩๑_(▀▄)KINGTRASE()_๑۩۞۩๑ 



@kingtrase Pues la verdad que pinta muy bien, solo que deberías rentar los servidores por tu cuenta, por ahora creo que Photon me ha gustado más y estoy empezando a aprender un poco, buscaré una manera de pagar los 95$ que cuesta el plan.

Y de verdad es tan malo Unet como lo pintan para un juego en tiempo real tipo shooter para 40 o 50 personas? O sólo tiene la fama de serlo?
 
Por lo que he podido leer en este foro y en otros artículos, para tener un juego serio de este tipo se debe usar un servidor autoritativo, de lo contrario en runtime te hacen lo que quieren con cheats, suben vidas, créditos, super velocidad, etc etc, lo que quieran ya que el código y lógica esta en cliente y pueden alterar lo que les venga en gana.
 
Yo estoy en la misma situación que Cristian, buscando orientarme un poco y empezar la curva de aprendizaje bien enfocado desde el principio, desde luego si quieres empezar un proyecto a largo plazo más por hobby que por negocio, uLink no parece una buena idea, 600€ la licencia Indie.
 
Lo que he leído sobre Photon es que si necesitas un servidor autoritativo, prepárate para escribir código, ya que Photon no sabe nada de las mecánicas de Unity, no sé si esto era antiguamente y ha mejorado, pero de no ser así que queda?
 
- Photon (Para tener server autoritativo se debe escribir muchísimo código)
 
- uLink (Buena solución pero 600€ sólo por empezar a estudiarlo)
 
- Unet (Parece la única viable, ¿tan malo es? Ellos lo recomiendan para todo tipo de juegos)
 
 
 
Un saludo!

Mayo 11, 2017, 01:15:07 PM #12 Ultima modificación: Mayo 11, 2017, 01:18:26 PM por Harsel
Para mi en estos casos de juegos multijugador donde el multijugador como tal es importante, es decir que no quieres que alteren nada los propios clientes, sin duda la única alternativa que veo es crear tu el sistema de servidor, o buscar algun proyecto base de servidor donde esten programadas las conexiones de clientes y el sistema de opcodes y partir de ahí comenzar a crear el juego.
 
Suele ser bastante complejo y suelen quedar bastantes agujeros cuando haces un proyecto integramente en unity y luego intentas portearlo a un servidor online, es doble trabajo y estará mal pensao casi seguro.
 
¿Por parte del servidor se debe escribir código del juego? Si, de hecho practicamente toda la lógica del juego debe ir a nivel de servidor, no de cliente.
 
La parte cliente, la podrás hacer por unity, pero ahí quedaría únicamente el apartado visual, UI, animaciones y scripts simples de jugador, normalmente en este apartado se suelen incluir movimientos para usar las físicas del motor más apropiadamente, de ahí viene a que en la mayoría de los juegos que mantienen estos sistemas de movimientos en clientes, puedan ser fácilmente alterados y de ahí vienen los speedhack, bla bla...
 
Este el ejemplo claro de juegos que no estan muy bien programados a nivel de multiplayer, cuando por ejemplo, mediante algún tipo de hack puedes ver a enemigos tras objetos donde no deberías verlos. Esto es un fallo de programación del servidor, pues si el servidor tuviera un mapeado de posiciones (vmaps, mmaps...), mediante la logica del servidor sabrías si crear el objeto de jugador enemigo en el cliente o no y de no crearlo es simplemente imposible que mediante un hack se pueda acceder a esa información, pues simplemente no existe en el cliente.
 
Resumiendo, crear un servidor propiamente dicho, no es dificil, solamente necesitas crear las nuevas conexiones, guardarlas en threads y continuar recibiendo conexiones, establecer un sistema de paquetes con sus opcodes y poco más. El problema y lo que tomará el 95% del tiempo, es programar la logica del juego en el servidor y enviar y recibir esos datos cuando sea necesario a traves de los opcodes que hayas creado.
 
Así que, ¿qué elegir? Cualquier servidor que te ofrezca la posibilidad de programarlo y que sea autoritario. Y si está en un lenguaje potente como pueda ser C++, mejor.

siempre puedes ir en modo hard programando todo tu mismo como ago yo en mis test, yo intento hacer el maximo de trabajo en el cliente, despues comunico el resultado al servidor mediante json, y con el servidor java guardo datos y gestiono la bbdd
 
PD: si, eh programado un servidor java estoy to loco jajaja.

Etiquetas: