Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 58,34€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales
Sign in to follow this  
Dexteram

Problemas sincronizando con Networking

Recommended Posts

Buenas a todos.

Me he lanzado a hacer un juego de proyecto fin de carrera y me he metido (creo que ha sido una mala idea dios...) a trastear un poco con el tema de multjugador. Me he atascado bastante y estoy bastante desesperado. Agradezco de antemano cualquier ayuda sobre el tema. Es posible que haya cosas que estén mal planteadas, he intentado hacerlo lo menos complicado posible.

El proyecto trata de un juego de minigolf, que tiene por una parte modo solitario, y por otra multijugador. Lo único que quiero hacer es a nivel de LAN. Hasta ahora he conseguido esto. El problema ha venido cuando he empezado con el tema de delimitar la acción de los jugadores para que solo manejen su propia pelota.

Adjunto una imagen de cómo tengo estructurado el prefab para el multijugador. Lo explico un poco por encima. Es la primera vez que hago un poco más grande de lo que suele ser hacerte una escena y cacharrear con ella. Dentro del gameobject ConjuntoMultijugador tengo otro gameobject vacío llamado jugador que tiene varias partes, la pelota que tiene un rigidbody, el pivoteAyudaVisual que sirve para mostrar una barra de potencia (también adjunto imagen), pivoteCamara sirve para manejar la cámara la cual se maneja de forma orbital con el ratón, RayCastUltimaPos lo utilizo para tener siempre debajo de la pelota un raycast y mediante tags ir guardando la posición de la pelota para que cuando se salga, vuelva a la ultima posición, y por en medio de algunos gameobjects he puesto algún script a modo de enlace para que se muevan a la vez que la pelota y de esa forma la barra de potencia siempre parta del la pelota etc. El otro gameobject que tengo al mismo nivel que jugador contiene cosas para el HUD. No se si estará bien planteado pero en un principio la idea es que cada uno tenga y vea su propio HUD.

Lo que he visto hasta el momento del tema de networking un poco en resumen, es que cada prefab tiene que tener su propio network identity. Con la propiedad isLocalPlayer sacada del network identity puedo limitar las acciones de los jugadores para que cuando estén en LAN cada uno mueva su pelota. Aquí he presupuesto que con un network identity basta ya que luego desde cualquier objeto si lo llamas es suficiente para usar la propiedad isLocalPlayer. El problema que tengo desde hace ya un tiempo y que estoy muy desesperado es que no se sincronizan los jugadores, es decir, estando en la partida, si un jugador se mueve, el resto de jugadores no lo ve. Las pelotas del resto de juadores están en el escenario pero a ojos de otro jugador no se mueven. Estuve investigando y por lo que he visto, con el componente Network Transformer debería bastar. El problema es que no se muy bien donde ponerlo y me ha surgido otra duda. Si el network transform sirve para sincronizar pero el objeto está compuesto de varias partes y además una de ellas con rigidbody, tengo que usar un network transform en cada parte? Estuve haciendo pruebas y cuando asocio un network transform a un gameobject, automáticamente se crea un network identity sobre ese objeto y esto hace que me salte el warning de que hay demasiados network identity. Es un warning pero entiendo que si me sale es porque no se debe tener más de uno. Estoy ya desesperado y es horrible hacer pruebas en este punto porque cuando juego con los network transform, al intentar quitarlos muchas veces no sé por qué se me cierra Unity por un error sin explicación alguna. Ni me he molestado en rellenar el parte de errores porque en 3 ocasiones anteriores en errores similares sin explicación lo único que me han dicho es que no han podido reproducir el error. Sé que dentro del network transform hay una opción para especificar una sincronización según sea 2D, 3D, con rigidbody, etc. La pelota tiene rigidbody pero el Network Transform está en ConjuntoMultijugador. No sé muy bien hacia donde tirar. Es lo único que me falta para poder dar por cerrado esto y no sé muy bien cómo manejar esto ya. Muchas gracias de antemano por cualquier cosa que me pueda ayudar.

Un saludo.

 

dfcvsfdvsdfsv.PNGcaptura2.jpg

Share this post


Link to post
Share on other sites

