- Home /
Remove players and close server in Unity Multiplayer Game
I was working on two players small multiplayer game using Unity's multiplayer environment. I have completed whole game as I learnt through multiple places. Though still I have confusion regarding player removal from the game and releasing used multiplayer server from game.
Let me give some details about my game play setup, its small multiplayer game so I have just keep only one game scene within it and multiplayer game play prefab, I was spawning to join multiplayer. Through NetworkManager my two players automatically get spawned within game play.
Now when any player get defeated, I have directly removed those through destroy method rather than using any multiplayer related method and Game Over screen become visible, still I have not destroyed NetworkManager instance.
[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);
}
On my Game Over screen enable, I was calling StopClient on both connected devices and on Retry or Main Menu button press, I was calling StopHost method on both connected devices. After sometime of wait, I was destroying Multi player game prefab with NetworkManager in it and again respawning game play prefab to playing multiplayer game again.
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 ());
}
But I am new person for Unity multiplayer setup so not sure whether I have done correct implementation or not!!! Because some time match making process get stuck and I require to close instance and try to join players again.
So please give me some suggestion regarding removing players and closing server instance from game and start again when new prefab get spawned.
Your answer
Follow this Question
Related Questions
Unity networking tutorial? 6 Answers
Player ReSpawn Logic 1 Answer
Setup Custom Multiplayer Joining 0 Answers
Check when a player finished spawning [Netcode For GameObjects!] 2 Answers