Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d Unity Mirror-网络游戏对象未显示_Unity3d_Mirror - Fatal编程技术网

Unity3d Unity Mirror-网络游戏对象未显示

Unity3d Unity Mirror-网络游戏对象未显示,unity3d,mirror,Unity3d,Mirror,我正在使用Unity Mirror与我的应用程序联网,以便中央服务器(而不是主机)可以向它连接的客户端发送命令。 在游戏中,“游戏”将使程序在游戏中自动成为客户端或服务器,因此我不必使用NetworkManagerHUD提供的仅客户端/服务器按钮 目前我面临两个问题: 客户端在与服务器建立连接后立即断开连接。重写OnClientConnect函数时,我将行base.OnClientConnect(conn)。进入原始函数后,我得出结论,是autoCreatePlayer设置为true导致了此问题

我正在使用Unity Mirror与我的应用程序联网,以便中央服务器(而不是主机)可以向它连接的客户端发送命令。 在游戏中,“游戏”将使程序在游戏中自动成为客户端或服务器,因此我不必使用NetworkManagerHUD提供的仅客户端/服务器按钮

目前我面临两个问题:

  • 客户端在与服务器建立连接后立即断开连接。重写OnClientConnect函数时,我将行
    base.OnClientConnect(conn)
    。进入原始函数后,我得出结论,是autoCreatePlayer设置为true导致了此问题。(服务器和客户端是在同一台计算机上运行的程序的两个实例,因为我只能使用localhost进行测试)
  • 任何帮助都将不胜感激

    public override void OnClientConnect(NetworkConnection conn)
        {
    
            base.OnClientConnect(conn);    //This line causes the error message 
            clientConnected = true;
            GameObject[] prefabs = Resources.LoadAll<GameObject>("NetworkingComponents");
    
            foreach (var prefab in prefabs)
            {
     
                NetworkClient.RegisterPrefab(prefab);
    
            }
    
            
            GameObject[] gos = Resources.LoadAll<GameObject>("NetworkingComponents");
    
        }
    
    
    public class MyNetworkManager : NetworkManager
    {
    
        public GameObject dropdown;
        public Canvas canvas;
    
        
        //---------------------------Networking stuff----------------------------------
        
        public List<NetworkNode> networkedNodes { get; } = new List<NetworkNode>();
        public List<Settings> networkedSettings { get; } = new List<Settings>();
        public List<NetworkedVisualisersDisplay> visualisersDisplays { get; } = new List<NetworkedVisualisersDisplay>();
        public List<Visualiser> visualisers{ get; } = new List<Visualiser>();
        public static MyNetworkManager instance = null;
        public NetworkedVisualisersDisplay visDisplayPrefab;
        public NetworkNode networkNode;
        private string homeName;
        public volatile bool clientConnected = false;
    
        public bool IsClientConnected()
        {
            return clientConnected;
        }
        //the purpose of having a delay is that we need to determine if the call to StartClient() actually started the player as a client. It could fail if it’s the first player instance on the network. 
        public IEnumerator DelayedStart()
        {
            //base.Start();
            StartClient();
            yield return new WaitForSeconds(2);
            print("conn count " + NetworkServer.connections.Count);
    
            if (!IsClientConnected())
            {
                NetworkClient.Disconnect();
             print(“starting as server”);
                StartServer();
                clientConnected = false;
    
            }
            else
            {
                print("starting as client");
            }
            
            visDisplayPrefab = Resources.Load<NetworkedVisualisersDisplay>("NetworkingComponents/NetworkedVisualisersDisplay");
            if (instance == null)
            {
                instance = this;
                print("instance = " + this);
    
            }
            else
            {
                print("manager destroyed");
    
                Destroy(gameObject);
            }
            yield return null;
        }
    
    
        //-----------------------------------------------------------------------------
        public override void Start(){
    
            StartCoroutine(DelayedStart());
      
        } 
        public override void OnStartServer()
        {
            
            GameObject[] prefabs = Resources.LoadAll<GameObject>("NetworkingComponents"); 
            foreach (var prefab in prefabs)
            {
                
                spawnPrefabs.Add(prefab);
                        
            }
            
        }
        
       
        public override void OnServerChangeScene(string scenename)
        {
    
            if (scenename.Equals("Visualisers"))
            {
    
                for (int i = 0; i < visualisersDisplays.Count; i++)
                {
                    var conn = networkedNodes[i].connectionToClient;
    
                    NetworkedVisualisersDisplay visSceneInstance = Instantiate(visualisersDisplays[i]);
                    NetworkServer.Destroy(conn.identity.gameObject);
                    NetworkServer.ReplacePlayerForConnection(conn, visSceneInstance.gameObject);
                }
    
    
    
            }
            else if (Settings.Instance.sceneNames.Contains(scenename))
            {
                for (int i = 0; i < visualisersDisplays.Count; i++)
                {
                    var conn = visualisers[i].connectionToClient;
                    var visInstance = Instantiate(visualisers[i]);
                    NetworkServer.Destroy(conn.identity.gameObject);
                    NetworkServer.ReplacePlayerForConnection(conn, visInstance.gameObject);
                    
                }
            }
            
    
        }
        public override void OnServerAddPlayer(NetworkConnection conn)
        {       
            NetworkNode n = Instantiate(networkNode);
            NetworkServer.AddPlayerForConnection(conn, n.gameObject);
            NetworkNode.instance.DisplayMessage();
        }
    
       
        public override void OnClientConnect(NetworkConnection conn)
        {
    
            base.OnClientConnect(conn);
        //we are connected as a client
            clientConnected = true;
            GameObject[] prefabs = Resources.LoadAll<GameObject>("NetworkingComponents");
    
            foreach (var prefab in prefabs)
            {
                NetworkClient.RegisterPrefab(prefab);
    
            }
            
        }
    
    }