Noticias

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

Unet selector de players

Iniciado por brok, Enero 04, 2018, 07:39:57 PM

Tema anterior - Siguiente tema
Miren tengo este código que lo que hace e seleccionar el player en le cliente y el server localhost, en el server funciona perfecto pero en el cliente no, el selector del player funciona en el cliente pero me agrega el mismo player que el server, con ete script:
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Networking.NetworkSystem;
using UnityEngine.UI;
public class RedManager : NetworkManager {
    public Button p1;
    public Button p2;
    public Button p3;
    public Button p4;
   
    public short avatarIndex;
    // Use this for initialization
 
    void Start ()
    {
        p1.onClick.AddListener(delegate { AvatarPicker(p1.name = "coche1"); });
        p2.onClick.AddListener(delegate { AvatarPicker(p2.name = "coche2"); });
        p3.onClick.AddListener(delegate { AvatarPicker(p3.name = "coche3"); });
        p4.onClick.AddListener(delegate { AvatarPicker(p4.name = "coche4"); });
    }

// Update is called once per frame
void AvatarPicker(string boton)
    {
        switch (boton)
        {
            case "coche1":
                avatarIndex = 0;
                break;
            case "coche2":
                avatarIndex = 1;
                break;
            case "coche3":
                avatarIndex = 2;
                break;
            case "coche4":
                avatarIndex = 3;
                break;
        }
        playerPrefab = spawnPrefabs[avatarIndex];
}
    public override void OnClientConnect(NetworkConnection conn)
    {
        IntegerMessage msg = new IntegerMessage(avatarIndex);
       
        if (!clientLoadedScene)
        {
            ClientScene.Ready(conn);
            if (autoCreatePlayer)
            {
               
                ClientScene.AddPlayer(conn, 0, msg);
               
            }
        }
    }
    public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId, NetworkReader extraMessageReader)
    {
        int id = 0;
 
        if (extraMessageReader != null)
        {
            IntegerMessage i = extraMessageReader.ReadMessage<IntegerMessage>();
            id = i.value;
        }
        GameObject playerPrefab = spawnPrefabs[id];
        GameObject player;
        Transform StarPos = GetStartPosition();
        if (StarPos != null)
        {
            player = Instantiate(playerPrefab, StarPos.position, StarPos.rotation);
        }
        else
        {
            player = Instantiate(playerPrefab, Vector3.zero, Quaternion.identity);
        }
        NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);
       
    }
   
}

 
y poniendo como verdadero esto:
 

if (clientLoadedScene)
        {
            ClientScene.Ready(conn);
            if (autoCreatePlayer)
            {
               
                ClientScene.AddPlayer(conn, 0, msg);
               
            }
        }

 
me funciona perfecto excepto que me sale este error.
 
A connection has already been set as ready. There can only be one.

UnityEngine.Networking.NetworkIdentity:UNetStaticUpdate()
 
Se que es porque se duplica la identidad. ¿Cómo podría solucionarlo?.

Enero 04, 2018, 08:48:29 PM #1 Ultima modificación: Enero 04, 2018, 08:50:19 PM por brok
También agrege este código y las varibles button como privadas:
 

void Awake()
    {
            p1 = GameObject.Find("Player1").GetComponent<Button>();
            p2 = GameObject.Find("Player2").GetComponent<Button>();
            p3 = GameObject.Find("Player3").GetComponent<Button>();
            p4 = GameObject.Find("Player4").GetComponent<Button>();
       
    }

 
para que me funcionara al parar el juego y poder seleccionar otro personaje sin cerrarse el juego, pero me cambia Player1 por coche1 el nombre del botón y no me funciona el selector de players ¿alguna idea?

Me he dado cuenta que mi NetworkManager se duplica esta uno en el hierarchy y otro en el hierarchy con DontDestroyOnLoad lo intentado con destroy al salir de la partida en el botón stop pero a la segunda vez que intento cargar el coche no sale DontDestroyOnLoad con el NetworkManager ni sale el coche claro. A sin que no se que hacer estoy mas perdido.

Ya lo he solucionado todo menos este error:
 
A connection has already been set as ready. There can only be one.

UnityEngine.Networking.NetworkIdentity:UNetStaticUpdate()

Viva la vida lo solucione!!!!

Etiquetas: