0
votes

I was using Unity's built-in multiplayer system for creating a multiplayer game and I have completed my whole game work.

At present in my multiplayer game, my both players get spawned as the game get started but I want to spawn them after 10 seconds waiting.

Because I want to provide this kind of functionality in a game so I want to give some time to players.

enter image description here

For this reason, I have googled on multiple things and found this link: Custom Player Spawning

This way I can update the player and then attach with the network connection still two problems exist:

  • there was no way exist to give 10 seconds waiting because callback get called automatically - OnServerAddPlayer
  • OnServerAddPlayer method didn't get called automatically in a subclass of NetworkManager

What do I require to do for these? Here is my NetworkManager code:

public class DodgelsNetworkManager : NetworkManager
{

 public override void OnClientConnect (NetworkConnection connection)
 {
     base.OnClientConnect (connection);

     GameHUDController.Instance.UpdateDebugMesssage ("\nOnClientConnect");

     Camera.main.SendMessage (GameConstants.ACTIVATE_NETWORK_WAITING_PANEL, true, SendMessageOptions.DontRequireReceiver);
     LayerScroller.stopScrolling = true;

     // client joined the host
     if (connection.connectionId > 0) {

         StartCoroutine (AfterDelayHideWaitingDialog ()); 
     }
 }

 IEnumerator AfterDelayHideWaitingDialog ()
 {
     GameObject networkPlayerObj = null;
     while (networkPlayerObj == null) {
         yield return new WaitForSeconds (0.1f);
         networkPlayerObj = GameObject.FindGameObjectWithTag (GameConstants.TAG_HUMAN_PLAYER);
     }

     networkPlayerObj.GetComponent<NetworkPlayerController> ().HidePlayerWaitingDialog ();
 }

 public override void OnServerAddPlayer (NetworkConnection conn, short playerControllerId)
 {
     Debug.Log ("-------------OnServerAddPlayer");
     GameObject player = Instantiate (playerPrefab, startPositions [conn.connectionId].position, Quaternion.identity);
     NetworkServer.AddPlayerForConnection (conn, player, playerControllerId);
 }

}

Share your suggestions regarding this.

1
There are many ways to accomplish your goal. For instance, you could think about spawning the user into a different logical space for 10 seconds, then spawning them into the game. - Ian MacDonald
but how to spawn players after 10 seconds ?? which callback I require to use and then put 10 seconds waiting into that ?? - Siddharth
OnServerAddPlayer - this method didn't get called on my system and Unity documentation suggesting for this - Siddharth
I see you got your toggle buttons working :) - jiveturkey

1 Answers

1
votes

You call call another subroutine that waits 10 seconds before instantiating the player in OnServerAddPlayer.

 if (manager.IsClientConnected() && !ClientScene.ready)
 {
     ClientScene.Ready(manager.client.connection);
     ClientScene.AddPlayer(0);
 }