我在这里用Unity Networking创建一个多人游戏。我想要的是在连接服务器和客户端时启动游戏。在我的游戏中,我有2个玩家,一个将充当托管游戏的服务器,另一个充当客户端,使用服务器IPAddress连接到该主机。因此,当两者都连接并准备好发挥时,我想开始游戏。任何人都可以帮助我如何才能知道两者是否相关。
以下是我正在使用的代码。
public NetworkManager manager;
public void startServerr()
{
NetworkServer.Listen(9000);
NetworkServer.RegisterHandler(MsgType.Connect, OnConnected);
NetworkServer.RegisterHandler(MsgType.Disconnect, OnDisconnected);
NetworkServer.RegisterHandler(MsgType.Error, OnError);
manager.StartHost();
}
public void connectToServer()
{
manager.networkAddress = PlayerPrefs.GetString("oppPlayerIP");
manager.StartClient();
}
public void OnConnected(NetworkMessage netMsg)
{
Debug.Log("Client Connected");
}
public void OnDisconnected(NetworkMessage netMsg)
{
Debug.Log("Disconnected");
}
public void OnError(NetworkMessage netMsg)
{
Debug.Log("Error while connecting");
}
答案 0 :(得分:2)
您目前正在使用NetworkManager
...如果您希望使用NetworkManager
而非NetworkServer
和NetworkClient
需要manual注册事件,那么您的脚本必须从NetworkManager
继承。
从NetworkManager
继承之后,您可以覆盖并使用OnClientConnect
和OnServerConnect
函数来检查客户端何时连接到服务器以及服务器何时连接到客户端。
以下是一个例子:
public class NetTest : NetworkManager
{
private NetworkManager manager;
public void startServerr()
{
manager = this;
manager.StartHost();
}
public void connectToServer()
{
//manager.networkAddress = PlayerPrefs.GetString("oppPlayerIP");
manager.StartClient();
}
public override void OnClientConnect(NetworkConnection conn)
{
//base.OnClientConnect(conn);
}
public override void OnClientDisconnect(NetworkConnection conn)
{
//base.OnClientDisconnect(conn);
}
public override void OnServerConnect(NetworkConnection conn)
{
//base.OnServerConnect(conn);
}
public override void OnServerDisconnect(NetworkConnection conn)
{
//base.OnServerDisconnect(conn);
}
}
您可以在公共功能部分here中找到更多网络回调函数。
答案 1 :(得分:0)
首先,我建议您在实际尝试建立连接之前阅读有关统一网络的所有文档。完成后,您应该知道如何处理此请求。如果您当时不知道如何处理此特定请求。
首先,您需要让服务器使用 OnConnected(NetworkMessage netMsg)方法处理所有传入连接。 您应该能够识别连接到服务器的各个播放器。 现在,您只需创建一个就绪按钮,并在单击时向服务器发送就绪状态。如果每个连接的玩家都向服务器发送了他的isReady消息,则可以启动游戏。这是通过从服务器向所有连接的客户端发送消息来完成的。
希望这有帮助,任何问题都可以问。