Jump to content
ecko

Cliente/Servidor mas eficiente

Recommended Posts

Buenas a todos, quería aclarar el tema cliente servidor para ver que pros y contras tiene hacer los cálculos de las rutas de navmesh en el servidor o en el cliente.

En mi caso estoy calculando las rutas en el servidor ya que de este modo pienso que es la forma mas segura de evitar futuros bugs (el cliente aumente su velocidad de movimiento, evite colisiones,etc) pero no sé si esto implica una sobrecarga en mi servidor... (esto sería un tema a aclarar si las rutas implican mucha sobrecarga :S)

Pensé un día en cambiarlo al cliente dichos cálculos pero no me gustó la idea ya que esto implica que el networkidentity tenga la marca localplayerauthority lo cual jode todo mi sistema ya que ahora todo lo controlaría el cliente (movimiento, ataques,hechizos,etc) y aparte si el cliente mueve el personaje a un lugar del mapa con el sistema AI de navmeshagent y mientras esta andando hasta el punto final minimiza el juego,  el personaje se queda parado hasta que vuelva a maximizar el juego... lo cual me decanté por dejarlo en el servidor dicho control.

Agradecería mucho las opiniones de usuarios expertos en servidores clientes, muchas gracias.

Share this post


Link to post
Share on other sites

No soy ningún experto en redes, pero hablaré desde la experiencia que yo he tenido.

Nunca he utilizado Navmesh pero los algoritmos para encontrar caminos son costosos y requieren de muchos cálculos. Yo cuando he tenido que utilizar algo de este tipo, han sido en juegos sencillos, y me ha valido con A* básico, y sí que consume. Sobretodo como tengas que estar calculando varios caminos a la vez. No sé cual es la idea de juego, o cuantos jugadores puede tener por partida o servidor.

Lo que comentas de ir de un punto a otro y que si minimiza seguro que se puede solucionar de varias formas. No sé si has probado Run in Background y no te ha servido (desconozco si se puede utilizar esto en juego en red o con navmesh), pero también se podría crear un sistema basado en el tiempo y en el que calcule la ruta antes de empezar y de está manera calcular donde debería estar el jugador al volver al juego.

También se le puede mandar esta info al servidor una vez calculada (los checkpoints por los que debe pasar) y que sea el servidor el que se encargue después de lo necesario, de está forma ya se ahorra todo el cálculo de la ruta, que es lo más pesado.

Después el tema de que todo el movimiento lo lleve el servidor, puede hacer que no responda de forma instantanea a las ordener del jugador, y depende del tipo de juego puede ser frustrante.

Al final cuantos más cálculo lleve el servidor, más potencia (dinero) vas a necesitar y menos jugadores por servidor podrá aguantar.

  • Like 1

Share this post


Link to post
Share on other sites

Hola, te agradezco la respuesta, me gustaría recibir mas información acerca de este tema, no sé si las rutas serán tan costosas como comentas ya que una ruta en ejecución parece que es instantánea y si las rutas no son demasiado largar serán aún mas optimas y no sé si es mas costoso mandar mi posición del cliente al servidor y el servidor que actualice los clientes con esa posición (lo cual puede haber saltos de posición) o en mi caso que directamente el servidor haga la ruta y mande la actualización a todos. Yo uso un sistema de lobbyes el cual serán varios servidores y cada lobbye tendrá unos 10 jugadores max (mas npcs etc) quizas haga rutas  entre 10 y 50 máximo, no sé si al hacer el mapeado del navmesh internamente  guarda valores para agilizar dichos cálculos.

   

Share this post


Link to post
Share on other sites

Sólo por curiosidad y para crear debate, los servidores (dedicados) serán tuyos? sino sabes los características de los servidores? vas a hacer que sean hosts?

Estuve leyendo sobre servidores el otro día y se supone que son bastante más potentes que los ordenares, no creo que suponga un problema hacer esos cálculos, puedes realizar pruebas? Estas son el tipo de cosas que "retrasan" el desarrollo pero que mejoran el resultado final, por qué no haces una escena en la que calculas y mueves varios (20-30) NPCs? No creo que tarde en realizar los cálculos, igual lo que podrías comparar es si te sale mejor actualizar la posición e interpolar cada "x" frames o mandar el path a cada cliente cuando un jugador lo actualiza, también podrías calcular el path en local y subir dicho path. No estoy seguro si puedas mandar el NavMeshPath directamente o tengas que implementar un serializador/deserializador.

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...