unity3d 如何在Unity Netcode for Gameobjects中停止客户端/主机?

djp7away  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(292)

我设法让某种多人游戏与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");
}

然而,所有这些停止函数似乎根本不存在于单例下。我是不是缺少了一个库或什么?现在我使用的解决方案是禁用“不要销毁”,然后在切换场景后销毁网络管理器,但是如果我想在切换场景后保留它呢?没有办法控制服务器/客户端何时停止吗?我“我假设这是一个错误,但我只是想确认一下。

rta7y2nd

rta7y2nd1#

void Disconnect()
{
    NetworkManager.Singleton.Shutdown();
}

断开连接的客户端和停止运行的服务器。要回答你的完整问题,你还需要一个Cleanup()函数在你的非网络场景中检查丢失的NetworkManager单例并销毁它们。这将避免不必要的重复网络管理器。

void Cleanup()
{
    if (NetworkManager.Singleton != null)
    {
        Destroy(NetworkManager.Singleton.gameObject);
    }
}

相关问题