【问题标题】:How do you stop a client/host in Unity Netcode for Gameobjects?如何在 Unity Netcode for Gameobjects 中停止客户端/主机?
【发布时间】:2021-12-06 10:45:53
【问题描述】:

我设法让某种多人游戏与 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 在切换场景后被破坏,但如果我想在切换场景后保留它怎么办?有没有办法控制服务器/客户端何时停止?我假设这是一个错误,但我只是想确定一下。

【问题讨论】:

  • and now there are 2 NetworkManager instances ...如果单例模式被正确实现,它将/应该避免这种情况..这就是“单例”的全部目的..
  • 我明白这一点,这就是为什么这很奇怪......我猜这就是导致所有错误的原因。它可能需要在代码中手动关闭,这就是我想弄清楚的方法。
  • 那么NetworkManager 是您实现的东西还是它究竟来自哪里?
  • 它来自 Unity Netcode for Gameobjects API。不是我实施的东西。这就是为什么我很惊讶缺少这些功能,我没有制作它们。

标签: c# unity3d multiplayer


【解决方案1】:
void Disconnect()
{
    NetworkManager.Singleton.Shutdown();
}

它会自动关闭主机和客户端的连接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-02
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2020-08-16
    • 2023-02-26
    • 2019-12-15
    相关资源
    最近更新 更多