El multiplayer por defecto de Unity es un desastre y está obsoleto (https://unity3d.com/es/unity/features/multiplayer). Lo van a cambiar por otro en versiones posteriores de la 2019.

Te recomiendo que vayas a PUN (Photon Unity Networking) sin dudarlo. El código de ejemplos está muy bien hecho y hay muchos tutoriales. Es gratuito hasta 20 CCU.

https://assetstore.unity.com/packages/tools/network/pun-2-free-119922

 

Edited by iRobb

Share this post


Link to post
Share on other sites

He visto de pasada gente que lo usa. No me he lanzado porque voy con el tiempo muy justo y porque lo único que me quedaba era que se sincronizasen los jugadores. Conlleva mucho? Lo único que quiero hacer es una LAN sencilla. Tengo dos botones en el menú, uno para que alguien cree el host y otro botón para que el resto se conecten a esa partida. Y simplemente quiero eso, ni voy a hacer que todos comiencen a la vez ni nada, que cada uno vaya entrando y vaya jugando. Me lancé a UNET porque aunque estaba ya cerca de desaparecer la pintaban fácil de manejar.

Share this post


Link to post
Share on other sites
7 minutes ago, Dexteram said:

He visto de pasada gente que lo usa. No me he lanzado porque voy con el tiempo muy justo y porque lo único que me quedaba era que se sincronizasen los jugadores. Conlleva mucho? Lo único que quiero hacer es una LAN sencilla. Tengo dos botones en el menú, uno para que alguien cree el host y otro botón para que el resto se conecten a esa partida. Y simplemente quiero eso, ni voy a hacer que todos comiencen a la vez ni nada, que cada uno vaya entrando y vaya jugando. Me lancé a UNET porque aunque estaba ya cerca de desaparecer la pintaban fácil de manejar.

El multiplayer por defecto de Unity es un desastre y está obsoleto. Lo van a cambiar por otro en versiones posteriores de la 2019.

Te recomiendo que vayas a PUN (Photon Unity Networking) sin dudarlo. El código de ejemplos está muy bien hecho y hay muchos tutoriales. Es gratuito hasta 20 CCU.

https://assetstore.unity.com/packages/tools/network/pun-2-free-119922

 

Hay unos cuántos tutoriales en youtube de UN que están bastante bien:

 

Share this post


Link to post
Share on other sites

Ya. He visto unos cuantos que lo explican bastante bien, el problema es que usan objetos sencillos. No me queda clara la utilización del network transform que es la que supuestamente sincroniza el transform del jugador. Voy a echar un vistazo a ver si consigo algo con Photon. muchas gracias por la ayuda. Si alguien sabe como sincronizar bien esto por UNET me vale igualmente porque por esa vía ya tengo medio camino hecho.

Share this post


Link to post
Share on other sites

Yo he probado ya los sistemas de networking UNET y Photon, siendo realistas el networking de unity es basura. Photon está super bien, ¿el problema?, el precio. Finalmente me decidí por utilizar sockets y montarme mi propio servidor con NodeJS, y bueno, montando el servidor a lo mejor tardas un poco, pero al final consigues el control total de todo el sistema multijugador y se hace más ameno la creación de nuevas acciones, quizás deberías mirartelo porque para hacer una cosa tan sencilla como lo que quieres te puede venir genial. 

Aquí te dejo un vídeo de ejemplo

 

Share this post


Link to post
Share on other sites
On 8/12/2019 at 1:52 AM, leocub58 said:

Yo he probado ya los sistemas de networking UNET y Photon, siendo realistas el networking de unity es basura. Photon está super bien, ¿el problema?, el precio. Finalmente me decidí por utilizar sockets y montarme mi propio servidor con NodeJS, y bueno, montando el servidor a lo mejor tardas un poco, pero al final consigues el control total de todo el sistema multijugador y se hace más ameno la creación de nuevas acciones, quizás deberías mirartelo porque para hacer una cosa tan sencilla como lo que quieres te puede venir genial. 

Aquí te dejo un vídeo de ejemplo

 

 

por que dices que el networking de unity es basura?

Share this post


Link to post
Share on other sites
4 hours ago, anonimo said:

 

por que dices que el networking de unity es basura?

Porque es un absoluto desastre, los mismos developers lo han dicho varias veces. Es más, están trabajando en un multijugador nuevo (Aquí un video que lo explica,

)

Share this post


Link to post
Share on other sites
1 hour ago, leocub58 said:

Porque es un absoluto desastre, los mismos developers lo han dicho varias veces

No están obligados a hacer un state-of-the-art en el módulo multiplayer, así que tampoco es cuestión de criticarlo. Aún gracias, que le dieron soporte básico al networking...

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...