我有以下简单的类扩展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);
}
}
}
答案 0 :(得分:0)
我没有使用过OnConnectedToServer,但我可以给你几个选择。
制作播放器。该播放器上是否存在此网络行为。只有在连接客户端后才能创建播放器。
扩展NetworkManager并覆盖OnStartClient,同时确保仍然调用base.OnStartClient。在此方法中,您可以确保客户端已启动并准备就绪,因为它将对客户端的引用传递给您。
作为旁注,我在播放器的Update方法中使用了以下代码:
if (KeepAlive)
{
LastPing += Time.deltaTime;
if (LastPing > 10)
{
LastPing = 0;
CmdPing();
}
}