2017-12-07 6 views
0

Ich habe die folgende einfache Klasse Networkbehaviour erstreckt. Ich muss auf eine Verbindung zum Server warten, um eine [Command] -Funktion aufzurufen.OnConnectedToServer nicht genannt werden [UNET]

Any Lage UNET oder Multiplayer-Experten, mir zu sagen, was ich falsch mache?

using System.Collections; 
using UnityEngine; 
using UnityEngine.Networking; 

public class KeepClientConnected : NetworkBehaviour { 

    public int pingInterval = 30; 
    // Use this for initialization 
    void Awake() { 
     DontDestroyOnLoad(transform.gameObject); 
    } 

    void Start(){ 

    } 

    void OnDisconnectedFromServer(NetworkDisconnection info) 
    { 
     if (Network.isServer) 
      Debug.Log("Local server connection disconnected"); 
     else 
      if (info == NetworkDisconnection.LostConnection) 
      Debug.Log("Lost connection to the server"); 
     else 
      Debug.Log("Successfully diconnected from the server"); 
    } 


    private void OnConnectedToServer() 
    { 
     Debug.Log("0 ASSERT OnConnectedToServer"); 
     StartCoroutine(myCoRoutine()); 
    } 

    [Command] 
    void Cmd_KeepConnection() 
    { 
     Debug.Log("2 ASSERT calling KeepConnection on Server"); 
    } 

    IEnumerator myCoRoutine() 
    { 
     while (true) 
     { 
      Cmd_KeepConnection(); 
      Debug.Log("1 ASSERT calling KeepConnection on Server"); 
      yield return new WaitForSeconds(2); 
     } 
    } 
} 

Antwort

0

Ich habe OnConnectedToServer nicht verwendet, aber ich kann Ihnen ein paar Alternativen geben.

  1. Machen Sie einen Spieler. Ist dieses Netzwerkverhalten auf diesem Player vorhanden? Der Player wird erst erstellt, wenn der Client verbunden ist.

  2. Network verlängern und OnStartClient außer Kraft setzen, während immer noch dafür, dass base.OnStartClient nennen. In dieser Methode können Sie sicher sein, dass der Client gestartet und bereit ist, während er eine Referenz an den Client an Sie weitergibt.

Als Randbemerkung verwendete ich den folgenden Code in Update-Methode mein Spielers:

  if (KeepAlive) 
      { 
       LastPing += Time.deltaTime; 
       if (LastPing > 10) 
       { 

        LastPing = 0; 
        CmdPing(); 
       } 
      }