1

我有一个ResetNetworkManager在服务器或客户端需要清理其状态时调用的方法。其中一种情况是服务器关闭时。Stop Server这要么在单击按钮时发生,要么在方法返回时start场景被加载。在这种情况下MatchInfo,服务器的 match 也被传入,并被NetworkMatch.DestroyMatch调用。

Stop Server在单击按钮的情况下,一切正常。匹配立即从匹配服务中删除,客户端在列出匹配时看不到它。

但是,当服务器的应用程序关闭时,会从另一个 GameObject 的方法调用相同的OnDestroy方法。但是,在这种情况下,调用似乎不起作用,可能是因为该NetworkMatch.DestroyMatch方法实际上启动了一个协程,而这个协程在被它的 GameObject 杀死之前执行得还不够远。

这是一个问题,因为服务器通常会batchmodeui mode.

有谁知道当应用程序突然关闭时如何确保匹配被破坏?我知道你不能制作OnDestroy协程,否则这将是一个很好的解决方案......

这是该ResetNetworkManager方法的代码:

public void ResetNetworkManager(MatchInfo matchToDestroy)
{
    if (matchToDestroy != null)
    {
        matchMaker.DestroyMatch(matchToDestroy.networkId, 0, MatchDestroyed);
    }
    StopServer();
    StopClient();
    StopHost();
    StopMatchMaker();
    if (_gameStateManager != null)
    {
        NetworkServer.Destroy(_gameStateManager.gameObject);
        _gameStateManager = null;
    }
    Destroy(gameObject);
    NetworkServer.Reset();
}
4

0 回答 0