OnConnectedToServer未被调用[UNET]

时间:2017-12-07 18:15:25

标签: c# unity3d-unet

我有以下简单的类扩展Networkbehaviour。我需要等待与服务器的连接才能调用[Command] funtcion。

任何UNET或多人专家都能告诉我我做错了什么?

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);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我没有使用过OnConnectedToServer,但我可以给你几个选择。

  1. 制作播放器。该播放器上是否存在此网络行为。只有在连接客户端后才能创建播放器。

  2. 扩展NetworkManager并覆盖OnStartClient,同时确保仍然调用base.OnStartClient。在此方法中,您可以确保客户端已启动并准备就绪,因为它将对客户端的引用传递给您。

  3. 作为旁注,我在播放器的Update方法中使用了以下代码:

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