После 10 секунд появления игрока в Unity Multiplayer - PullRequest
0 голосов
/ 11 октября 2018

Я использовал встроенную многопользовательскую систему Unity для создания многопользовательской игры, и я завершил всю свою игровую работу.

В настоящее время в моей многопользовательской игре оба моих игрока появляются в начале игры, но я хочу, чтобы они появлялись через 10 секунд ожидания.

Поскольку я хочу обеспечить такую ​​функциональность в игре, я хочу уделить время игрокам.

enter image description here

ДляПо этой причине, я погуглил по нескольким причинам и нашел эту ссылку: Настраиваемое создание плеера

Таким образом, я могу обновить проигрыватель и затем подключиться к сетевому соединению, при этом существуют две проблемы:

  • не было никакого способа дать 10 секунд ожидания, потому что обратный вызов вызывался автоматически - OnServerAddPlayer
  • Метод OnServerAddPlayer не вызывался автоматически в подклассе NetworkManager

Что мне нужно для этого сделать?Вот мой код NetworkManager:

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);
 }

}

Поделитесь своими предложениями по этому поводу.

1 Ответ

0 голосов
/ 11 октября 2018

Вы вызываете другую подпрограмму, которая ждет 10 секунд, прежде чем создать экземпляр проигрывателя в OnServerAddPlayer.

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