我当时正在使用Unity的多人游戏环境开发两个人的小型多人游戏。我从多个地方学到了完整的游戏。 尽管我仍然对从游戏中移除玩家和从游戏中释放使用的多人服务器感到困惑。
让我提供一些有关我的游戏设置,小型多人游戏的详细信息,所以我只保留了一个游戏场景和多人游戏预制件,我希望加入多人游戏。通过NetworkManager,我的两个玩家会自动在游戏中产生。
现在,当任何玩家被击败时,我已经直接通过销毁方法将其删除,而不是使用任何与多人游戏相关的方法,并且“游戏结束”屏幕仍然可见,但是我仍然没有销毁NetworkManager实例。
[Command]
private void CmdShowGameOverPanel ()
{
if (GameManager.Instance.GameType.Equals (GameConstants.GAME_TYPE_FRIENDS)) {
Camera.main.SendMessage (GameConstants.ACTIVATE_GAME_OVER_PANEL, true, SendMessageOptions.DontRequireReceiver);
}
// server will receive command from other device client and call the RPC so other clients also become aware about same
if (isServer)
RpcShowGameOverPanel ();
}
// if its server then it will call RPC
// display game over screen
[ClientRpc]
private void RpcShowGameOverPanel ()
{
if (GameManager.Instance.GameType.Equals (GameConstants.GAME_TYPE_FRIENDS)) {
Camera.main.SendMessage (GameConstants.ACTIVATE_GAME_OVER_PANEL, true, SendMessageOptions.DontRequireReceiver);
}
// after game over screen displayed, destroy this ball player from all devices
Destroy (gameObject);
}
在启用“游戏结束”屏幕时,我在两个连接的设备上都调用StopClient,并且在重试或主菜单按钮按下时,我在两个连接的设备上都调用StopHost方法。经过一段时间的等待,我销毁了其中带有NetworkManager的多人游戏预制体,并再次生成了游戏预制体,以再次玩多人游戏。
void OnEnable ()
{
// only do in friends mode
if (GameManager.Instance.GameType.Equals (GameConstants.GAME_TYPE_FRIENDS))
DodgelsNetworkManager.singleton.StopClient ();
}
public void OnRetryButtonClick ()
{
SoundManager.Instance.PlayButtonClickSound ();
// only do in friends mode
if (GameManager.Instance.GameType.Equals (GameConstants.GAME_TYPE_FRIENDS)) {
// DodgelsNetworkManager.singleton.StopMatchMaker ();
DodgelsNetworkManager.singleton.StopHost ();
// DodgelsNetworkManager.singleton.StopServer ();
}
StartCoroutine (RemoveLoadedGamePlay ());
StartCoroutine (LoadGamePlay ());
}
但是我是Unity多人游戏设置的新手,所以不确定我是否执行正确!!! 因为某些比赛安排过程陷入困境,我需要关闭实例并尝试再次加入玩家。
因此,请给我一些有关从游戏中删除玩家并关闭服务器实例的建议,并在产生新的预制件时重新开始。