Noticias

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

Selección Del Personaje Multijugador

Iniciado por Alex, Noviembre 27, 2018, 02:34:18 PM

Tema anterior - Siguiente tema
Hasta ahora solo he podido manejar el modo multijugador de unity networking con solo un jugador, (este viene por defecto y solo deja usar uno), mi duda viene en si puedo hacer que sea de 2 personajes a más, algo como una selección de personaje antes de entrar a la escena de juego (mientras se esta en el lobby), eh buscado algo referente y me encontré con lo que es el Picked pero como el codigo de unity networking no se puede editar, no lo eh podido lograr, queria preguntar si hay alguna manera de hacer eso y como la casilla de jugador es solo una, cuando elija al jugador se pase automaticamente a esa casilla. 
 
alguna ayuda?

Sí, a mí se me ocurrieron dos formas de hacer lo que quieres, ninguna es directa con el networking (no he mirado toda la API, quizas en el LobbyManager haya algo):
 
La primera es crear un prefab genérico e instanciar en cada cliente la malla del personaje escogido, pero como lo tengo es bastante más complejo.
 
La segunda es cambiar el PrefabPlayer que instancia el NetworkManager, para esto metes los prefabs en SpawnablePrefabs:
 

public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId)
    {
        GameObject player;
        if (contador == 0)
            player = Instantiate(spawnPrefabs[0]);
        else
            player = Instantiate(spawnPrefabs[1]);
        contador++;
       
        NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);
    }

 
Pero no sé bien el comportamiento que tenga exactamente.

@juanma_teso recientemente se me ocurrió una idea, como dices, podría cambiar al jugador después de instanciarlo, claro en mi caso estaría haciendo que entren al servidor primero y luego, lo que se instancia no es el jugador, si no una lista y ya de esa lista, el usuario estaría eligiendo a su personaje. Crees que es algo conveniente o bueno?

Es lo que tengo hecho yo, igual hay maneras más eficientes, pero esta no me laggea el juego.
 
Cosas que tuve en cuenta:
 


  •    La lista de jugadores (la malla y las variables que en mi caso son diferentes para cada jugador) están en cada cliente, un objeto DontDestroy y con patrón singletón para acceder desde cualquier pantalla.


  •    Necesitas una manera de guardar los personajes escogidos en los clientes, no es necesario guardar esta información en cada cliente, con un objeto en el host basta.


  •    Hay que tener mucho cuidado con las llamadas OnStartClient/OnStartServer/Start... etc, te recomiendo usar una corrutina en el Host para que le de tiempo a todos los clientes a iniciarse bien.


  •    IMPORTANTE!! Necesitas una referencia a cada cliente, el problema es que cuando cambias de escena cada cliente obtiene un nuevo connectionID, yo usé la dirección IP (mi juego es en red local).


Etiquetas: