我有一个ResetNetworkManager
在服务器或客户端需要清理其状态时调用的方法。其中一种情况是服务器关闭时。Stop Server
这要么在单击按钮时发生,要么在方法返回时start
场景被加载。在这种情况下MatchInfo
,服务器的 match 也被传入,并被NetworkMatch.DestroyMatch
调用。
Stop Server
在单击按钮的情况下,一切正常。匹配立即从匹配服务中删除,客户端在列出匹配时看不到它。
但是,当服务器的应用程序关闭时,会从另一个 GameObject 的方法调用相同的OnDestroy
方法。但是,在这种情况下,调用似乎不起作用,可能是因为该NetworkMatch.DestroyMatch
方法实际上启动了一个协程,而这个协程在被它的 GameObject 杀死之前执行得还不够远。
这是一个问题,因为服务器通常会batchmode
在ui 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();
}