我设法使用 Unity Netcode 实现某种多人游戏,我知道这是非常新的,但我遇到了一个相当大的问题。我似乎无法断开与服务器实例的连接。这会导致我加载游戏场景并生成 NetworkManager 实例的问题。然后我返回主菜单场景并再次加载游戏场景,现在有 2 个 NetworkManager 实例,这显然会导致错误。
我在文档中读到您可以使用它:
public void Disconnect()
{
if (IsHost)
{
NetworkManager.Singleton.StopHost();
}
else if (IsClient)
{
NetworkManager.Singleton.StopClient();
}
else if (IsServer)
{
NetworkManager.Singleton.StopServer();
}
UnityEngine.SceneManagement.SceneManager.LoadScene("MainMenu");
}
然而,所有这些停止函数在单例下似乎根本不存在。我错过了图书馆或其他什么吗? 现在我使用的解决方法是禁用“不破坏”,然后 NetworkManager 在切换场景后被破坏,但是如果我想在切换场景后保留它怎么办?有没有办法控制服务器/客户端何时停止?我假设这是一个错误,但我只是想确定一下。
void Disconnect()
{
NetworkManager.Singleton.Shutdown();
}
如果已连接,则断开客户端连接;如果正在运行,则停止服务器。 要回答您的完整问题,您还需要在非联网场景中使用
Cleanup()
函数来检查误入歧途的 NetworkManager
单例并销毁它们。这将避免网络管理员不必要的重复。
void Cleanup()
{
if (NetworkManager.Singleton != null)
{
Destroy(NetworkManager.Singleton.gameObject);
}
}
关闭服务器时暂停执行,以确保它在继续之前关闭
NetworkManager.Singleton.Shutdown();
while (NetworkManager.Singleton.ShutdownInProgress);
或者您可以使用布尔值,一旦客户端或服务器关闭,该布尔值就会设置为 true。