Noticias

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

Temas recientes

Problemas sincronizando con Networking

Iniciado por Dexteram, Agosto 11, 2019, 10:22:27 PM

Tema anterior - Siguiente tema
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.
 
 

Agosto 11, 2019, 10:56:03 PM #1 Ultima modificación: Agosto 11, 2019, 10:57:52 PM por iRobb
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
 
 

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.

Cita de: Dexteram date=1565557573He 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:
 


   
eature=oembed">

 
 

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.

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
 


   
eature=oembed">

 
 

Cita de: leocub58 date=1565567569Yo 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
   
   

      
         
eature=oembed">
      
   
   
       
   


 
 
por que dices que el networking de unity es basura?

Cita de: anonimo date=1566214978 
   
   
      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,
 


   
eature=oembed">

 
)

Cita de: leocub58 date=1566230195Porque 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...

Etiquetas: