Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: brok en Enero 04, 2018, 07:39:57 PM

Título: Unet selector de players
Publicado por: brok en Enero 04, 2018, 07:39:57 PM
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?.
Título: Unet selector de players
Publicado por: brok en Enero 04, 2018, 08:48:29 PM
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?
Título: Unet selector de players
Publicado por: brok en Enero 05, 2018, 12:58:53 AM
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.
Título: Unet selector de players
Publicado por: brok en Enero 05, 2018, 10:57:08 AM
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()
Título: Unet selector de players
Publicado por: brok en Enero 05, 2018, 11:56:04 AM
Viva la vida lo solucione!!!!